AbstractJobServer.java

package eu.javaexperience.server;

import java.util.HashMap;

import eu.javaexperience.asserts.AssertArgument;
import eu.javaexperience.collection.map.RWLockMap;
import eu.javaexperience.io.IOStream;
import eu.javaexperience.io.IOStreamServer;
import eu.javaexperience.log.JavaExperienceLoggingFacility;
import eu.javaexperience.log.Loggable;
import eu.javaexperience.log.Logger;
import eu.javaexperience.multithread.ScalableBlockingJobExecutor;
import eu.javaexperience.multithread.ScalableThreadpoolManageStrategy;
import eu.javaexperience.settings.TunableVariable;

public abstract class AbstractJobServer<T extends IOStream> extends ScalableBlockingJobExecutor<T>
{
	protected final IOStreamServer<T> srv;
	
	protected RWLockMap<String, TunableVariable<?>> serverConfigVairables = 
		new RWLockMap<String, TunableVariable<?>>(new HashMap<String, TunableVariable<?>>());
	
	protected static Logger LOG = JavaExperienceLoggingFacility.getLogger(new Loggable("AbstractJobServer"));
	
	public AbstractJobServer(IOStreamServer<T> srv, ScalableThreadpoolManageStrategy poolStrategy)
	{
		super(poolStrategy);
		AssertArgument.assertNotNull(this.srv = srv, "server");
	}
	
	public AbstractJobServer(IOStreamServer<T> srv, int initialWorkerCount)
	{
		this(srv, getDefault(initialWorkerCount));
	}
}