Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo')
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/CDONet4jSessionConfigurationImpl.java17
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/CDONet4jSessionImpl.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java10
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LockDelegationRequest.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LockNotificationIndication.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LockObjectsRequest.java14
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/OpenSessionRequest.java13
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/ReplicateRepositoryRequest.java25
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/RepositoryStateNotificationIndication.java4
9 files changed, 74 insertions, 20 deletions
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/CDONet4jSessionConfigurationImpl.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/CDONet4jSessionConfigurationImpl.java
index ec77a73c52..253877a9b0 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/CDONet4jSessionConfigurationImpl.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/CDONet4jSessionConfigurationImpl.java
@@ -250,6 +250,23 @@ public class CDONet4jSessionConfigurationImpl extends CDOSessionConfigurationImp
return rootResourceID;
}
+ public void setRootResourceID(CDOID rootResourceID)
+ {
+ // The rootResourceID may only be set if it is currently null
+ if (this.rootResourceID == null || this.rootResourceID.isNull())
+ {
+ this.rootResourceID = rootResourceID;
+ }
+ else if (this.rootResourceID != null && this.rootResourceID.equals(rootResourceID))
+ {
+ // Do nothing; it is the same.
+ }
+ else
+ {
+ throw new IllegalStateException("rootResourceID must not be changed unless it is null");
+ }
+ }
+
public boolean isSupportingAudits()
{
return supportingAudits;
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/CDONet4jSessionImpl.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/CDONet4jSessionImpl.java
index 7cea690ca0..62ab03c6e2 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/CDONet4jSessionImpl.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/CDONet4jSessionImpl.java
@@ -235,7 +235,8 @@ public class CDONet4jSessionImpl extends CDOSessionImpl implements org.eclipse.e
// TODO (CD) The next call is on the CDOClientProtocol; shouldn't it be on the DelegatingSessionProtocol instead?
OpenSessionResult result = protocol.openSession(repositoryName, options().isPassiveUpdateEnabled(), options()
- .getPassiveUpdateMode());
+ .getPassiveUpdateMode(), options().getLockNotificationMode());
+
setSessionID(result.getSessionID());
setUserID(result.getUserID());
setLastUpdateTime(result.getLastUpdateTime());
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java
index 9ba6ae8b50..956ed5199e 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java
@@ -11,6 +11,7 @@
package org.eclipse.emf.cdo.internal.net4j.protocol;
import org.eclipse.emf.cdo.CDOObject;
+import org.eclipse.emf.cdo.common.CDOCommonSession.Options.LockNotificationMode;
import org.eclipse.emf.cdo.common.CDOCommonSession.Options.PassiveUpdateMode;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
@@ -97,9 +98,10 @@ public class CDOClientProtocol extends SignalProtocol<CDOSession> implements CDO
}
public OpenSessionResult openSession(String repositoryName, boolean passiveUpdateEnabled,
- PassiveUpdateMode passiveUpdateMode)
+ PassiveUpdateMode passiveUpdateMode, LockNotificationMode lockNotificationMode)
{
- return send(new OpenSessionRequest(this, repositoryName, passiveUpdateEnabled, passiveUpdateMode));
+ return send(new OpenSessionRequest(this, repositoryName, passiveUpdateEnabled, passiveUpdateMode,
+ lockNotificationMode));
}
public void disablePassiveUpdate()
@@ -229,7 +231,7 @@ public class CDOClientProtocol extends SignalProtocol<CDOSession> implements CDO
{
revisionKeys.add(rev);
}
-
+
return lockObjects2(revisionKeys, viewID, viewedBranch, lockType, timeout);
}
@@ -241,7 +243,7 @@ public class CDOClientProtocol extends SignalProtocol<CDOSession> implements CDO
try
{
- return new LockObjectsRequest(this, revisionKeys, viewID, viewedBranch, lockType, timeout).send();
+ return new LockObjectsRequest(this, revisionKeys, viewID, lockType, timeout).send();
}
catch (RemoteException ex)
{
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LockDelegationRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LockDelegationRequest.java
index 08be5b6615..dccc18ee02 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LockDelegationRequest.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LockDelegationRequest.java
@@ -27,17 +27,21 @@ public class LockDelegationRequest extends LockObjectsRequest
{
private String lockAreaID;
+ private CDOBranch viewedBranch;
+
public LockDelegationRequest(CDOClientProtocol protocol, String lockAreaID, List<CDORevisionKey> revisionKeys,
CDOBranch viewedBranch, LockType lockType, long timeout)
{
- super(protocol, CDOProtocolConstants.SIGNAL_LOCK_DELEGATION, revisionKeys, 0, viewedBranch, lockType, timeout);
+ super(protocol, CDOProtocolConstants.SIGNAL_LOCK_DELEGATION, revisionKeys, 0, lockType, timeout);
this.lockAreaID = lockAreaID;
+ this.viewedBranch = viewedBranch;
}
@Override
protected void requesting(CDODataOutput out) throws IOException
{
out.writeString(lockAreaID);
+ out.writeCDOBranch(viewedBranch);
super.requesting(out);
}
}
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LockNotificationIndication.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LockNotificationIndication.java
index 2d4175c8ef..9ad8ae9754 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LockNotificationIndication.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LockNotificationIndication.java
@@ -33,6 +33,6 @@ public class LockNotificationIndication extends CDOClientIndication
{
CDOLockChangeInfo lockChangeInfo = in.readCDOLockChangeInfo();
InternalCDOSession session = getSession();
- session.handleLockNotification(lockChangeInfo);
+ session.handleLockNotification(lockChangeInfo, null);
}
}
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LockObjectsRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LockObjectsRequest.java
index 2d8e9325d9..b01f0a0b0d 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LockObjectsRequest.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LockObjectsRequest.java
@@ -11,7 +11,6 @@
**************************************************************************/
package org.eclipse.emf.cdo.internal.net4j.protocol;
-import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.lock.CDOLockState;
import org.eclipse.emf.cdo.common.protocol.CDODataInput;
import org.eclipse.emf.cdo.common.protocol.CDODataOutput;
@@ -39,19 +38,14 @@ public class LockObjectsRequest extends CDOClientRequest<LockObjectsResult>
private List<CDORevisionKey> revisionKeys;
- /**
- * The branch being viewed
- */
- private CDOBranch viewedBranch;
-
public LockObjectsRequest(CDOClientProtocol protocol, List<CDORevisionKey> revisionKeys, int viewID,
- CDOBranch viewedBranch, LockType lockType, long timeout)
+ LockType lockType, long timeout)
{
- this(protocol, CDOProtocolConstants.SIGNAL_LOCK_OBJECTS, revisionKeys, viewID, viewedBranch, lockType, timeout);
+ this(protocol, CDOProtocolConstants.SIGNAL_LOCK_OBJECTS, revisionKeys, viewID, lockType, timeout);
}
protected LockObjectsRequest(CDOClientProtocol protocol, short signalID, List<CDORevisionKey> revisionKeys,
- int viewID, CDOBranch viewedBranch, LockType lockType, long timeout)
+ int viewID, LockType lockType, long timeout)
{
super(protocol, signalID);
@@ -59,7 +53,6 @@ public class LockObjectsRequest extends CDOClientRequest<LockObjectsResult>
this.lockType = lockType;
this.timeout = timeout;
this.revisionKeys = revisionKeys;
- this.viewedBranch = viewedBranch;
}
@Override
@@ -68,7 +61,6 @@ public class LockObjectsRequest extends CDOClientRequest<LockObjectsResult>
out.writeInt(viewID);
out.writeCDOLockType(lockType);
out.writeLong(timeout);
- out.writeCDOBranch(viewedBranch);
out.writeInt(revisionKeys.size());
for (CDORevisionKey revKey : revisionKeys)
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/OpenSessionRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/OpenSessionRequest.java
index 601496df3f..f7ba9581ba 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/OpenSessionRequest.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/OpenSessionRequest.java
@@ -13,6 +13,7 @@ package org.eclipse.emf.cdo.internal.net4j.protocol;
import org.eclipse.emf.cdo.common.CDOCommonRepository;
import org.eclipse.emf.cdo.common.CDOCommonRepository.IDGenerationLocation;
+import org.eclipse.emf.cdo.common.CDOCommonSession.Options.LockNotificationMode;
import org.eclipse.emf.cdo.common.CDOCommonSession.Options.PassiveUpdateMode;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOID.ObjectType;
@@ -46,15 +47,18 @@ public class OpenSessionRequest extends CDOClientRequestWithMonitoring<OpenSessi
private PassiveUpdateMode passiveUpdateMode;
+ private LockNotificationMode lockNotificationMode;
+
private OpenSessionResult result;
public OpenSessionRequest(CDOClientProtocol protocol, String repositoryName, boolean passiveUpdateEnabled,
- PassiveUpdateMode passiveUpdateMode)
+ PassiveUpdateMode passiveUpdateMode, LockNotificationMode lockNotificationMode)
{
super(protocol, CDOProtocolConstants.SIGNAL_OPEN_SESSION);
this.repositoryName = repositoryName;
this.passiveUpdateEnabled = passiveUpdateEnabled;
this.passiveUpdateMode = passiveUpdateMode;
+ this.lockNotificationMode = lockNotificationMode;
}
@Override
@@ -80,6 +84,13 @@ public class OpenSessionRequest extends CDOClientRequestWithMonitoring<OpenSessi
}
out.writeEnum(passiveUpdateMode);
+
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Writing lockNotificationMode: {0}", lockNotificationMode); //$NON-NLS-1$
+ }
+
+ out.writeEnum(lockNotificationMode);
}
@Override
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/ReplicateRepositoryRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/ReplicateRepositoryRequest.java
index 83f1082bcb..156fc10184 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/ReplicateRepositoryRequest.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/ReplicateRepositoryRequest.java
@@ -10,6 +10,8 @@
**************************************************************************/
package org.eclipse.emf.cdo.internal.net4j.protocol;
+import org.eclipse.emf.cdo.common.lock.CDOLockUtil;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockArea;
import org.eclipse.emf.cdo.common.protocol.CDODataInput;
import org.eclipse.emf.cdo.common.protocol.CDODataOutput;
import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
@@ -37,6 +39,13 @@ public class ReplicateRepositoryRequest extends CDOClientRequest<Boolean>
{
out.writeInt(context.getLastReplicatedBranchID());
out.writeLong(context.getLastReplicatedCommitTime());
+
+ String[] lockAreaIDs = context.getLockAreaIDs();
+ out.writeInt(lockAreaIDs.length);
+ for (int i = 0; i < lockAreaIDs.length; i++)
+ {
+ out.writeString(lockAreaIDs[i]);
+ }
}
@Override
@@ -58,8 +67,22 @@ public class ReplicateRepositoryRequest extends CDOClientRequest<Boolean>
context.handleCommitInfo(in.readCDOCommitInfo());
break;
+ case CDOProtocolConstants.REPLICATE_LOCKAREA:
+ boolean deleted = !in.readBoolean();
+ if (deleted)
+ {
+ String deletedLockAreaID = in.readString();
+ LockArea area = CDOLockUtil.createLockArea(deletedLockAreaID);
+ context.handleLockArea(area);
+ }
+ else
+ {
+ context.handleLockArea(in.readCDOLockArea());
+ }
+ break;
+
default:
- throw new IOException("Invalid replicate opcode: " + opcode);
+ throw new IllegalStateException("Invalid replicate opcode: " + opcode);
}
}
}
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/RepositoryStateNotificationIndication.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/RepositoryStateNotificationIndication.java
index 1831d3c7af..557e043461 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/RepositoryStateNotificationIndication.java
+++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/RepositoryStateNotificationIndication.java
@@ -12,6 +12,7 @@
package org.eclipse.emf.cdo.internal.net4j.protocol;
import org.eclipse.emf.cdo.common.CDOCommonRepository;
+import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.protocol.CDODataInput;
import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
import org.eclipse.emf.cdo.internal.net4j.CDONet4jSessionConfigurationImpl.RepositoryInfo;
@@ -34,10 +35,13 @@ public class RepositoryStateNotificationIndication extends CDOClientIndication
{
CDOCommonRepository.State oldState = in.readEnum(CDOCommonRepository.State.class);
CDOCommonRepository.State newState = in.readEnum(CDOCommonRepository.State.class);
+ CDOID rootResourceID = in.readCDOID();
CDONet4jSessionImpl session = (CDONet4jSessionImpl)getSession();
RepositoryInfo repositoryInfo = (RepositoryInfo)session.getRepositoryInfo();
repositoryInfo.setState(newState);
+ repositoryInfo.setRootResourceID(rootResourceID);
+
session.handleRepositoryStateChanged(oldState, newState);
}
}

Back to the top