package com.meidusa.amoeba.context;
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import com.meidusa.amoeba.util.Initialisable;
import com.meidusa.amoeba.util.InitialisationException;
public class RuntimeContext implements Initialisable {
private String serverCharset;
private Executor readExecutor;
private Executor clientSideExecutor;
private Executor serverSideExecutor;
private int readThreadPoolSize = 16;
private int clientSideThreadPoolSize = 16;
private int serverSideThreadPoolSize = 16;
/**
* query time out
*/
private int queryTimeout;
private boolean useMultipleThread = true;
/**
* max result --Overload protection , query session was killed , results returned size exceed
*/
private int maxResult = -1;
public int getQueryTimeout() {
return queryTimeout;
}
public void setQueryTimeout(int queryTimeout) {
this.queryTimeout = queryTimeout;
}
public boolean isUseMultipleThread() {
return useMultipleThread;
}
public void setUseMultipleThread(boolean useMultipleThread) {
this.useMultipleThread = useMultipleThread;
}
public String getServerCharset() {
return serverCharset;
}
public Executor getReadExecutor() {
return readExecutor;
}
public void setReadExecutor(Executor readExecutor) {
this.readExecutor = readExecutor;
}
public Executor getClientSideExecutor() {
return clientSideExecutor;
}
public void setClientSideExecutor(Executor clientSideExecutor) {
this.clientSideExecutor = clientSideExecutor;
}
public Executor getServerSideExecutor() {
return serverSideExecutor;
}
public void setServerSideExecutor(Executor serverSideExecutor) {
this.serverSideExecutor = serverSideExecutor;
}
public int getReadThreadPoolSize() {
return readThreadPoolSize;
}
public void setReadThreadPoolSize(int readThreadPoolSize) {
this.readThreadPoolSize = readThreadPoolSize;
}
public int getClientSideThreadPoolSize() {
return clientSideThreadPoolSize;
}
public void setClientSideThreadPoolSize(int clientSideThreadPoolSize) {
this.clientSideThreadPoolSize = clientSideThreadPoolSize;
}
public int getServerSideThreadPoolSize() {
return serverSideThreadPoolSize;
}
public void setServerSideThreadPoolSize(int serverSideThreadPoolSize) {
this.serverSideThreadPoolSize = serverSideThreadPoolSize;
}
public void setServerCharset(String serverCharset) {
this.serverCharset = serverCharset;
}
public int getMaxResult() {
return maxResult;
}
public void setMaxResult(int maxResult) {
this.maxResult = maxResult;
}
static class ReNameableThreadExecutor extends ThreadPoolExecutor {
public ReNameableThreadExecutor(int poolSize) {
super(poolSize, poolSize, Long.MAX_VALUE, TimeUnit.NANOSECONDS,
new LinkedBlockingQueue<Runnable>());
}
}
@Override
public void init() throws InitialisationException {
readExecutor = new ReNameableThreadExecutor(getReadThreadPoolSize());
serverSideExecutor = new ReNameableThreadExecutor(
getServerSideThreadPoolSize());
clientSideExecutor = new ReNameableThreadExecutor(
getClientSideThreadPoolSize());
}
}