Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2010-05-12 09:42:19 +0000
committerEike Stepper2010-05-12 09:42:19 +0000
commit3971d0f7c91c90c08034a132d81827aea656934e (patch)
tree7b554d8ed5fc53071513ade8eb2d87814f93bfc5 /plugins
parent3a1346d438a7518b8aff44bed41207314e77727d (diff)
downloadcdo-3971d0f7c91c90c08034a132d81827aea656934e.tar.gz
cdo-3971d0f7c91c90c08034a132d81827aea656934e.tar.xz
cdo-3971d0f7c91c90c08034a132d81827aea656934e.zip
*** empty log message ***
Diffstat (limited to 'plugins')
-rw-r--r--plugins/org.eclipse.emf.cdo.examples.server/META-INF/MANIFEST.MF7
-rw-r--r--plugins/org.eclipse.emf.cdo.examples.server/src/org/eclipse/emf/cdo/examples/server/DemoConfiguration.java225
2 files changed, 231 insertions, 1 deletions
diff --git a/plugins/org.eclipse.emf.cdo.examples.server/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.examples.server/META-INF/MANIFEST.MF
index 9c1a12c01f..4867c76ba7 100644
--- a/plugins/org.eclipse.emf.cdo.examples.server/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.cdo.examples.server/META-INF/MANIFEST.MF
@@ -8,5 +8,10 @@ Bundle-Localization: plugin
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-ClassPath: .
Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.emf.cdo.server.db;bundle-version="[3.0.0,4.0.0)";visibility:=reexport
+ org.eclipse.emf.cdo.server.db;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.emf.cdo.server.net4j;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.net4j.db.h2;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.net4j.jvm;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.net4j.tcp;bundle-version="[3.0.0,4.0.0)"
Export-Package: org.eclipse.emf.cdo.examples.server;version="3.0.0"
+Import-Package: org.h2.jdbcx;version="1.1.117"
diff --git a/plugins/org.eclipse.emf.cdo.examples.server/src/org/eclipse/emf/cdo/examples/server/DemoConfiguration.java b/plugins/org.eclipse.emf.cdo.examples.server/src/org/eclipse/emf/cdo/examples/server/DemoConfiguration.java
new file mode 100644
index 0000000000..deb78a26c3
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.examples.server/src/org/eclipse/emf/cdo/examples/server/DemoConfiguration.java
@@ -0,0 +1,225 @@
+/**
+ * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.examples.server;
+
+import org.eclipse.emf.cdo.server.CDOServerUtil;
+import org.eclipse.emf.cdo.server.IRepository;
+import org.eclipse.emf.cdo.server.ISession;
+import org.eclipse.emf.cdo.server.db.CDODBUtil;
+import org.eclipse.emf.cdo.server.db.IDBStore;
+import org.eclipse.emf.cdo.server.db.mapping.IMappingStrategy;
+import org.eclipse.emf.cdo.spi.server.InternalRepository;
+import org.eclipse.emf.cdo.spi.server.InternalSessionManager;
+
+import org.eclipse.net4j.db.DBUtil;
+import org.eclipse.net4j.db.IDBAdapter;
+import org.eclipse.net4j.db.IDBConnectionProvider;
+import org.eclipse.net4j.signal.ISignalProtocol;
+import org.eclipse.net4j.util.container.ContainerEventAdapter;
+import org.eclipse.net4j.util.container.IContainer;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.event.IListener;
+import org.eclipse.net4j.util.lifecycle.Lifecycle;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+import org.eclipse.net4j.util.security.IUserManager;
+import org.eclipse.net4j.util.security.UserManager;
+
+import org.h2.jdbcx.JdbcDataSource;
+
+import javax.sql.DataSource;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+
+/**
+ * @author Eike Stepper
+ */
+public class DemoConfiguration extends Lifecycle
+{
+ private static final int NAME_LENGTH = 64;
+
+ private static final String NAME_ALPHABET = "abcdefghijklmnopqrstuvwxyz";
+
+ private Mode mode = Mode.NORMAL;
+
+ private String[] userIDs;
+
+ private transient String name;
+
+ private transient InternalRepository repository;
+
+ private transient long lastAccess;
+
+ public DemoConfiguration()
+ {
+ }
+
+ public Mode getMode()
+ {
+ return mode;
+ }
+
+ public void setMode(Mode mode)
+ {
+ checkInactive();
+ this.mode = mode;
+ }
+
+ public String[] getUserIDs()
+ {
+ return userIDs;
+ }
+
+ public void setUserIDs(String[] userIDs)
+ {
+ checkInactive();
+ this.userIDs = userIDs;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public IRepository getRepository()
+ {
+ return repository;
+ }
+
+ public long getLastAccess()
+ {
+ return lastAccess;
+ }
+
+ @Override
+ protected void doActivate() throws Exception
+ {
+ name = createRandomName();
+
+ IDBStore store = createStore();
+
+ Map<String, String> props = new HashMap<String, String>();
+ props.put(IRepository.Props.OVERRIDE_UUID, ""); // Use repo name
+ props.put(IRepository.Props.SUPPORTING_AUDITS, mode == Mode.NORMAL ? "false" : "true");
+ props.put(IRepository.Props.SUPPORTING_BRANCHES, mode == Mode.BRANCHING ? "true" : "false");
+
+ repository = (InternalRepository)CDOServerUtil.createRepository(name, store, props);
+
+ InternalSessionManager sessionManager = createSessionManager();
+
+ if (userIDs != null)
+ {
+ IUserManager userManager = createUserManager();
+ sessionManager.setUserManager(userManager);
+ }
+
+ LifecycleUtil.activate(repository);
+ }
+
+ @Override
+ protected void doDeactivate() throws Exception
+ {
+ if (repository != null)
+ {
+ LifecycleUtil.deactivate(repository);
+ repository = null;
+ }
+ }
+
+ protected String createRandomName()
+ {
+ Random random = new Random(System.currentTimeMillis());
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0; i < NAME_LENGTH; i++)
+ {
+ int pos = random.nextInt(NAME_ALPHABET.length());
+ builder.append(NAME_ALPHABET.charAt(pos));
+ }
+
+ return builder.toString();
+ }
+
+ protected IDBStore createStore()
+ {
+ IMappingStrategy mappingStrategy = createMappingStrategy();
+ IDBAdapter dbAdapter = DBUtil.getDBAdapter("h2");
+ IDBConnectionProvider dbConnectionProvider = DBUtil.createConnectionProvider(createDataSource());
+ IDBStore store = CDODBUtil.createStore(mappingStrategy, dbAdapter, dbConnectionProvider);
+ return store;
+ }
+
+ protected IMappingStrategy createMappingStrategy()
+ {
+ switch (mode)
+ {
+ case NORMAL:
+ return CDODBUtil.createHorizontalMappingStrategy(false, false);
+ case AUDITING:
+ return CDODBUtil.createHorizontalMappingStrategy(true, false);
+ case BRANCHING:
+ return CDODBUtil.createHorizontalMappingStrategy(true, true);
+ default:
+ throw new IllegalStateException("Invalid mode: " + mode);
+ }
+ }
+
+ protected DataSource createDataSource()
+ {
+ JdbcDataSource dataSource = new JdbcDataSource();
+ dataSource.setURL("jdbc:h2:databases/" + name + "/h2test;SCHEMA=" + name);
+ return dataSource;
+ }
+
+ protected InternalSessionManager createSessionManager()
+ {
+ InternalSessionManager sessionManager = (InternalSessionManager)CDOServerUtil.createSessionManager();
+ repository.setSessionManager(sessionManager);
+ sessionManager.addListener(new ContainerEventAdapter<ISession>()
+ {
+ @Override
+ protected void onAdded(IContainer<ISession> container, ISession session)
+ {
+ ISignalProtocol<?> protocol = (ISignalProtocol<?>)session.getProtocol();
+ protocol.addListener(new IListener()
+ {
+ public void notifyEvent(IEvent event)
+ {
+ lastAccess = System.currentTimeMillis();
+ }
+ });
+ }
+ });
+
+ return sessionManager;
+ }
+
+ protected IUserManager createUserManager()
+ {
+ UserManager userManager = new UserManager();
+ for (int i = 0; i < userIDs.length; i++)
+ {
+ String userID = userIDs[i];
+ userManager.addUser(userID, ("pw" + (i + 1)).toCharArray());
+ }
+
+ userManager.activate();
+ return userManager;
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public enum Mode
+ {
+ NORMAL, AUDITING, BRANCHING
+ }
+}

Back to the top