Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.embedded/src/org/eclipse/emf/cdo/server/internal/embedded/EmbeddedRepository.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.server.embedded/src/org/eclipse/emf/cdo/server/internal/embedded/EmbeddedRepository.java494
1 files changed, 22 insertions, 472 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.embedded/src/org/eclipse/emf/cdo/server/internal/embedded/EmbeddedRepository.java b/plugins/org.eclipse.emf.cdo.server.embedded/src/org/eclipse/emf/cdo/server/internal/embedded/EmbeddedRepository.java
index 8437f99345..9bf6c7d73d 100644
--- a/plugins/org.eclipse.emf.cdo.server.embedded/src/org/eclipse/emf/cdo/server/internal/embedded/EmbeddedRepository.java
+++ b/plugins/org.eclipse.emf.cdo.server.embedded/src/org/eclipse/emf/cdo/server/internal/embedded/EmbeddedRepository.java
@@ -1,32 +1,24 @@
+/*
+ * Copyright (c) 2016 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.server.internal.embedded;
-import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
-import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
-import org.eclipse.emf.cdo.common.branch.CDOBranchPointRange;
-import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.revision.CDORevision;
-import org.eclipse.emf.cdo.common.revision.CDORevisionCache;
-import org.eclipse.emf.cdo.common.revision.CDORevisionFactory;
-import org.eclipse.emf.cdo.common.revision.CDORevisionHandler;
import org.eclipse.emf.cdo.common.revision.CDORevisionManager;
import org.eclipse.emf.cdo.internal.server.Repository;
import org.eclipse.emf.cdo.net4j.CDONet4jSession;
import org.eclipse.emf.cdo.net4j.CDONet4jSessionConfiguration;
-import org.eclipse.emf.cdo.net4j.CDONet4jUtil;
-import org.eclipse.emf.cdo.server.StoreThreadLocal;
import org.eclipse.emf.cdo.server.embedded.CDOEmbeddedRepositoryConfig;
import org.eclipse.emf.cdo.server.net4j.CDONet4jServerUtil;
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionCache;
+import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager;
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager.RevisionLoader;
-import org.eclipse.emf.cdo.spi.common.revision.RevisionInfo;
-import org.eclipse.emf.cdo.spi.common.revision.SyntheticCDORevision;
-import org.eclipse.emf.cdo.spi.server.InternalRepository;
-import org.eclipse.emf.cdo.spi.server.InternalSession;
-import org.eclipse.emf.cdo.spi.server.InternalSessionManager;
import org.eclipse.emf.cdo.spi.server.InternalStore;
import org.eclipse.emf.cdo.spi.server.RepositoryFactory;
@@ -35,13 +27,9 @@ import org.eclipse.net4j.acceptor.IAcceptor;
import org.eclipse.net4j.connector.IConnector;
import org.eclipse.net4j.jvm.JVMUtil;
import org.eclipse.net4j.util.container.IManagedContainer;
-import org.eclipse.net4j.util.event.IListener;
-import org.eclipse.net4j.util.lifecycle.LifecycleException;
-import org.eclipse.net4j.util.lifecycle.LifecycleState;
import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
import org.eclipse.net4j.util.om.OMPlatform;
-import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EPackage;
import java.util.ArrayList;
@@ -52,8 +40,6 @@ import java.util.List;
*/
public class EmbeddedRepository extends Repository.Default
{
- private static final String JVM_ACCEPTOR_PREFIX = "cdo_embedded_repo_";
-
private CDOEmbeddedRepositoryConfig config;
private IAcceptor acceptor;
@@ -67,12 +53,13 @@ public class EmbeddedRepository extends Repository.Default
public CDONet4jSession openClientSession()
{
- CDORevisionManager revisionManager = new DelegatingRevisionManager(getRevisionManager());
- CDONet4jSessionConfiguration configuration = createSessionConfiguration(connector, revisionManager);
+ CDOBranchManager branchManager = new ClientBranchManager(getBranchManager());
+ CDORevisionManager revisionManager = new ClientRevisionManager(getRevisionManager());
+
+ CDONet4jSessionConfiguration configuration = config.createSessionConfiguration(connector, branchManager, revisionManager);
CDONet4jSession session = configuration.openNet4jSession();
- session.options().setCommitTimeout(Integer.MAX_VALUE);
- config.modifySessionConfiguration(this, configuration);
+ config.modifySession(this, session);
return session;
}
@@ -106,8 +93,11 @@ public class EmbeddedRepository extends Repository.Default
super.doBeforeActivate();
+ InternalCDOBranchManager branchManager = getBranchManager();
+ branchManager.setBranchLoader(new ServerBranchLoader(this));
+
InternalCDORevisionManager revisionManager = getRevisionManager();
- revisionManager.setRevisionLoader(new ClientAwareRevisionLoader(this));
+ revisionManager.setRevisionLoader(new ServerRevisionLoader(this));
}
@Override
@@ -118,8 +108,8 @@ public class EmbeddedRepository extends Repository.Default
IManagedContainer container = getContainer();
container.putElement(RepositoryFactory.PRODUCT_GROUP, RepositoryFactory.TYPE, getName(), this);
- acceptor = createAcceptor(container);
- connector = createConnector(container);
+ acceptor = config.createAcceptor(container);
+ connector = config.createConnector(container);
InternalStore store = getStore();
if (store.isFirstStart())
@@ -132,22 +122,6 @@ public class EmbeddedRepository extends Repository.Default
}
}
- protected void doAfterFirstStart()
- {
- // Subclasses may override.
- }
-
- protected void doAfterReStart()
- {
- // Subclasses may override.
- }
-
- @Override
- protected void doBeforeDeactivate() throws Exception
- {
- super.doBeforeDeactivate();
- }
-
@Override
protected void doDeactivate() throws Exception
{
@@ -159,428 +133,4 @@ public class EmbeddedRepository extends Repository.Default
super.doDeactivate();
}
-
- protected IAcceptor createAcceptor(IManagedContainer container)
- {
- return JVMUtil.getAcceptor(container, JVM_ACCEPTOR_PREFIX + getName());
- }
-
- protected IConnector createConnector(IManagedContainer container)
- {
- return JVMUtil.getConnector(container, JVM_ACCEPTOR_PREFIX + getName());
- }
-
- protected CDONet4jSessionConfiguration createSessionConfiguration(IConnector connector, CDORevisionManager revisionManager)
- {
- CDONet4jSessionConfiguration configuration = CDONet4jUtil.createNet4jSessionConfiguration();
- configuration.setConnector(connector);
- configuration.setRepositoryName(getName());
- configuration.setSignalTimeout(Integer.MAX_VALUE);
- configuration.setRevisionManager(revisionManager);
- config.modifySessionConfiguration(this, configuration);
- return configuration;
- }
-
- /**
- * @author Eike Stepper
- */
- private static final class ClientAwareRevisionLoader implements RevisionLoader
- {
- private static final ThreadLocal<InternalSession> SERVER_SESSION = new ThreadLocal<InternalSession>();
-
- private final RevisionLoader delegate;
-
- private ClientAwareRevisionLoader(RevisionLoader delegate)
- {
- this.delegate = delegate;
- }
-
- public RevisionLoader getDelegate()
- {
- return delegate;
- }
-
- public List<RevisionInfo> loadRevisions(List<RevisionInfo> infos, CDOBranchPoint branchPoint, int referenceChunk, int prefetchDepth)
- {
- InternalSession serverSession = SERVER_SESSION.get();
- if (serverSession != null)
- {
- try
- {
- StoreThreadLocal.setSession(serverSession);
- return delegate.loadRevisions(infos, branchPoint, referenceChunk, prefetchDepth);
- }
- finally
- {
- StoreThreadLocal.release();
- }
- }
-
- return delegate.loadRevisions(infos, branchPoint, referenceChunk, prefetchDepth);
- }
-
- public InternalCDORevision loadRevisionByVersion(CDOID id, CDOBranchVersion branchVersion, int referenceChunk)
- {
- InternalSession serverSession = SERVER_SESSION.get();
- if (serverSession != null)
- {
- try
- {
- StoreThreadLocal.setSession(serverSession);
- return delegate.loadRevisionByVersion(id, branchVersion, referenceChunk);
- }
- finally
- {
- StoreThreadLocal.release();
- }
- }
-
- return delegate.loadRevisionByVersion(id, branchVersion, referenceChunk);
- }
-
- public void handleRevisions(EClass eClass, CDOBranch branch, boolean exactBranch, long timeStamp, boolean exactTime, CDORevisionHandler handler)
- {
- InternalSession serverSession = SERVER_SESSION.get();
- if (serverSession != null)
- {
- try
- {
- StoreThreadLocal.setSession(serverSession);
- delegate.handleRevisions(eClass, branch, exactBranch, timeStamp, exactTime, handler);
- }
- finally
- {
- StoreThreadLocal.release();
- }
- }
- else
- {
- delegate.handleRevisions(eClass, branch, exactBranch, timeStamp, exactTime, handler);
- }
- }
- }
-
- /**
- * @author Eike Stepper
- */
- private static final class DelegatingRevisionManager implements InternalCDORevisionManager
- {
- private final InternalCDORevisionManager delegate;
-
- private LifecycleState lifecycleState = LifecycleState.INACTIVE;
-
- private CDONet4jSession clientSession;
-
- private InternalSession serverSession;
-
- public DelegatingRevisionManager(InternalCDORevisionManager delegate)
- {
- this.delegate = delegate;
- }
-
- public boolean hasListeners()
- {
- return delegate.hasListeners();
- }
-
- public IListener[] getListeners()
- {
- return delegate.getListeners();
- }
-
- public void addListener(IListener listener)
- {
- delegate.addListener(listener);
- }
-
- public void removeListener(IListener listener)
- {
- delegate.removeListener(listener);
- }
-
- public LifecycleState getLifecycleState()
- {
- return lifecycleState;
- }
-
- public boolean isActive()
- {
- return lifecycleState == LifecycleState.ACTIVE;
- }
-
- public void activate() throws LifecycleException
- {
- lifecycleState = LifecycleState.ACTIVE;
- }
-
- public Exception deactivate()
- {
- lifecycleState = LifecycleState.INACTIVE;
- serverSession = null;
- clientSession = null;
- return null;
- }
-
- public RevisionLocker getRevisionLocker()
- {
- return delegate.getRevisionLocker();
- }
-
- public void setRevisionLocker(RevisionLocker revisionLocker)
- {
- if (revisionLocker instanceof CDONet4jSession)
- {
- clientSession = (CDONet4jSession)revisionLocker;
-
- ClientAwareRevisionLoader revisionLoader = (ClientAwareRevisionLoader)delegate.getRevisionLoader();
- InternalRepository repository = (InternalRepository)revisionLoader.getDelegate();
- InternalSessionManager sessionManager = repository.getSessionManager();
- serverSession = sessionManager.getSession(clientSession.getSessionID());
- }
- }
-
- public RevisionLoader getRevisionLoader()
- {
- return delegate.getRevisionLoader();
- }
-
- public void setRevisionLoader(RevisionLoader revisionLoader)
- {
- // Do nothing.
- }
-
- public CDORevisionFactory getFactory()
- {
- return delegate.getFactory();
- }
-
- public void setFactory(CDORevisionFactory factory)
- {
- // Do nothing.
- }
-
- public InternalCDORevisionCache getCache()
- {
- return delegate.getCache();
- }
-
- public void setCache(CDORevisionCache cache)
- {
- // Do nothing.
- }
-
- public boolean isSupportingAudits()
- {
- return delegate.isSupportingAudits();
- }
-
- public void setSupportingAudits(boolean on)
- {
- // Do nothing.
- }
-
- public boolean isSupportingBranches()
- {
- return delegate.isSupportingBranches();
- }
-
- public void setSupportingBranches(boolean on)
- {
- // Do nothing.
- }
-
- public EClass getObjectType(CDOID id)
- {
- try
- {
- setServerSession(serverSession);
- return delegate.getObjectType(id);
- }
- finally
- {
- unsetServerSession();
- }
- }
-
- public EClass getObjectType(CDOID id, CDOBranchManager branchManagerForLoadOnDemand)
- {
- try
- {
- setServerSession(serverSession);
- return delegate.getObjectType(id, branchManagerForLoadOnDemand);
- }
- finally
- {
- unsetServerSession();
- }
- }
-
- public CDOBranchPointRange getObjectLifetime(CDOID id, CDOBranchPoint branchPoint)
- {
- try
- {
- setServerSession(serverSession);
- return delegate.getObjectLifetime(id, branchPoint);
- }
- finally
- {
- unsetServerSession();
- }
- }
-
- public boolean containsRevision(CDOID id, CDOBranchPoint branchPoint)
- {
- try
- {
- setServerSession(serverSession);
- return delegate.containsRevision(id, branchPoint);
- }
- finally
- {
- unsetServerSession();
- }
- }
-
- public boolean containsRevisionByVersion(CDOID id, CDOBranchVersion branchVersion)
- {
- try
- {
- setServerSession(serverSession);
- return delegate.containsRevisionByVersion(id, branchVersion);
- }
- finally
- {
- unsetServerSession();
- }
- }
-
- public InternalCDORevision getRevision(CDOID id, CDOBranchPoint branchPoint, int referenceChunk, int prefetchDepth, boolean loadOnDemand,
- SyntheticCDORevision[] synthetics)
- {
- try
- {
- setServerSession(serverSession);
- return delegate.getRevision(id, branchPoint, referenceChunk, prefetchDepth, loadOnDemand, synthetics);
- }
- finally
- {
- unsetServerSession();
- }
- }
-
- public List<CDORevision> getRevisions(List<CDOID> ids, CDOBranchPoint branchPoint, int referenceChunk, int prefetchDepth, boolean loadOnDemand,
- SyntheticCDORevision[] synthetics)
- {
- try
- {
- setServerSession(serverSession);
- return delegate.getRevisions(ids, branchPoint, referenceChunk, prefetchDepth, loadOnDemand, synthetics);
- }
- finally
- {
- unsetServerSession();
- }
- }
-
- public InternalCDORevision getRevision(CDOID id, CDOBranchPoint branchPoint, int referenceChunk, int prefetchDepth, boolean loadOnDemand)
- {
- try
- {
- setServerSession(serverSession);
- return delegate.getRevision(id, branchPoint, referenceChunk, prefetchDepth, loadOnDemand);
- }
- finally
- {
- unsetServerSession();
- }
- }
-
- public InternalCDORevision getRevisionByVersion(CDOID id, CDOBranchVersion branchVersion, int referenceChunk, boolean loadOnDemand)
- {
- try
- {
- setServerSession(serverSession);
- return delegate.getRevisionByVersion(id, branchVersion, referenceChunk, loadOnDemand);
- }
- finally
- {
- unsetServerSession();
- }
- }
-
- public List<CDORevision> getRevisions(List<CDOID> ids, CDOBranchPoint branchPoint, int referenceChunk, int prefetchDepth, boolean loadOnDemand)
- {
- try
- {
- setServerSession(serverSession);
- return delegate.getRevisions(ids, branchPoint, referenceChunk, prefetchDepth, loadOnDemand);
- }
- finally
- {
- unsetServerSession();
- }
- }
-
- public void handleRevisions(EClass eClass, CDOBranch branch, boolean exactBranch, long timeStamp, boolean exactTime, CDORevisionHandler handler)
- {
- try
- {
- setServerSession(serverSession);
- delegate.handleRevisions(eClass, branch, exactBranch, timeStamp, exactTime, handler);
- }
- finally
- {
- unsetServerSession();
- }
- }
-
- public void addRevision(CDORevision revision)
- {
- try
- {
- setServerSession(serverSession);
- delegate.addRevision(revision);
- }
- finally
- {
- unsetServerSession();
- }
- }
-
- public void reviseLatest(CDOID id, CDOBranch branch)
- {
- try
- {
- setServerSession(serverSession);
- delegate.reviseLatest(id, branch);
- }
- finally
- {
- unsetServerSession();
- }
- }
-
- public void reviseVersion(CDOID id, CDOBranchVersion branchVersion, long timeStamp)
- {
- try
- {
- setServerSession(serverSession);
- delegate.reviseVersion(id, branchVersion, timeStamp);
- }
- finally
- {
- unsetServerSession();
- }
- }
-
- private static void setServerSession(InternalSession serverSession)
- {
- ClientAwareRevisionLoader.SERVER_SESSION.set(serverSession);
- }
-
- private static void unsetServerSession()
- {
- ClientAwareRevisionLoader.SERVER_SESSION.remove();
- }
- }
}

Back to the top