diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo')
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); } } |