package io.vivarium.server;
import java.net.InetSocketAddress;
import java.sql.Connection;
import io.vivarium.db.DatabaseUtils;
import io.vivarium.net.Constants;
import io.vivarium.persistence.PersistenceModule;
import io.vivarium.server.workloadmanagement.JobAssignmentThreadFactory;
import io.vivarium.server.workloadmanagement.WorkloadEnforcer;
import io.vivarium.util.concurrency.StartableStoppable;
import io.vivarium.util.concurrency.VoidFunctionScheduler;
public class VivariumResearchServer implements StartableStoppable
{
private final ServerNetworkModule _networkModule;
public VivariumResearchServer(ServerNetworkModule networkModule)
{
_networkModule = networkModule;
}
@Override
public synchronized void start()
{
_networkModule.start();
}
@Override
public synchronized void stop()
{
try
{
_networkModule.stop();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception
{
System.out.println("SERVER: Initializing Vivarium Research Server.");
// Build server dependencies
Connection databaseConnection = DatabaseUtils.createDatabaseConnection("test", "test", "test");
PersistenceModule persistenceModule = new PersistenceModule(databaseConnection);
ClientConnectionFactory clientConnectionFactory = new ClientConnectionFactory();
ClientConnectionManager clientConnectionManager = new ClientConnectionManager(clientConnectionFactory);
JobAssignmentThreadFactory jobAssignmentThreadFactory = new JobAssignmentThreadFactory(clientConnectionManager);
WorkloadEnforcer workloadEnforcer = new WorkloadEnforcer(persistenceModule, jobAssignmentThreadFactory);
VoidFunctionScheduler enforcerScheduler = new VoidFunctionScheduler(workloadEnforcer,
WorkloadEnforcer.DEFAULT_ENFORCE_TIME_GAP_IN_MS);
MessageRouter messageRouter = new MessageRouter(persistenceModule, clientConnectionManager, enforcerScheduler);
InetSocketAddress port = new InetSocketAddress(Constants.DEFAULT_PORT);
ServerNetworkModule networkModule = new ServerNetworkModule(port, messageRouter);
// Build & start server
VivariumResearchServer server = new VivariumResearchServer(networkModule);
server.start();
}
}