Skip to content

Instantly share code, notes, and snippets.

@ghillairet
Created November 3, 2014 17:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ghillairet/b1870a41c23aa03763a4 to your computer and use it in GitHub Desktop.
Save ghillairet/b1870a41c23aa03763a4 to your computer and use it in GitHub Desktop.
cdo-server
package cdo.server;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.emf.cdo.server.CDOServerUtil;
import org.eclipse.emf.cdo.server.IRepository;
import org.eclipse.emf.cdo.server.IStore;
import org.eclipse.emf.cdo.server.db.CDODBUtil;
import org.eclipse.emf.cdo.server.db.mapping.IMappingStrategy;
import org.eclipse.emf.cdo.server.net4j.CDONet4jServerUtil;
import org.eclipse.net4j.Net4jUtil;
import org.eclipse.net4j.db.IDBAdapter;
import org.eclipse.net4j.db.IDBConnectionProvider;
import org.eclipse.net4j.db.h2.H2Adapter;
import org.eclipse.net4j.tcp.TCPUtil;
import org.eclipse.net4j.util.container.IPluginContainer;
import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
import org.eclipse.net4j.util.om.OMPlatform;
import org.eclipse.net4j.util.om.log.PrintLogHandler;
import org.eclipse.net4j.util.om.trace.PrintTraceHandler;
import org.h2.jdbcx.JdbcDataSource;
public class CDOServer {
private final String host;
private final int port;
private final String repositoryName;
private IRepository repository;
public CDOServer(String host, int port, String repositoryName) {
this.host = host;
this.port = port;
this.repositoryName = repositoryName;
}
public void start() {
OMPlatform.INSTANCE.setDebugging(true);
OMPlatform.INSTANCE.addTraceHandler(PrintTraceHandler.CONSOLE);
OMPlatform.INSTANCE.addLogHandler(PrintLogHandler.CONSOLE);
Net4jUtil.prepareContainer(IPluginContainer.INSTANCE);
TCPUtil.prepareContainer(IPluginContainer.INSTANCE);
CDONet4jServerUtil.prepareContainer(IPluginContainer.INSTANCE);
IStore store = createStore(repositoryName);
Map<String, String> properties = createProperties(repositoryName);
repository = CDOServerUtil.createRepository(repositoryName, store, properties);
CDOServerUtil.addRepository(IPluginContainer.INSTANCE, repository);
Net4jUtil.getAcceptor(IPluginContainer.INSTANCE, "tcp", host + ":" + port);
}
public void stop() {
if (repository != null) {
LifecycleUtil.deactivate(repository);
LifecycleUtil.deactivate(IPluginContainer.INSTANCE);
repository = null;
}
}
private static IStore createStore(String name) {
JdbcDataSource dataSource = new JdbcDataSource();
dataSource.setURL("jdbc:h2:~/database/" + name);
IMappingStrategy mappingStrategy = CDODBUtil.createHorizontalMappingStrategy(true, true);
IDBAdapter dbAdapter = new H2Adapter();
IDBConnectionProvider dbConnectionProvider = dbAdapter.createConnectionProvider(dataSource);
return CDODBUtil.createStore(mappingStrategy, dbAdapter, dbConnectionProvider);
}
private static Map<String, String> createProperties(String name) {
Map<String, String> props = new HashMap<String, String>();
props.put(IRepository.Props.OVERRIDE_UUID, name);
props.put(IRepository.Props.SUPPORTING_AUDITS, "true");
props.put(IRepository.Props.SUPPORTING_BRANCHES, "true");
props.put(IRepository.Props.ID_GENERATION_LOCATION, "CLIENT");
return props;
}
public static void main(String[] args) {
CDOServer server = new CDOServer("0.0.0.0", 2036, "demo");
server.start();
System.out.println("Starting server...");
try {
while(System.in.available() == 0) {
Thread.sleep(100);
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Stopping server...");
server.stop();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment