Created
November 3, 2014 17:17
-
-
Save ghillairet/b1870a41c23aa03763a4 to your computer and use it in GitHub Desktop.
cdo-server
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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