
net.oneandone.troilus.Context Maven / Gradle / Ivy
/*
* Copyright 1&1 Internet AG, https://github.com/1and1/
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.oneandone.troilus;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.nio.ByteBuffer;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.atomic.AtomicLong;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.oneandone.troilus.interceptor.QueryInterceptor;
import com.datastax.driver.core.ColumnMetadata;
import com.datastax.driver.core.ConsistencyLevel;
import com.datastax.driver.core.DataType;
import com.datastax.driver.core.PreparedStatement;
import com.datastax.driver.core.ProtocolVersion;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.Statement;
import com.datastax.driver.core.TableMetadata;
import com.datastax.driver.core.UserType;
import com.datastax.driver.core.exceptions.DriverInternalError;
import com.datastax.driver.core.exceptions.InvalidQueryException;
import com.datastax.driver.core.policies.RetryPolicy;
import com.datastax.driver.core.querybuilder.BuiltStatement;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.base.MoreObjects;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
/**
* the context
*
*/
class Context {
private static final Logger LOG = LoggerFactory.getLogger(Context.class);
private final ExecutionSpec executionSpec;
private final InterceptorRegistry interceptorRegistry;
private final BeanMapper beanMapper;
private final Executor executors;
private final DBSession dbSession;
/**
* @param session the underlying session
* @param tablename the tablename
*/
Context(Session session, String tablename) {
this(session, tablename, new BeanMapper());
}
private Context(Session session, String tablename, BeanMapper beanMapper) {
this(new DBSession(session, tablename, beanMapper),
new ExecutionSpec(),
new InterceptorRegistry(),
beanMapper,
newTaskExecutor());
}
private static Executor newTaskExecutor() {
try {
Method commonPoolMeth = ForkJoinPool.class.getMethod("commonPool"); // Java8 method
return (Executor) commonPoolMeth.invoke(ForkJoinPool.class);
} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
return Executors.newCachedThreadPool();
}
}
private Context(DBSession dbSession,
ExecutionSpec executionSpec,
InterceptorRegistry interceptorRegistry,
BeanMapper beanMapper,
Executor executors) {
this.dbSession = dbSession;
this.executionSpec = executionSpec;
this.interceptorRegistry = interceptorRegistry;
this.executors = executors;
this.beanMapper = beanMapper;
}
Context withInterceptor(QueryInterceptor interceptor) {
return new Context(dbSession,
executionSpec,
interceptorRegistry.withInterceptor(interceptor),
beanMapper,
executors);
}
Context withSerialConsistency(ConsistencyLevel consistencyLevel) {
return new Context(dbSession,
executionSpec.withSerialConsistency(consistencyLevel),
interceptorRegistry,
beanMapper,
executors);
}
Context withTtl(int ttlSec) {
return new Context(dbSession,
executionSpec.withTtl(ttlSec),
interceptorRegistry,
beanMapper,
executors);
}
Context withWritetime(long microsSinceEpoch) {
return new Context(dbSession,
executionSpec.withWritetime(microsSinceEpoch),
interceptorRegistry,
beanMapper,
executors);
}
Context withTracking() {
return new Context(dbSession,
executionSpec.withTracking(),
interceptorRegistry,
beanMapper,
executors);
}
Context withoutTracking() {
return new Context(dbSession,
executionSpec.withoutTracking(),
interceptorRegistry,
beanMapper,
executors);
}
Context withRetryPolicy(RetryPolicy policy) {
return new Context(dbSession,
executionSpec.withRetryPolicy(policy),
interceptorRegistry,
beanMapper,
executors);
}
Context withConsistency(ConsistencyLevel consistencyLevel) {
return new Context(dbSession,
executionSpec.withConsistency(consistencyLevel),
interceptorRegistry,
beanMapper,
executors);
}
ConsistencyLevel getConsistencyLevel() {
return executionSpec.getConsistencyLevel();
}
ConsistencyLevel getSerialConsistencyLevel() {
return executionSpec.getSerialConsistencyLevel();
}
Integer getTtlSec() {
return executionSpec.getTtl();
}
Long getWritetime() {
return executionSpec.getWritetime();
}
Boolean getEnableTracing() {
return executionSpec.getEnableTracing();
}
DBSession getDbSession() {
return dbSession;
}
RetryPolicy getRetryPolicy() {
return executionSpec.getRetryPolicy();
}
Executor getTaskExecutor() {
return executors;
}
BeanMapper getBeanMapper() {
return beanMapper;
}
InterceptorRegistry getInterceptorRegistry() {
return interceptorRegistry;
}
ImmutableList
© 2015 - 2025 Weber Informatics LLC | Privacy Policy