Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 152326 Details for
Bug 283274
Acquire a lock could notify others
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Notification patch. Working.
patch.txt (text/plain), 236.89 KB, created by
Juan Pedro Silva
on 2009-11-16 14:10:07 EST
(
hide
)
Description:
Notification patch. Working.
Filename:
MIME Type:
Creator:
Juan Pedro Silva
Created:
2009-11-16 14:10:07 EST
Size:
236.89 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.emf.cdo.server.net4j >Index: src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java,v >retrieving revision 1.11 >diff -u -r1.11 CDOServerProtocol.java >--- src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java 3 Aug 2009 16:47:59 -0000 1.11 >+++ src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java 16 Nov 2009 17:37:24 -0000 >@@ -22,6 +22,7 @@ > import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta; > import org.eclipse.emf.cdo.server.IRepositoryProvider; > import org.eclipse.emf.cdo.server.ISession; >+import org.eclipse.emf.cdo.server.IView; > import org.eclipse.emf.cdo.server.internal.net4j.bundle.OM; > import org.eclipse.emf.cdo.session.remote.CDORemoteSessionMessage; > import org.eclipse.emf.cdo.spi.server.ISessionProtocol; >@@ -30,6 +31,7 @@ > import org.eclipse.net4j.channel.IChannel; > import org.eclipse.net4j.signal.SignalProtocol; > import org.eclipse.net4j.signal.SignalReactor; >+import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType; > import org.eclipse.net4j.util.io.StringCompressor; > import org.eclipse.net4j.util.io.StringIO; > import org.eclipse.net4j.util.lifecycle.LifecycleUtil; >@@ -150,6 +152,60 @@ > return false; > } > >+ /** >+ * @author Juan Pedro Silva >+ */ >+ public void sendRemoteLockNotification(IView sender, List<CDOID> lockedObjects, LockType lockType) >+ { >+ try >+ { >+ if (getSession().hasListeners()) // hasLockListeners >+ { >+ IChannel channel = getChannel(); >+ if (LifecycleUtil.isActive(channel)) >+ { >+ new RemoteLockNotificationRequest(channel, sender, lockedObjects, lockType, System.currentTimeMillis()) >+ .sendAsync(); >+ } >+ else >+ { >+ OM.LOG.warn("Session channel is inactive: " + this); //$NON-NLS-1$ >+ } >+ } >+ } >+ catch (Exception ex) >+ { >+ OM.LOG.error(ex); >+ } >+ } >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ public void sendRemoteUnLockNotification(IView sender, List<CDOID> lockedObjects, LockType lockType) >+ { >+ try >+ { >+ if (getSession().hasListeners()) // hasLockListeners >+ { >+ IChannel channel = getChannel(); >+ if (LifecycleUtil.isActive(channel)) >+ { >+ new RemoteUnLockNotificationRequest(channel, sender, lockedObjects, lockType, System.currentTimeMillis()) >+ .sendAsync(); >+ } >+ else >+ { >+ OM.LOG.warn("Session channel is inactive: " + this); //$NON-NLS-1$ >+ } >+ } >+ } >+ catch (Exception ex) >+ { >+ OM.LOG.error(ex); >+ } >+ } >+ > @Override > protected SignalReactor createSignalReactor(short signalID) > { >@@ -233,6 +289,18 @@ > case CDOProtocolConstants.SIGNAL_REMOTE_MESSAGE: > return new RemoteMessageIndication(this); > >+ /** >+ * @author Juan Pedro Silva >+ */ >+ case CDOProtocolConstants.SIGNAL_REMOTE_LOCK: >+ return new RemoteLockObjectsServerIndication(this); >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ case CDOProtocolConstants.SIGNAL_REMOTE_UNLOCK: >+ return new RemoteLockReleasedServerIndication(this); >+ > default: > return super.createSignalReactor(signalID); > } >Index: src/org/eclipse/emf/cdo/server/internal/net4j/protocol/RemoteLockNotificationRequest.java >=================================================================== >RCS file: src/org/eclipse/emf/cdo/server/internal/net4j/protocol/RemoteLockNotificationRequest.java >diff -N src/org/eclipse/emf/cdo/server/internal/net4j/protocol/RemoteLockNotificationRequest.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/emf/cdo/server/internal/net4j/protocol/RemoteLockNotificationRequest.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,79 @@ >+/** >+ * Copyright (c) 2004 - 2009 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.net4j.protocol; >+ >+import org.eclipse.emf.cdo.common.id.CDOID; >+import org.eclipse.emf.cdo.common.io.CDODataOutput; >+import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants; >+import org.eclipse.emf.cdo.server.IView; >+import org.eclipse.emf.cdo.server.internal.net4j.bundle.OM; >+ >+import org.eclipse.net4j.channel.IChannel; >+import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType; >+import org.eclipse.net4j.util.om.trace.ContextTracer; >+ >+import java.io.IOException; >+import java.util.List; >+ >+/** >+ * @author Juan Pedro Silva >+ */ >+public class RemoteLockNotificationRequest extends CDOServerRequest >+{ >+ >+ private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_PROTOCOL, CommitNotificationRequest.class); >+ >+ private long timeStamp; >+ >+ private IView sender; >+ >+ private List<CDOID> lockedObjects; >+ >+ private LockType lockType; >+ >+ public RemoteLockNotificationRequest(IChannel channel, IView sender, List<CDOID> lockedObjects, LockType lockType, >+ long timeStamp) >+ { >+ super(channel, CDOProtocolConstants.SIGNAL_REMOTE_LOCK); >+ timeStamp = timeStamp; >+ this.sender = sender; >+ this.lockedObjects = lockedObjects; >+ this.lockType = lockType; >+ } >+ >+ @Override >+ protected void requesting(CDODataOutput out) throws IOException >+ { >+ if (TRACER.isEnabled()) >+ { >+ TRACER.format("Writing timeStamp: {0,date} {0,time}", timeStamp); //$NON-NLS-1$ >+ } >+ >+ out.writeLong(timeStamp); >+ if (TRACER.isEnabled()) >+ { >+ TRACER.format("Writing {0} locked IDs", lockedObjects.size()); //$NON-NLS-1$ >+ } >+ >+ out.writeInt(lockedObjects == null ? 0 : lockedObjects.size()); >+ for (CDOID id : lockedObjects) >+ { >+ if (TRACER.isEnabled()) >+ { >+ TRACER.format("Writing locked ID: {0}", id); //$NON-NLS-1$ >+ } >+ out.writeCDOID(id); >+ } >+ >+ out.writeCDOLockType(lockType); >+ } >+ >+} >Index: src/org/eclipse/emf/cdo/server/internal/net4j/protocol/RemoteLockObjectsServerIndication.java >=================================================================== >RCS file: src/org/eclipse/emf/cdo/server/internal/net4j/protocol/RemoteLockObjectsServerIndication.java >diff -N src/org/eclipse/emf/cdo/server/internal/net4j/protocol/RemoteLockObjectsServerIndication.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/emf/cdo/server/internal/net4j/protocol/RemoteLockObjectsServerIndication.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,91 @@ >+/** >+ * Copyright (c) 2004 - 2009 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.net4j.protocol; >+ >+import org.eclipse.emf.cdo.common.id.CDOID; >+import org.eclipse.emf.cdo.common.id.CDOIDAndVersion; >+import org.eclipse.emf.cdo.common.id.CDOIDUtil; >+import org.eclipse.emf.cdo.common.io.CDODataInput; >+import org.eclipse.emf.cdo.common.io.CDODataOutput; >+import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants; >+import org.eclipse.emf.cdo.server.IView; >+import org.eclipse.emf.cdo.server.internal.net4j.bundle.OM; >+import org.eclipse.emf.cdo.spi.server.InternalSessionManager; >+ >+import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType; >+import org.eclipse.net4j.util.io.IORuntimeException; >+import org.eclipse.net4j.util.om.trace.ContextTracer; >+ >+import java.io.IOException; >+import java.util.ArrayList; >+import java.util.List; >+ >+/** >+ * @author Juan Pedro Silva >+ * @see org.eclipse.emf.cdo.server.internal.net4j.protocol.LockObjectsIndication >+ */ >+public class RemoteLockObjectsServerIndication extends AbstractSyncRevisionsIndication >+{ >+ >+ private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_PROTOCOL, RemoteMessageIndication.class); >+ >+ private List<Integer> result; >+ >+ private List<CDOID> lockedObjects = new ArrayList<CDOID>(); >+ >+ private List<CDOIDAndVersion> idAndVersions = new ArrayList<CDOIDAndVersion>(); >+ >+ private LockType lockType; >+ >+ private IView view; >+ >+ public RemoteLockObjectsServerIndication(CDOServerProtocol protocol) >+ { >+ super(protocol, CDOProtocolConstants.SIGNAL_REMOTE_LOCK); >+ } >+ >+ @Override >+ protected void indicating(CDODataInput in) throws IOException >+ { >+ super.indicating(in); >+ int viewID = in.readInt(); >+ lockType = in.readCDOLockType(); >+ long timeout = in.readLong(); >+ >+ try >+ { >+ view = getSession().getView(viewID); // The view might not be from this session. >+ InternalSessionManager sessionManager = getRepository().getSessionManager(); >+ result = sessionManager.sendRemoteLock(view, lockedObjects, lockType); >+ } >+ catch (Exception ex) // Interrupted >+ { >+ throw new IORuntimeException(ex); >+ } >+ } >+ >+ @Override >+ protected void responding(CDODataOutput out) throws IOException >+ { >+ out.writeInt(result.size()); >+ for (Integer recipient : result) >+ { >+ out.writeInt(recipient); >+ } >+ } >+ >+ @Override >+ protected void process(CDOID id, int version) >+ { >+ lockedObjects.add(id); >+ idAndVersions.add(CDOIDUtil.createIDAndVersion(id, version)); >+ } >+} >Index: src/org/eclipse/emf/cdo/server/internal/net4j/protocol/RemoteUnLockNotificationRequest.java >=================================================================== >RCS file: src/org/eclipse/emf/cdo/server/internal/net4j/protocol/RemoteUnLockNotificationRequest.java >diff -N src/org/eclipse/emf/cdo/server/internal/net4j/protocol/RemoteUnLockNotificationRequest.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/emf/cdo/server/internal/net4j/protocol/RemoteUnLockNotificationRequest.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,79 @@ >+/** >+ * Copyright (c) 2004 - 2009 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.net4j.protocol; >+ >+import org.eclipse.emf.cdo.common.id.CDOID; >+import org.eclipse.emf.cdo.common.io.CDODataOutput; >+import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants; >+import org.eclipse.emf.cdo.server.IView; >+import org.eclipse.emf.cdo.server.internal.net4j.bundle.OM; >+ >+import org.eclipse.net4j.channel.IChannel; >+import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType; >+import org.eclipse.net4j.util.om.trace.ContextTracer; >+ >+import java.io.IOException; >+import java.util.List; >+ >+/** >+ * @author Juan Pedro Silva >+ */ >+public class RemoteUnLockNotificationRequest extends CDOServerRequest >+{ >+ >+ private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_PROTOCOL, CommitNotificationRequest.class); >+ >+ private long timeStamp; >+ >+ private IView sender; >+ >+ private List<CDOID> lockedObjects; >+ >+ private LockType lockType; >+ >+ public RemoteUnLockNotificationRequest(IChannel channel, IView sender, List<CDOID> lockedObjects, LockType lockType, >+ long timeStamp) >+ { >+ super(channel, CDOProtocolConstants.SIGNAL_REMOTE_UNLOCK); >+ timeStamp = timeStamp; >+ this.sender = sender; >+ this.lockedObjects = lockedObjects; >+ this.lockType = lockType; >+ } >+ >+ @Override >+ protected void requesting(CDODataOutput out) throws IOException >+ { >+ if (TRACER.isEnabled()) >+ { >+ TRACER.format("Writing timeStamp: {0,date} {0,time}", timeStamp); //$NON-NLS-1$ >+ } >+ >+ out.writeLong(timeStamp); >+ if (TRACER.isEnabled()) >+ { >+ TRACER.format("Writing {0} locked IDs", lockedObjects.size()); //$NON-NLS-1$ >+ } >+ >+ out.writeInt(lockedObjects == null ? 0 : lockedObjects.size()); >+ for (CDOID id : lockedObjects) >+ { >+ if (TRACER.isEnabled()) >+ { >+ TRACER.format("Writing locked ID: {0}", id); //$NON-NLS-1$ >+ } >+ out.writeCDOID(id); >+ } >+ >+ out.writeCDOLockType(lockType); >+ } >+ >+} >Index: src/org/eclipse/emf/cdo/server/internal/net4j/protocol/RemoteLockReleasedServerIndication.java >=================================================================== >RCS file: src/org/eclipse/emf/cdo/server/internal/net4j/protocol/RemoteLockReleasedServerIndication.java >diff -N src/org/eclipse/emf/cdo/server/internal/net4j/protocol/RemoteLockReleasedServerIndication.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/emf/cdo/server/internal/net4j/protocol/RemoteLockReleasedServerIndication.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,90 @@ >+/** >+ * Copyright (c) 2004 - 2009 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.net4j.protocol; >+ >+import org.eclipse.emf.cdo.common.id.CDOID; >+import org.eclipse.emf.cdo.common.id.CDOIDAndVersion; >+import org.eclipse.emf.cdo.common.id.CDOIDUtil; >+import org.eclipse.emf.cdo.common.io.CDODataInput; >+import org.eclipse.emf.cdo.common.io.CDODataOutput; >+import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants; >+import org.eclipse.emf.cdo.server.IView; >+import org.eclipse.emf.cdo.server.internal.net4j.bundle.OM; >+import org.eclipse.emf.cdo.spi.server.InternalSessionManager; >+ >+import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType; >+import org.eclipse.net4j.util.io.IORuntimeException; >+import org.eclipse.net4j.util.om.trace.ContextTracer; >+ >+import java.io.IOException; >+import java.util.ArrayList; >+import java.util.List; >+ >+/** >+ * @author Juan Pedro Silva >+ * @see org.eclipse.emf.cdo.server.internal.net4j.protocol.LockObjectsIndication >+ */ >+public class RemoteLockReleasedServerIndication extends AbstractSyncRevisionsIndication >+{ >+ >+ private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_PROTOCOL, RemoteMessageIndication.class); >+ >+ private List<Integer> result; >+ >+ private List<CDOID> releasedObjects = new ArrayList<CDOID>(); >+ >+ private List<CDOIDAndVersion> idAndVersions = new ArrayList<CDOIDAndVersion>(); >+ >+ private LockType lockType; >+ >+ private IView view; >+ >+ public RemoteLockReleasedServerIndication(CDOServerProtocol protocol) >+ { >+ super(protocol, CDOProtocolConstants.SIGNAL_REMOTE_UNLOCK); >+ } >+ >+ @Override >+ protected void indicating(CDODataInput in) throws IOException >+ { >+ /* >+ * super.indicating(in); //Throws EOFException int viewID = in.readInt(); lockType = in.readCDOLockType(); long >+ * timeout = 1000;// in.readLong(); >+ */ >+ try >+ { >+ // view = getSession().getView(viewID); // The view might not be from this session. >+ InternalSessionManager sessionManager = getRepository().getSessionManager(); >+ result = sessionManager.sendRemoteUnLock(view, releasedObjects, lockType); >+ } >+ catch (Exception ex) // Interrupted >+ { >+ throw new IORuntimeException(ex); >+ } >+ } >+ >+ @Override >+ protected void responding(CDODataOutput out) throws IOException >+ { >+ out.writeInt(result.size()); >+ for (Integer recipient : result) >+ { >+ out.writeInt(recipient); >+ } >+ } >+ >+ @Override >+ protected void process(CDOID id, int version) >+ { >+ releasedObjects.add(id); >+ idAndVersions.add(CDOIDUtil.createIDAndVersion(id, version)); >+ } >+} >#P org.eclipse.emf.cdo.ui >Index: src/org/eclipse/emf/cdo/internal/ui/editor/CDOEditor.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/editor/CDOEditor.java,v >retrieving revision 1.105 >diff -u -r1.105 CDOEditor.java >--- src/org/eclipse/emf/cdo/internal/ui/editor/CDOEditor.java 10 Nov 2009 09:23:36 -0000 1.105 >+++ src/org/eclipse/emf/cdo/internal/ui/editor/CDOEditor.java 16 Nov 2009 17:37:31 -0000 >@@ -33,6 +33,7 @@ > import org.eclipse.emf.internal.cdo.CDOLegacyWrapper; > import org.eclipse.emf.internal.cdo.CDOStateMachine; > >+import org.eclipse.net4j.util.concurrent.IRWLockManager; > import org.eclipse.net4j.util.transaction.TransactionException; > import org.eclipse.net4j.util.ui.actions.LongRunningAction; > import org.eclipse.net4j.util.ui.actions.SafeAction; >@@ -1277,6 +1278,15 @@ > fireDirtyPropertyChange(); > } > }; >+ >+ /** >+ *@author Juan Pedro Silva >+ *@see I don't like this registration here. I rather have it under an option, which is the proper place. However, >+ * this in the only way I can be sure eventHandler has been initialized. >+ *@TODO: Make the registration optional. >+ */ >+ IRWLockManager lm = getView().getSession().getLockmanager(); >+ lm.registerLockListeners(eventHandler.getLockListeners()); > } > catch (RuntimeException ex) > { >Index: CDOClient1.launch >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.ui/CDOClient1.launch,v >retrieving revision 1.43 >diff -u -r1.43 CDOClient1.launch >--- CDOClient1.launch 17 Jul 2009 12:41:11 -0000 1.43 >+++ CDOClient1.launch 16 Nov 2009 17:37:28 -0000 >@@ -23,8 +23,8 @@ > <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx512m"/> > <stringAttribute key="pde.version" value="3.3"/> > <stringAttribute key="product" value="org.eclipse.sdk.ide"/> >-<stringAttribute key="selected_target_plugins" value="org.apache.ant*1.6.5.v20080627-1140@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.pde.runtime@default:default,javax.servlet*2.4.0.v200806031604@default:default,com.ibm.icu*4.0.0.v20081201@default:default,org.eclipse.text@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.equinox.app@default:default,org.eclipse.update.core@default:default,org.eclipse.emf.cheatsheets@default:default,org.eclipse.ui.ide.application@default:default,org.mortbay.jetty.server*6.1.7.v200806031612@default:default,com.ibm.icu*3.6.0.v20080530@default:default,org.eclipse.jface.text@default:default,org.eclipse.emf.importer@default:default,org.eclipse.compare@default:default,org.eclipse.core.runtime@default:true,org.eclipse.jdt.compiler.apt@default:false,org.sat4j.pb*2.1.0.v20090520@default:default,org.eclipse.emf.ant@default:default,org.eclipse.osgi.util@default:default,org.eclipse.equinox.registry@default:default,javax.xml@default:default,org.eclipse.osgi@-1:true,org.eclipse.compare.core@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.team.cvs.core@default:default,org.eclipse.core.net.win32.x86@default:false,org.eclipse.jdt.junit4.runtime@default:default,org.apache.ant*1.7.1.v20090120-1145@default:default,org.eclipse.osgi.services@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.help.ui@default:default,org.eclipse.emf.importer.java@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.jdt.doc.user@default:default,org.eclipse.ui@default:default,org.mortbay.jetty.server*6.1.15.v200905151201@default:default,org.eclipse.team.cvs.ui@default:default,com.ibm.icu*3.6.1.v20080530@default:default,org.apache.jasper@default:default,org.eclipse.pde.doc.user@default:default,org.eclipse.equinox.http.jetty@default:default,com.ibm.icu*3.8.1.v20081217@default:default,org.eclipse.core.resources.win32.x86@default:false,org.eclipse.update.configurator@3:true,org.eclipse.core.boot@default:default,org.eclipse.equinox.simpleconfigurator.manipulator@default:default,org.sat4j.pb*2.0.3.v20081021@default:default,org.eclipse.emf.codegen.ui@default:default,org.sat4j.core*2.0.3.v20081021@default:default,org.eclipse.equinox.p2.repository.tools@default:default,org.eclipse.pde.build@default:default,org.eclipse.help.appserver@default:default,org.eclipse.jdt.core@default:default,org.eclipse.ant.ui@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.equinox.p2.updatesite@default:default,org.eclipse.ui.views.log@default:default,org.eclipse.jsch.core@default:default,org.eclipse.equinox.p2.exemplarysetup@default:default,org.eclipse.equinox.p2.ui@default:default,org.eclipse.emf.mapping.ui@default:default,org.eclipse.platform@default:default,org.eclipse.pde.core@default:default,org.eclipse.jdt.junit@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.ui.browser@default:default,org.eclipse.core.databinding@default:default,org.eclipse.ui.forms@default:default,org.eclipse.emf.edit@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.equinox.jsp.jasper@default:default,org.slf4j.api@default:default,org.eclipse.equinox.p2.publisher@default:default,org.eclipse.swt@default:default,org.eclipse.equinox.launcher@default:default,org.eclipse.emf.importer.ecore@default:default,org.eclipse.team.cvs.ssh@default:default,org.eclipse.emf.codegen.ecore.ui@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.jdt.debug.ui@default:default,org.eclipse.update.ui@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.mapping.ecore2xml.ui@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.converter@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,com.ibm.icu*3.4.5@default:default,javax.servlet*2.5.0.v200806031605@default:default,org.eclipse.core.resources@default:default,org.eclipse.emf.mapping.ecore2ecore@default:default,org.apache.lucene.core@default:default,org.eclipse.emf.codegen.ecore@default:default,org.eclipse.ui.intro@default:default,org.eclipse.equinox.p2.garbagecollector@default:default,org.eclipse.pde.junit.runtime@default:default,org.eclipse.core.resources.compatibility@default:false,org.mortbay.jetty.util*6.1.15.v200905182336@default:default,org.eclipse.jdt.junit.runtime@default:default,org.apache.commons.logging*1.0.4.v200904062259@default:default,org.eclipse.equinox.simpleconfigurator@1:true,org.apache.commons.logging*1.1.1.v200904062255@default:default,org.apache.lucene.analysis*1.9.1.v20080530-1600@default:default,org.apache.commons.el@default:default,org.eclipse.equinox.security@default:default,com.ibm.icu*4.0.1.v20090415@default:default,org.junit*3.8.1.v20090203-1000@default:default,org.eclipse.pde.ui@default:default,org.eclipse.ui.editors@default:default,org.eclipse.help@default:default,org.eclipse.ui.externaltools@default:default,org.eclipse.ui.intro.universal@default:default,org.eclipse.update.core.win32@default:false,org.eclipse.ui.cheatsheets@default:default,org.eclipse.ltk.core.refactoring@default:default,javax.servlet.jsp*1.2.0.v200806031606@default:default,org.eclipse.emf.ecore.change.edit@default:default,org.sat4j.core*2.1.0.v20090520@default:default,org.eclipse.pde@default:default,org.eclipse.search@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.update.scheduler@default:default,org.eclipse.ecf@default:default,com.jcraft.jsch*0.1.31@default:default,org.hamcrest.core@default:default,org.eclipse.core.variables@default:default,org.eclipse.platform.doc.isv@default:default,org.eclipse.ui.win32@default:false,org.junit4@default:default,org.eclipse.emf.exporter@default:default,org.apache.lucene*2.4.0.v20090121-2110@default:default,org.eclipse.debug.ui@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.ui.ide@default:default,org.eclipse.core.runtime.compatibility@default:default,org.junit*3.8.2.v20090203-1005@default:default,org.eclipse.ui.views@default:default,org.eclipse.help.webapp@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.team.core@default:default,org.eclipse.emf.ecore.editor@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.core.commands@default:default,org.eclipse.emf.codegen@default:default,org.eclipse.equinox.frameworkadmin@default:default,org.eclipse.team.cvs.ssh2@default:default,com.jcraft.jsch*0.1.41.v200903070017@default:default,org.apache.ant*1.7.0.v20080627-1145@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.eclipse.team.ui@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.emf.doc@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.jdt.doc.isv@default:default,org.eclipse.emf.common@default:default,org.eclipse.equinox.common@2:true,org.eclipse.emf.mapping.ecore2ecore.editor@default:default,org.apache.lucene*1.4.3.v20080530-1550@default:default,org.eclipse.emf.ecore.edit@default:default,org.eclipse.jdt.core.manipulation@default:default,org.eclipse.ui.workbench.compatibility@default:false,org.eclipse.core.net@default:default,org.eclipse.equinox.security.win32.x86@default:false,org.eclipse.cvs@default:default,org.eclipse.ui.console@default:default,com.jcraft.jsch*0.1.28@default:default,org.eclipse.jface@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.ui.presentations.r21@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.equinox.concurrent@default:default,org.eclipse.equinox.jsp.jasper.registry@default:default,org.eclipse.sdk@default:default,org.eclipse.equinox.p2.director@default:default,org.eclipse.help.base@default:default,org.eclipse.emf.common.ui@default:default,org.eclipse.equinox.launcher.win32.win32.x86@default:false,org.eclipse.equinox.p2.artifact.repository@default:default,org.eclipse.equinox.frameworkadmin.equinox@default:default,org.eclipse.emf.mapping.ecore2xml@default:default,org.eclipse.swt.win32.win32.x86@default:false,org.eclipse.jdt.compiler.tool@default:false,org.apache.lucene*1.9.1.v20080530-1600@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.core.filesystem.win32.x86@default:false,com.jcraft.jsch*0.1.37.v200803061811@default:default,org.eclipse.ant.core@default:default,org.eclipse.equinox.p2.metadata.generator@default:default,org.eclipse.emf.edit.ui@default:default,org.eclipse.emf.importer.rose@default:default,org.eclipse.emf.mapping@default:default,org.eclipse.pde.ui.templates@default:default,org.eclipse.debug.core@default:default,org.eclipse.ui.workbench.texteditor@default:default,javax.servlet*2.3.0.v200806031603@default:default,javax.servlet.jsp*2.0.0.v200806031607@default:default,org.mortbay.jetty.util*6.1.7.v200806031612@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.core.expressions@default:default,org.apache.lucene.analysis*2.4.0.v20090121-2110@default:default,org.eclipse.equinox.security.ui@default:default,org.eclipse.core.jobs@default:default,org.eclipse.jdt.ui@default:default"/> >-<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.cdo.team@default:default,org.eclipse.emf.cdo.examples@default:default,org.eclipse.emf.cdo.net4j@default:default,org.eclipse.emf.cdo@default:default,org.eclipse.net4j.tcp@default:default,org.eclipse.net4j.util@default:default,org.eclipse.emf.cdo.tests.model2@default:default,org.eclipse.emf.cdo.tests.mango.edit@default:default,org.eclipse.emf.cdo.tests.model1.edit@default:default,org.eclipse.net4j.util.ui@default:default,org.eclipse.emf.cdo.ui@default:default,org.eclipse.emf.cdo.tests.model3@default:default,org.eclipse.emf.cdo.ui.ide@default:default,org.eclipse.net4j@default:default,org.eclipse.emf.cdo.tests.model1@default:default,org.eclipse.emf.cdo.common@default:default,org.eclipse.emf.cdo.tests.mango@default:default,org.eclipse.emf.cdo.tests.model2.edit@default:default,org.eclipse.net4j.ui@default:default,org.eclipse.emf.cdo.edit@default:default"/> >+<stringAttribute key="selected_target_plugins" value="org.eclipse.jdt.core.manipulation@default:default,org.eclipse.swt@default:default,org.eclipse.platform@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.equinox.preferences@default:default,org.apache.lucene@default:default,org.eclipse.emf.common@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.ant.core@default:default,org.eclipse.emf.codegen.ecore@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.swt.win32.win32.x86@default:false,org.eclipse.osgi.util@default:default,org.eclipse.core.runtime@default:true,org.eclipse.core.databinding.property@default:default,org.eclipse.jface.text@default:default,org.eclipse.compare.core@default:default,org.eclipse.emf.ecore.change.edit@default:default,org.eclipse.core.filesystem.win32.x86@default:false,org.apache.ant@default:default,org.eclipse.equinox.security.ui@default:default,org.eclipse.core.boot@default:default,org.eclipse.equinox.p2.metadata.generator@default:default,org.eclipse.update.core@default:default,org.eclipse.emf.mapping.ui@default:default,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.equinox.security.win32.x86@default:false,org.eclipse.equinox.p2.ui@default:default,org.eclipse.ui.ide@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.search@default:default,org.eclipse.equinox.launcher@default:default,org.apache.commons.el@default:default,javax.servlet@default:default,org.eclipse.jsch.core@default:default,org.eclipse.help.webapp@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.jdt.doc.user@default:default,org.eclipse.emf.codegen.ecore.ui@default:default,org.eclipse.jdt.core@default:default,org.eclipse.osgi@-1:true,org.eclipse.emf.exporter@default:default,org.eclipse.update.core.win32@default:false,org.eclipse.equinox.p2.publisher@default:default,org.eclipse.emf.importer.java@default:default,org.eclipse.equinox.simpleconfigurator@1:true,org.eclipse.jdt.ui@default:default,org.eclipse.help.appserver@default:default,org.eclipse.update.scheduler@default:default,org.eclipse.ant.ui@default:default,org.eclipse.cvs@default:default,org.eclipse.jdt.debug.ui@default:default,org.eclipse.ui.forms@default:default,org.apache.jasper@default:default,org.eclipse.emf.codegen@default:default,org.mortbay.jetty.server@default:default,org.eclipse.sdk@default:default,com.ibm.icu@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.concurrent@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.jdt.junit4.runtime@default:default,org.eclipse.equinox.app@default:default,org.eclipse.pde.build@default:default,org.eclipse.platform.doc.isv@default:default,org.eclipse.equinox.p2.artifact.repository@default:default,org.eclipse.emf.mapping.ecore2xml@default:default,org.sat4j.pb@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.emf.importer.rose@default:default,org.eclipse.core.net.win32.x86@default:false,org.eclipse.ui.ide.application@default:default,org.eclipse.emf.mapping@default:default,org.eclipse.core.net@default:default,org.eclipse.ui.presentations.r21@default:default,org.eclipse.osgi.services@default:default,org.eclipse.compare@default:default,org.eclipse.core.expressions@default:default,org.eclipse.ecf@default:default,org.eclipse.emf.edit@default:default,org.eclipse.equinox.launcher.win32.win32.x86@default:false,org.mortbay.jetty.util@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.emf.codegen.ui@default:default,org.eclipse.emf.edit.ui@default:default,org.eclipse.equinox.jsp.jasper.registry@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.core.jobs@default:default,org.eclipse.emf.mapping.ecore2xml.ui@default:default,org.eclipse.pde.junit.runtime@default:default,org.eclipse.text@default:default,com.jcraft.jsch@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.emf.doc@default:default,org.eclipse.jdt.junit.runtime@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.ui.cheatsheets@default:default,org.eclipse.equinox.frameworkadmin@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.ui.editors@default:default,org.eclipse.equinox.common@2:true,org.eclipse.core.variables@default:default,org.eclipse.ui.browser@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.emf.ecore.editor@default:default,org.hamcrest.core@default:default,org.eclipse.core.filesystem@default:default,org.junit@default:default,org.eclipse.equinox.simpleconfigurator.manipulator@default:default,org.eclipse.update.ui@default:default,org.eclipse.equinox.security@default:default,org.eclipse.core.runtime.compatibility@default:default,org.eclipse.equinox.frameworkadmin.equinox@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.equinox.p2.repository.tools@default:default,org.eclipse.jdt.junit@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.equinox.p2.garbagecollector@default:default,org.eclipse.ui.intro.universal@default:default,org.eclipse.core.databinding@default:default,org.eclipse.emf.mapping.ecore2ecore.editor@default:default,org.eclipse.emf.common.ui@default:default,org.eclipse.ui@default:default,org.eclipse.equinox.p2.director@default:default,org.eclipse.ui.views@default:default,org.eclipse.team.cvs.core@default:default,javax.servlet.jsp@default:default,org.junit4@default:default,org.eclipse.help@default:default,org.eclipse.equinox.jsp.jasper@default:default,org.eclipse.jface@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.team.ui@default:default,org.eclipse.emf.mapping.ecore2ecore@default:default,org.eclipse.ui.views.log@default:default,org.eclipse.help.base@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.jdt.doc.isv@default:default,org.eclipse.pde.doc.user@default:default,org.eclipse.equinox.p2.exemplarysetup@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.ui.externaltools@default:default,org.eclipse.pde.core@default:default,org.apache.commons.logging@default:default,org.eclipse.pde@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.help.ui@default:default,org.eclipse.debug.core@default:default,org.eclipse.emf.converter@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.eclipse.team.cvs.ui@default:default,org.eclipse.emf.importer.ecore@default:default,org.eclipse.ecf.identity@default:default,org.apache.lucene.analysis@default:default,org.eclipse.emf.ecore.edit@default:default,org.eclipse.core.resources.win32.x86@default:false,org.eclipse.ui.console@default:default,org.eclipse.pde.runtime@default:default,org.eclipse.emf.ant@default:default,org.eclipse.team.cvs.ssh2@default:default,org.eclipse.debug.ui@default:default,org.eclipse.equinox.p2.updatesite@default:default,org.eclipse.core.resources@default:default,org.sat4j.core@default:default,org.eclipse.team.core@default:default,org.eclipse.emf.cheatsheets@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.pde.ui@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.ui.workbench.compatibility@default:false,org.eclipse.ui.win32@default:false,org.eclipse.update.configurator@3:true,org.eclipse.emf.importer@default:default,org.eclipse.pde.ui.templates@default:default,org.eclipse.ui.intro@default:default"/> >+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.net4j.util@default:default,org.eclipse.net4j@default:default,org.eclipse.emf.cdo.tests.model3@default:default,org.eclipse.emf.cdo.ui@default:default,org.eclipse.emf.cdo.common@default:default,org.eclipse.net4j.util.ui@default:default,org.eclipse.emf.cdo.examples@default:default,org.eclipse.emf.cdo.tests.model2@default:default,org.eclipse.emf.cdo.ui.ide@default:default,org.eclipse.emf.cdo.tests.model1@default:default,org.eclipse.emf.cdo.tests.mango@default:default,org.eclipse.emf.cdo.team@default:default,org.eclipse.net4j.ui@default:default,org.eclipse.emf.cdo.net4j@default:default,org.eclipse.emf.cdo@default:default,org.eclipse.net4j.tcp@default:default,org.eclipse.emf.cdo.edit@default:default"/> > <booleanAttribute key="show_selected_only" value="false"/> > <stringAttribute key="templateConfig" value="${target_home}\configuration\config.ini"/> > <booleanAttribute key="tracing" value="true"/> >Index: src/org/eclipse/emf/cdo/ui/CDOEventHandler.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOEventHandler.java,v >retrieving revision 1.17 >diff -u -r1.17 CDOEventHandler.java >--- src/org/eclipse/emf/cdo/ui/CDOEventHandler.java 31 Mar 2009 11:39:57 -0000 1.17 >+++ src/org/eclipse/emf/cdo/ui/CDOEventHandler.java 16 Nov 2009 17:37:31 -0000 >@@ -21,6 +21,8 @@ > import org.eclipse.emf.cdo.transaction.CDOTransactionStartedEvent; > import org.eclipse.emf.cdo.view.CDOView; > import org.eclipse.emf.cdo.view.CDOViewInvalidationEvent; >+import org.eclipse.emf.cdo.view.RemoteLockAcquiredEvent; >+import org.eclipse.emf.cdo.view.RemoteLockReleasedEvent; > > import org.eclipse.net4j.util.container.IContainerDelta; > import org.eclipse.net4j.util.container.IContainerEvent; >@@ -36,6 +38,8 @@ > import org.eclipse.jface.viewers.TreeViewer; > import org.eclipse.ui.PlatformUI; > >+import java.util.ArrayList; >+import java.util.Collection; > import java.util.List; > import java.util.Set; > >@@ -321,4 +325,36 @@ > protected void viewClosed() > { > } >+ >+ private IListener lockListener = new IListener() >+ { >+ public void notifyEvent(IEvent event) >+ { >+ if (event instanceof RemoteLockAcquiredEvent) >+ { >+ RemoteLockAcquiredEvent e = (RemoteLockAcquiredEvent)event; >+ System.err.println("RemoteLockEvent received"); >+ } >+ } >+ }; >+ >+ private IListener unlockListener = new IListener() >+ { >+ public void notifyEvent(IEvent event) >+ { >+ if (event instanceof RemoteLockReleasedEvent) >+ { >+ RemoteLockReleasedEvent e = (RemoteLockReleasedEvent)event; >+ System.err.println("RemoteLockReleasedEvent received"); >+ } >+ } >+ }; >+ >+ public Collection<IListener> getLockListeners() >+ { >+ ArrayList<IListener> ail = new ArrayList(); >+ ail.add(lockListener); >+ ail.add(unlockListener); >+ return ail; >+ } > } >Index: CDOClient2 (JP).launch >=================================================================== >RCS file: CDOClient2 (JP).launch >diff -N CDOClient2 (JP).launch >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ CDOClient2 (JP).launch 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,362 @@ >+<?xml version="1.0" encoding="UTF-8" standalone="no"?> >+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench"> >+<booleanAttribute key="askclear" value="true"/> >+<booleanAttribute key="automaticAdd" value="false"/> >+<booleanAttribute key="automaticValidate" value="false"/> >+<stringAttribute key="bootstrap" value=""/> >+<stringAttribute key="checked" value="org.eclipse.emf.cdo,org.eclipse.emf.cdo.examples,org.eclipse.emf.cdo.ui,org.eclipse.net4j,org.eclipse.net4j.tcp,org.eclipse.net4j.ui,org.eclipse.net4j.util,org.eclipse.net4j.util.ui"/> >+<booleanAttribute key="clearConfig" value="true"/> >+<booleanAttribute key="clearws" value="false"/> >+<booleanAttribute key="clearwslog" value="false"/> >+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/CDOClient2 (1)"/> >+<booleanAttribute key="default" value="true"/> >+<booleanAttribute key="includeOptional" value="true"/> >+<stringAttribute key="location" value="${workspace_loc}/../cdo.client2"/> >+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/> >+<listAttribute key="org.eclipse.debug.ui.favoriteGroups"> >+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/> >+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/> >+</listAttribute> >+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/CDC-1.0%Foundation-1.0"/> >+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-nosplash -console"/> >+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/> >+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx512m"/> >+<stringAttribute key="pde.version" value="3.3"/> >+<stringAttribute key="product" value="org.eclipse.sdk.ide"/> >+<stringAttribute key="selectedPlugin" value="org.eclipse.emf.cdo"/> >+<stringAttribute key="selected_target_plugins" value="org.eclipse.equinox.p2.director@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.core.runtime@default:true,org.hamcrest.core@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.ui.ide.application@default:default,org.eclipse.swt.win32.win32.x86@default:false,org.eclipse.ant.core@default:default,org.eclipse.help.base@default:default,org.apache.commons.codec@default:default,javax.servlet.jsp@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.equinox.app@default:default,org.eclipse.emf.mapping.ecore2xml.ui@default:default,org.eclipse.core.resources.win32.x86@default:false,org.eclipse.ui.workbench@default:default,org.eclipse.emf.mapping.ecore2ecore@default:default,org.eclipse.emf.codegen.ui@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.p2.repository.tools@default:default,org.eclipse.equinox.concurrent@default:default,org.eclipse.pde.ui.templates@default:default,org.eclipse.jdt.ui@default:default,org.eclipse.equinox.jsp.jasper@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.core.net@default:default,org.eclipse.core.databinding.observable@default:default,org.apache.ant@default:default,org.eclipse.emf.edit.ui@default:default,org.eclipse.equinox.p2.ui@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.pde.ui@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.equinox.common@2:true,org.apache.lucene@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.team.cvs.ssh2@default:default,org.eclipse.ui.win32@default:false,org.eclipse.jdt.doc.isv@default:default,org.eclipse.core.filesystem.win32.x86@default:false,org.eclipse.ecf.identity@default:default,org.eclipse.text@default:default,org.eclipse.emf.common@default:default,org.eclipse.equinox.p2.artifact.repository@default:default,org.eclipse.emf.doc@default:default,org.eclipse.update.configurator@3:true,org.eclipse.cvs@default:default,org.eclipse.ui.intro.universal@default:default,org.eclipse.emf.exporter@default:default,org.eclipse.equinox.p2.publisher@default:default,org.eclipse.emf.importer.java@default:default,com.jcraft.jsch@default:default,org.eclipse.ui.console@default:default,org.eclipse.search@default:default,org.eclipse.team.cvs.ui@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.pde.runtime@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.emf.importer@default:default,org.eclipse.emf.importer.ecore@default:default,org.eclipse.jface.text@default:default,org.eclipse.emf.ecore.editor@default:default,org.eclipse.core.boot@default:default,org.eclipse.sdk@default:default,org.eclipse.team.core@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.eclipse.jface@default:default,org.eclipse.ui.views@default:default,org.junit@default:default,org.eclipse.core.net.win32.x86@default:false,org.eclipse.emf.mapping@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ecf@default:default,org.eclipse.ui.editors@default:default,org.eclipse.core.runtime.compatibility@default:default,org.eclipse.equinox.p2.metadata.generator@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.ui.views.log@default:default,org.eclipse.emf.codegen.ecore@default:default,org.eclipse.equinox.frameworkadmin@default:default,org.apache.lucene.analysis@default:default,org.eclipse.ui.externaltools@default:default,org.eclipse.ui@default:default,org.eclipse.ui.cheatsheets@default:default,org.eclipse.jdt.doc.user@default:default,org.eclipse.osgi.util@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.team.ui@default:default,org.eclipse.pde@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.jobs@default:default,org.eclipse.update.core.win32@default:false,org.eclipse.compare.core@default:default,org.sat4j.pb@default:default,org.eclipse.equinox.launcher.win32.win32.x86@default:false,javax.servlet@default:default,org.eclipse.equinox.p2.updatesite@default:default,org.apache.commons.el@default:default,org.eclipse.ui.intro@default:default,org.eclipse.equinox.launcher@default:default,org.eclipse.emf.ecore@default:default,org.apache.commons.httpclient@default:default,org.sat4j.core@default:default,org.eclipse.debug.core@default:default,org.eclipse.ui.browser@default:default,org.eclipse.ant.ui@default:default,org.mortbay.jetty.server@default:default,org.eclipse.emf.mapping.ecore2ecore.editor@default:default,org.eclipse.emf.mapping.ecore2xml@default:default,org.eclipse.emf.ecore.change.edit@default:default,org.eclipse.emf.mapping.ui@default:default,org.eclipse.emf.codegen@default:default,org.eclipse.help.appserver@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.equinox.p2.garbagecollector@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.update.scheduler@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.emf.cheatsheets@default:default,org.eclipse.jdt.debug.ui@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.platform.doc.isv@default:default,org.eclipse.help.webapp@default:default,org.eclipse.pde.build@default:default,org.eclipse.equinox.simpleconfigurator@1:true,org.eclipse.jdt.junit4.runtime@default:default,org.eclipse.pde.junit.runtime@default:default,org.apache.jasper@default:default,org.eclipse.emf.converter@default:default,org.eclipse.core.variables@default:default,org.eclipse.pde.core@default:default,org.eclipse.equinox.jsp.jasper.registry@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.core.commands@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.swt@default:default,org.eclipse.ui.workbench.compatibility@default:false,com.ibm.icu@default:default,org.eclipse.ui.presentations.r21@default:default,org.apache.commons.logging@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.equinox.p2.exemplarysetup@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.emf.ant@default:default,org.eclipse.debug.ui@default:default,org.eclipse.osgi@-1:true,org.eclipse.emf.importer.rose@default:default,org.mortbay.jetty.util@default:default,org.eclipse.compare@default:default,org.eclipse.jdt.junit@default:default,org.eclipse.equinox.security@default:default,org.eclipse.equinox.security.ui@default:default,org.eclipse.core.resources@default:default,org.eclipse.equinox.security.win32.x86@default:false,org.eclipse.update.core@default:default,org.eclipse.jsch.core@default:default,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.core.contenttype@default:default,org.eclipse.emf.codegen.ecore.ui@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.emf.edit@default:default,org.eclipse.osgi.services@default:default,org.eclipse.ui.forms@default:default,org.eclipse.help.ui@default:default,org.eclipse.equinox.frameworkadmin.equinox@default:default,org.eclipse.pde.doc.user@default:default,org.eclipse.core.expressions@default:default,org.eclipse.help@default:default,org.eclipse.equinox.simpleconfigurator.manipulator@default:default,org.eclipse.jdt.junit.runtime@default:default,org.eclipse.team.cvs.core@default:default,org.eclipse.emf.ecore.edit@default:default,org.eclipse.jdt.core@default:default,org.eclipse.update.ui@default:default,org.junit4@default:default,org.eclipse.jdt.core.manipulation@default:default,org.eclipse.emf.common.ui@default:default"/> >+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.cdo.team@default:default,org.eclipse.net4j@default:default,org.eclipse.net4j.tcp@default:default,org.eclipse.net4j.util@default:default,org.eclipse.net4j.util.ui@default:default,org.eclipse.emf.cdo.tests.model3@default:default,org.eclipse.emf.cdo.edit@default:default,org.eclipse.emf.cdo.examples@default:default,org.eclipse.emf.cdo.tests.mango@default:default,org.eclipse.emf.cdo.common@default:default,org.eclipse.emf.cdo.doc@default:default,org.eclipse.emf.cdo.net4j@default:default,org.eclipse.emf.cdo.tests.model1@default:default,org.eclipse.emf.cdo.ui@default:default,org.eclipse.emf.cdo.tests.model2@default:default,org.eclipse.emf.cdo@default:default,org.eclipse.net4j.ui@default:default,org.eclipse.emf.cdo.ui.ide@default:default"/> >+<booleanAttribute key="show_selected_only" value="false"/> >+<stringAttribute key="templateConfig" value="${target_home}\configuration\config.ini"/> >+<booleanAttribute key="tracing" value="true"/> >+<mapAttribute key="tracingOptions"> >+<mapEntry key="org.eclipse.core.runtime/debug/context" value="false"/> >+<mapEntry key="org.eclipse.core.jobs/jobs/beginend" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/completion" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/sources" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/indexmanager" value="false"/> >+<mapEntry key="org.eclipse.net4j.buddies.chat/debug" value="true"/> >+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/checkConditions" value="300"/> >+<mapEntry key="org.eclipse.jface.text.source/debug/RevisionRulerColumn" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/contexts" value="false"/> >+<mapEntry key="org.eclipse.debug.ui/debug/viewers/updateSequence" value="false"/> >+<mapEntry key="org.eclipse.osgi/trace/filename" value="runtime.traces"/> >+<mapEntry key="org.eclipse.debug.ui/debug/contextlaunching" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug" value="true"/> >+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug" value="false"/> >+<mapEntry key="org.eclipse.net4j.tcp/debug" value="true"/> >+<mapEntry key="org.eclipse.team.cvs.core/dirtycaching" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.server/debug.repository" value="true"/> >+<mapEntry key="org.eclipse.jdt.core/debug/javamodel" value="false"/> >+<mapEntry key="org.eclipse.ui.intro/trace/printHTML" value="false"/> >+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/createChanges" value="300"/> >+<mapEntry key="org.eclipse.emf.cdo.common/debug.protocol" value="true"/> >+<mapEntry key="org.eclipse.net4j.util/debug.lifecycle.dump" value="true"/> >+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPerspectiveListener" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.util" value="true"/> >+<mapEntry key="org.eclipse.osgi/resolver/debug" value="false"/> >+<mapEntry key="org.eclipse.team.core/refreshjob" value="false"/> >+<mapEntry key="org.eclipse.update.core/debug/installhandler" value="false"/> >+<mapEntry key="org.eclipse.ui/debug" value="false"/> >+<mapEntry key="org.eclipse.help.ui/debug/infopop" value="false"/> >+<mapEntry key="org.eclipse.pde.core/classpath" value="false"/> >+<mapEntry key="org.eclipse.team.cvs.core/threading" value="false"/> >+<mapEntry key="org.eclipse.equinox.preferences/general" value="false"/> >+<mapEntry key="org.eclipse.net4j.jms.server/debug.store" value="true"/> >+<mapEntry key="org.eclipse.ui/trace/handlers.performance" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/operations.verbose" value="false"/> >+<mapEntry key="org.eclipse.osgi/trace/activation" value="false"/> >+<mapEntry key="org.eclipse.debug.core/debug/commands" value="false"/> >+<mapEntry key="org.eclipse.team.core/threading" value="false"/> >+<mapEntry key="org.eclipse.ui/perf/workbench.restore" value="30000"/> >+<mapEntry key="org.eclipse.update.core/debug/parsing" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/postaction" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/graphics" value="false"/> >+<mapEntry key="org.eclipse.osgi/defaultprofile/logsynchronously" value="false"/> >+<mapEntry key="org.eclipse.net4j.db/debug" value="true"/> >+<mapEntry key="org.eclipse.net4j.buddies.chat.ui/debug" value="true"/> >+<mapEntry key="org.eclipse.ui/debug/workingSets" value="false"/> >+<mapEntry key="org.eclipse.osgi/monitor/activation" value="false"/> >+<mapEntry key="org.eclipse.net4j.jms/debug.protocol" value="true"/> >+<mapEntry key="org.eclipse.debug.ui/debug" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/buffermanager" value="false"/> >+<mapEntry key="org.eclipse.help.base/debug/search" value="false"/> >+<mapEntry key="org.eclipse.pde.build/debug" value="false"/> >+<mapEntry key="org.eclipse.jface.text/debug/ContentAssistSubjectAdapters" value="false"/> >+<mapEntry key="org.eclipse.jdt.ui/perf/search/participants" value="300"/> >+<mapEntry key="org.eclipse.ui/perf/perspective.create" value="800"/> >+<mapEntry key="org.eclipse.update.core/debug/type" value="false"/> >+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin" value="false"/> >+<mapEntry key="org.eclipse.osgi/resolver/generics" value="false"/> >+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPropertyChangeListener" value="false"/> >+<mapEntry key="org.eclipse.osgi/resolver/requires" value="false"/> >+<mapEntry key="org.eclipse.core.resources/refresh" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/perf/containerinitializer" value="5000"/> >+<mapEntry key="org.eclipse.osgi/profile/benchmark" value="false"/> >+<mapEntry key="org.eclipse.help.webapp/debug" value="true"/> >+<mapEntry key="org.eclipse.jdt.ui/debug/ASTProvider" value="false"/> >+<mapEntry key="org.eclipse.osgi/debug" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.server/debug.types" value="true"/> >+<mapEntry key="org.eclipse.ui/trace/handlers" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/contexts.performance" value="false"/> >+<mapEntry key="org.eclipse.net4j.buddies/debug" value="true"/> >+<mapEntry key="org.eclipse.jdt.core/perf/completion" value="300"/> >+<mapEntry key="org.eclipse.team.cvs.core/metafiles" value="false"/> >+<mapEntry key="org.eclipse.osgi/profile/startup" value="false"/> >+<mapEntry key="org.eclipse.core.jobs/jobs" value="false"/> >+<mapEntry key="org.eclipse.core.resources/perf/save.participants" value="500"/> >+<mapEntry key="org.eclipse.net4j/perf" value="false"/> >+<mapEntry key="org.eclipse.help.base/debug" value="true"/> >+<mapEntry key="org.eclipse.net4j/debug" value="true"/> >+<mapEntry key="org.eclipse.net4j/debug.signal" value="true"/> >+<mapEntry key="org.eclipse.core.jobs/jobs/timing" value="false"/> >+<mapEntry key="org.eclipse.net4j.fileshare/debug" value="true"/> >+<mapEntry key="org.eclipse.net4j.db.hsqldb/debug.sql" value="true"/> >+<mapEntry key="org.eclipse.jdt.core/perf/reconcile" value="1000"/> >+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPageListener" value="false"/> >+<mapEntry key="org.eclipse.net4j/debug.buffer" value="false"/> >+<mapEntry key="org.eclipse.core.resources/contenttype/cache" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.repository" value="true"/> >+<mapEntry key="org.eclipse.core.jobs/jobs/locks" value="false"/> >+<mapEntry key="org.eclipse.update.core/debug/configuration" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.examples/debug" value="true"/> >+<mapEntry key="org.eclipse.core.runtime/url/debug/connect" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/handlers.verbose.commandId" value=""/> >+<mapEntry key="org.eclipse.ui.ide/debug" value="false"/> >+<mapEntry key="org.eclipse.osgi/profile/debug" value="false"/> >+<mapEntry key="org.eclipse.pde.core/debug" value="true"/> >+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPartReference" value="false"/> >+<mapEntry key="org.eclipse.ui/debug/job.stale" value="false"/> >+<mapEntry key="org.eclipse.net4j.util/debug.registry" value="true"/> >+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/createPartControl" value="1300"/> >+<mapEntry key="org.eclipse.jdt.core/debug/hierarchy" value="false"/> >+<mapEntry key="org.eclipse.ui.ide/debug/internalerror/openDialog" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.object" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/perf/variableinitializer" value="5000"/> >+<mapEntry key="org.eclipse.emf.cdo.server/debug.revision" value="false"/> >+<mapEntry key="org.eclipse.core.resources/strings" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/sourcemapper" value="false"/> >+<mapEntry key="org.eclipse.core.resources/save/mastertable" value="false"/> >+<mapEntry key="org.eclipse.core.expressions/tracePropertyResolving" value="false"/> >+<mapEntry key="org.eclipse.ui/perf/showHeapStatus" value="true"/> >+<mapEntry key="org.eclipse.jdt.core/debug/javadelta" value="false"/> >+<mapEntry key="org.eclipse.core.resources/preferences" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/selection" value="false"/> >+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist_sorters/extensions" value=""/> >+<mapEntry key="org.eclipse.jdt.core/debug/javamodel/cache" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo/perf.revision" value="true"/> >+<mapEntry key="org.eclipse.osgi/defaultprofile/logfilename" value=""/> >+<mapEntry key="org.eclipse.team.core/backgroundevents" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/keyBindings" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.server/debug.session" value="true"/> >+<mapEntry key="org.eclipse.ui/perf/part.activate" value="200"/> >+<mapEntry key="org.eclipse.update.core/debug" value="true"/> >+<mapEntry key="org.eclipse.osgi/debug/security" value="false"/> >+<mapEntry key="org.eclipse.core.resources/build/needbuild" value="false"/> >+<mapEntry key="org.eclipse.core.resources/restore/metainfo" value="false"/> >+<mapEntry key="org.eclipse.core.resources/perf/builders" value="10000"/> >+<mapEntry key="org.eclipse.net4j.jms.admin/debug.protocol" value="true"/> >+<mapEntry key="org.eclipse.net4j.db.hsqldb/debug" value="true"/> >+<mapEntry key="org.eclipse.ui/perf/perspective.listeners" value="200"/> >+<mapEntry key="org.eclipse.ui/debug/showAllJobs" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.server/debug.store" value="true"/> >+<mapEntry key="org.eclipse.core.resources/history" value="false"/> >+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/search" value="false"/> >+<mapEntry key="org.eclipse.pde.core/validation" value="false"/> >+<mapEntry key="org.eclipse.team.cvs.core/cvsprotocol" value="true"/> >+<mapEntry key="org.eclipse.jface.text/debug/AnnotationPainter" value="false"/> >+<mapEntry key="org.eclipse.core.resources/restore/mastertable" value="false"/> >+<mapEntry key="org.eclipse.core.runtime/debug" value="false"/> >+<mapEntry key="org.eclipse.equinox.preferences/set" value="false"/> >+<mapEntry key="org.eclipse.core.resources/restore/snapshots" value="false"/> >+<mapEntry key="org.eclipse.ui/perf/perspective.switch" value="800"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.protocol" value="true"/> >+<mapEntry key="org.eclipse.help.webapp/debug/workingsets" value="false"/> >+<mapEntry key="org.eclipse.osgi/debug/bundleTime" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.common/perf.revision" value="true"/> >+<mapEntry key="org.eclipse.core.resources/restore/markers" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.common/debug.model" value="true"/> >+<mapEntry key="org.eclipse.ui/perf/workbench.start" value="45000"/> >+<mapEntry key="org.eclipse.core.runtime/url/debug/cachecopy" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.common/perf.revision.reading" value="true"/> >+<mapEntry key="org.eclipse.core.runtime/perf/success" value="false"/> >+<mapEntry key="org.eclipse.net4j/debug.connector" value="true"/> >+<mapEntry key="org.eclipse.jdt.core/perf/selection" value="300"/> >+<mapEntry key="org.eclipse.osgi/debug/startlevel" value="false"/> >+<mapEntry key="org.eclipse.core.resources/restore" value="false"/> >+<mapEntry key="org.eclipse.osgi/resolver/wiring" value="false"/> >+<mapEntry key="org.eclipse.net4j.buddies.server/debug" value="true"/> >+<mapEntry key="org.eclipse.core.resources/perf/snapshot" value="1000"/> >+<mapEntry key="org.eclipse.ui.intro/trace/logPerformance" value="false"/> >+<mapEntry key="org.eclipse.osgi/debug/loader" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/contexts.verbose" value="false"/> >+<mapEntry key="org.eclipse.osgi/resolver/grouping" value="false"/> >+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/makeActions" value="1000"/> >+<mapEntry key="org.eclipse.net4j/debug.acceptor" value="true"/> >+<mapEntry key="org.eclipse.net4j.buddies.ui/debug" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo/perf" value="true"/> >+<mapEntry key="org.eclipse.core.resources/save/markers" value="false"/> >+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver" value="false"/> >+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener2" value="false"/> >+<mapEntry key="org.eclipse.net4j.jvm/debug" value="true"/> >+<mapEntry key="org.eclipse.ui/trace/operations" value="false"/> >+<mapEntry key="org.eclipse.update.core/debug/install" value="false"/> >+<mapEntry key="org.eclipse.equinox.registry/debug/events" value="false"/> >+<mapEntry key="org.eclipse.core.resources/save/metainfo" value="false"/> >+<mapEntry key="org.eclipse.net4j.util/debug.lifecycle" value="true"/> >+<mapEntry key="org.eclipse.ui/perf/contentTypes" value="200"/> >+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser/inprocess" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/perf/javadeltalistener" value="500"/> >+<mapEntry key="org.eclipse.core.resources/perf/listeners" value="500"/> >+<mapEntry key="org.eclipse.ui.intro/flags/noBrowser" value="false"/> >+<mapEntry key="org.eclipse.ui/perf/part.init" value="800"/> >+<mapEntry key="org.eclipse.core.contenttype/debug" value="false"/> >+<mapEntry key="org.eclipse.osgi/resolver/imports" value="false"/> >+<mapEntry key="org.eclipse.core.resources/restore/tree" value="false"/> >+<mapEntry key="org.eclipse.ui.intro.universal/trace/logPerformance" value="false"/> >+<mapEntry key="org.eclipse.help/debug/context" value="false"/> >+<mapEntry key="org.eclipse.osgi/debug/manifest" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo/debug" value="true"/> >+<mapEntry key="org.eclipse.ui/trace/multipageeditor" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.ui/debug" value="true"/> >+<mapEntry key="org.eclipse.net4j.examples/debug" value="true"/> >+<mapEntry key="org.eclipse.core.resources/build/needbuildstack" value="false"/> >+<mapEntry key="org.eclipse.ui/debug/swtdebug" value="false"/> >+<mapEntry key="org.eclipse.core.resources/save/syncinfo" value="false"/> >+<mapEntry key="org.eclipse.team.cvs.ssh/debug" value="false"/> >+<mapEntry key="org.eclipse.core.resources/build/failure" value="false"/> >+<mapEntry key="org.eclipse.team.core/debug" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/builder" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.common/debug.revision" value="true"/> >+<mapEntry key="org.eclipse.osgi/trace/classLoading" value="false"/> >+<mapEntry key="org.eclipse.net4j.jms.server.jdbc/debug" value="true"/> >+<mapEntry key="org.eclipse.core.resources/save" value="false"/> >+<mapEntry key="org.eclipse.core.jobs/jobs/errorondeadlock" value="false"/> >+<mapEntry key="org.eclipse.core.resources/contenttype" value="false"/> >+<mapEntry key="org.eclipse.jface.text/debug/FastPartitioner/PositionCache" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.server/debug" value="true"/> >+<mapEntry key="org.eclipse.jdt.core/debug/compiler" value="false"/> >+<mapEntry key="org.eclipse.osgi/debug/events" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/commands" value="false"/> >+<mapEntry key="org.eclipse.equinox.preferences/get" value="false"/> >+<mapEntry key="org.eclipse.jdt.ui/debug/ResultCollector" value="false"/> >+<mapEntry key="org.eclipse.debug.ui/debug/launchhistory" value="false"/> >+<mapEntry key="org.eclipse.net4j.util/debug.om" value="true"/> >+<mapEntry key="org.eclipse.net4j.jms.server/debug" value="true"/> >+<mapEntry key="org.eclipse.net4j.db.mysql/debug" value="true"/> >+<mapEntry key="org.eclipse.debug.ui/debug/viewers/model" value="false"/> >+<mapEntry key="org.eclipse.net4j.util/debug" value="true"/> >+<mapEntry key="org.eclipse.equinox.registry/debug" value="false"/> >+<mapEntry key="org.eclipse.ui.intro/debug" value="true"/> >+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution/advanced" value="false"/> >+<mapEntry key="org.eclipse.net4j.jms/debug" value="true"/> >+<mapEntry key="org.eclipse.osgi/eclipseadaptor/converter/debug" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.server/debug.resource" value="true"/> >+<mapEntry key="org.eclipse.net4j.db.derby/debug.sql" value="true"/> >+<mapEntry key="org.eclipse.net4j.debug/debug" value="true"/> >+<mapEntry key="org.eclipse.pde.core/cache" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.transaction" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo.server.db/debug" value="true"/> >+<mapEntry key="org.eclipse.net4j/debug.selector" value="true"/> >+<mapEntry key="org.eclipse.debug.core/debug/events" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.common/perf" value="true"/> >+<mapEntry key="org.eclipse.jdt.ui/debug" value="true"/> >+<mapEntry key="org.eclipse.osgi/monitor/classes" value="false"/> >+<mapEntry key="org.eclipse.net4j.db/debug.sql" value="true"/> >+<mapEntry key="org.eclipse.ui/perf/part.input" value="200"/> >+<mapEntry key="org.eclipse.ui.intro.universal/debug" value="true"/> >+<mapEntry key="org.eclipse.jdt.ui/debug/TypeConstraints" value="false"/> >+<mapEntry key="org.eclipse.osgi/debug/messageBundles" value="false"/> >+<mapEntry key="org.eclipse.core.resources/build/invoking" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/javadelta/verbose" value="false"/> >+<mapEntry key="org.eclipse.net4j.util/debug.concurrency" value="true"/> >+<mapEntry key="org.eclipse.net4j.fileshare.ui/debug" value="true"/> >+<mapEntry key="org.eclipse.core.resources/save/tree" value="false"/> >+<mapEntry key="org.eclipse.ui/debug/contributions" value="false"/> >+<mapEntry key="org.eclipse.update.core/debug/warning" value="false"/> >+<mapEntry key="org.eclipse.core.resources/natures" value="false"/> >+<mapEntry key="org.eclipse.jdt.core.manipulation/debug" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo.common/perf.revision.writing" value="true"/> >+<mapEntry key="org.eclipse.net4j.jms.admin/debug" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.model" value="true"/> >+<mapEntry key="org.eclipse.net4j.db.derby/debug" value="true"/> >+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution" value="false"/> >+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser" value="false"/> >+<mapEntry key="org.eclipse.help/debug/search" value="false"/> >+<mapEntry key="org.eclipse.team.cvs.ssh/ssh_protocol" value="false"/> >+<mapEntry key="org.eclipse.ui/perf/part.create" value="800"/> >+<mapEntry key="org.eclipse.core.resources/build/stacktrace" value="false"/> >+<mapEntry key="org.eclipse.ui.intro/trace/logInfo" value="true"/> >+<mapEntry key="org.eclipse.team.core/streams" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.common/debug" value="true"/> >+<mapEntry key="org.eclipse.ui.ide/debug/undomonitor" value="false"/> >+<mapEntry key="org.eclipse.net4j.ui/debug" value="true"/> >+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/RefactorActionGroup" value="150"/> >+<mapEntry key="org.eclipse.ui/experimental/menus" value="false"/> >+<mapEntry key="org.eclipse.core.jobs/jobs/shutdown" value="false"/> >+<mapEntry key="org.eclipse.osgi/debug/packageadmin" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.session" value="true"/> >+<mapEntry key="org.eclipse.core.runtime/compatibility/debug" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.adapter" value="true"/> >+<mapEntry key="org.eclipse.ui/debug/declaredImages" value="false"/> >+<mapEntry key="org.eclipse.update.core/debug/reconciler" value="false"/> >+<mapEntry key="org.eclipse.ui.ide/debug/gc" value="false"/> >+<mapEntry key="org.eclipse.debug.ui/debug/viewers/contentProvider" value="false"/> >+<mapEntry key="org.eclipse.osgi/debug/services" value="false"/> >+<mapEntry key="org.eclipse.net4j.db.mysql/debug.sql" value="true"/> >+<mapEntry key="org.eclipse.net4j.util.ui/debug" value="true"/> >+<mapEntry key="org.eclipse.ui.workbench/debug" value="false"/> >+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist/extensions" value="1000"/> >+<mapEntry key="org.eclipse.osgi/debug/filter" value="false"/> >+<mapEntry key="org.eclipse.net4j.buddies.common/debug" value="true"/> >+<mapEntry key="org.eclipse.debug.core/debug" value="false"/> >+<mapEntry key="org.eclipse.core.resources/debug" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/zipaccess" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.server/debug.protocol" value="true"/> >+<mapEntry key="org.eclipse.ui.browser/debug" value="false"/> >+<mapEntry key="org.eclipse.osgi/profile/impl" value="org.eclipse.osgi.internal.profile.DefaultProfileLogger"/> >+<mapEntry key="org.eclipse.update.core/debug/web" value="false"/> >+<mapEntry key="org.eclipse.net4j.jms.server/debug.protocol" value="true"/> >+<mapEntry key="org.eclipse.team.cvs.core/debug" value="false"/> >+<mapEntry key="org.eclipse.help/debug" value="true"/> >+<mapEntry key="org.eclipse.core.runtime/perf" value="false"/> >+<mapEntry key="org.eclipse.osgi/trace/filters" value="trace.properties"/> >+<mapEntry key="org.eclipse.net4j/debug.channel" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo/perf.revision.loading" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.revision" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.view" value="true"/> >+<mapEntry key="org.eclipse.ui/perf/part.listeners" value="200"/> >+<mapEntry key="org.eclipse.debug.ui/debug/viewers/viewer" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/keyBindings.verbose" value="false"/> >+<mapEntry key="org.eclipse.core.resources/restore/syncinfo" value="false"/> >+<mapEntry key="org.eclipse.osgi/defaultprofile/buffersize" value="256"/> >+<mapEntry key="org.eclipse.ui/perf/page.listeners" value="200"/> >+<mapEntry key="org.eclipse.team.cvs.core/syncchangeevents" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.resource" value="true"/> >+<mapEntry key="org.eclipse.ui/trace/handlers.verbose" value="false"/> >+<mapEntry key="org.eclipse.osgi/monitor/resources" value="false"/> >+<mapEntry key="org.eclipse.ui/perf/part.control" value="800"/> >+<mapEntry key="org.eclipse.net4j/debug.buffer.stream" value="false"/> >+<mapEntry key="org.eclipse.ui/perf/uijob" value="200"/> >+<mapEntry key="org.eclipse.core.runtime/url/debug/cachelookup" value="false"/> >+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener2" value="false"/> >+<mapEntry key="org.eclipse.core.resources/build/delta" value="false"/> >+<mapEntry key="org.eclipse.core.resources/build/interrupt" value="false"/> >+<mapEntry key="org.eclipse.core.runtime/preferences/plugin" value="false"/> >+<mapEntry key="org.eclipse.core.runtime/url/debug" value="false"/> >+<mapEntry key="org.eclipse.osgi/resolver/cycles" value="false"/> >+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/resolution" value="false"/> >+<mapEntry key="org.eclipse.update.configurator/debug" value="false"/> >+<mapEntry key="org.eclipse.debug.ui/debug/viewers/deltas" value="false"/> >+<mapEntry key="org.eclipse.help.ui/debug" value="true"/> >+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/location" value="false"/> >+<mapEntry key="org.eclipse.ui.intro.universal/trace/logInfo" value="true"/> >+</mapAttribute> >+<booleanAttribute key="useDefaultConfig" value="true"/> >+<booleanAttribute key="useDefaultConfigArea" value="true"/> >+<booleanAttribute key="useNamedJRE" value="true"/> >+<booleanAttribute key="useProduct" value="true"/> >+<booleanAttribute key="usefeatures" value="false"/> >+</launchConfiguration> >Index: CDOClient1 (JP).launch >=================================================================== >RCS file: CDOClient1 (JP).launch >diff -N CDOClient1 (JP).launch >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ CDOClient1 (JP).launch 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,398 @@ >+<?xml version="1.0" encoding="UTF-8" standalone="no"?> >+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench"> >+<booleanAttribute key="askclear" value="true"/> >+<booleanAttribute key="automaticAdd" value="false"/> >+<booleanAttribute key="automaticValidate" value="false"/> >+<stringAttribute key="bootstrap" value=""/> >+<stringAttribute key="checked" value="org.eclipse.emf.cdo,org.eclipse.emf.cdo.examples,org.eclipse.emf.cdo.ui,org.eclipse.net4j,org.eclipse.net4j.http,org.eclipse.net4j.http.common,org.eclipse.net4j.tcp,org.eclipse.net4j.ui,org.eclipse.net4j.util,org.eclipse.net4j.util.ui"/> >+<booleanAttribute key="clearConfig" value="false"/> >+<booleanAttribute key="clearws" value="false"/> >+<booleanAttribute key="clearwslog" value="false"/> >+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/CDOClient1 (JP)"/> >+<booleanAttribute key="default" value="true"/> >+<booleanAttribute key="includeOptional" value="true"/> >+<stringAttribute key="location" value="${workspace_loc}/../cdo.client1"/> >+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/> >+<listAttribute key="org.eclipse.debug.ui.favoriteGroups"> >+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/> >+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/> >+</listAttribute> >+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/> >+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -nosplash -console"/> >+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/> >+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx512m"/> >+<stringAttribute key="pde.version" value="3.3"/> >+<stringAttribute key="product" value="org.eclipse.sdk.ide"/> >+<stringAttribute key="selected_target_plugins" value="org.eclipse.jdt.core.manipulation@default:default,org.eclipse.swt@default:default,org.eclipse.platform@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.equinox.preferences@default:default,org.apache.lucene@default:default,org.eclipse.emf.common@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.ant.core@default:default,org.eclipse.emf.codegen.ecore@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.swt.win32.win32.x86@default:false,org.eclipse.osgi.util@default:default,org.eclipse.core.runtime@default:true,org.eclipse.core.databinding.property@default:default,org.eclipse.jface.text@default:default,org.eclipse.compare.core@default:default,org.eclipse.emf.ecore.change.edit@default:default,org.eclipse.core.filesystem.win32.x86@default:false,org.apache.ant@default:default,org.eclipse.equinox.security.ui@default:default,org.eclipse.core.boot@default:default,org.eclipse.equinox.p2.metadata.generator@default:default,org.eclipse.update.core@default:default,org.eclipse.emf.mapping.ui@default:default,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.equinox.security.win32.x86@default:false,org.eclipse.equinox.p2.ui@default:default,org.eclipse.ui.ide@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.search@default:default,org.eclipse.equinox.launcher@default:default,org.apache.commons.el@default:default,javax.servlet@default:default,org.eclipse.jsch.core@default:default,org.eclipse.help.webapp@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.jdt.doc.user@default:default,org.eclipse.emf.codegen.ecore.ui@default:default,org.eclipse.jdt.core@default:default,org.eclipse.osgi@-1:true,org.eclipse.emf.exporter@default:default,org.eclipse.update.core.win32@default:false,org.eclipse.equinox.p2.publisher@default:default,org.eclipse.emf.importer.java@default:default,org.eclipse.equinox.simpleconfigurator@1:true,org.eclipse.jdt.ui@default:default,org.eclipse.help.appserver@default:default,org.eclipse.update.scheduler@default:default,org.eclipse.ant.ui@default:default,org.eclipse.cvs@default:default,org.eclipse.jdt.debug.ui@default:default,org.eclipse.ui.forms@default:default,org.apache.jasper@default:default,org.eclipse.emf.codegen@default:default,org.mortbay.jetty.server@default:default,org.eclipse.sdk@default:default,com.ibm.icu@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.concurrent@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.jdt.junit4.runtime@default:default,org.eclipse.equinox.app@default:default,org.eclipse.pde.build@default:default,org.eclipse.platform.doc.isv@default:default,org.eclipse.equinox.p2.artifact.repository@default:default,org.eclipse.emf.mapping.ecore2xml@default:default,org.sat4j.pb@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.emf.importer.rose@default:default,org.eclipse.core.net.win32.x86@default:false,org.eclipse.ui.ide.application@default:default,org.eclipse.emf.mapping@default:default,org.eclipse.core.net@default:default,org.eclipse.ui.presentations.r21@default:default,org.eclipse.osgi.services@default:default,org.eclipse.compare@default:default,org.eclipse.core.expressions@default:default,org.eclipse.ecf@default:default,org.eclipse.emf.edit@default:default,org.eclipse.equinox.launcher.win32.win32.x86@default:false,org.mortbay.jetty.util@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.emf.codegen.ui@default:default,org.eclipse.emf.edit.ui@default:default,org.eclipse.equinox.jsp.jasper.registry@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.core.jobs@default:default,org.eclipse.emf.mapping.ecore2xml.ui@default:default,org.eclipse.pde.junit.runtime@default:default,org.eclipse.text@default:default,com.jcraft.jsch@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.emf.doc@default:default,org.eclipse.jdt.junit.runtime@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.ui.cheatsheets@default:default,org.eclipse.equinox.frameworkadmin@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.ui.editors@default:default,org.eclipse.equinox.common@2:true,org.eclipse.core.variables@default:default,org.eclipse.ui.browser@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.emf.ecore.editor@default:default,org.hamcrest.core@default:default,org.eclipse.core.filesystem@default:default,org.junit@default:default,org.eclipse.equinox.simpleconfigurator.manipulator@default:default,org.eclipse.update.ui@default:default,org.eclipse.equinox.security@default:default,org.eclipse.core.runtime.compatibility@default:default,org.eclipse.equinox.frameworkadmin.equinox@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.equinox.p2.repository.tools@default:default,org.eclipse.jdt.junit@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.equinox.p2.garbagecollector@default:default,org.eclipse.ui.intro.universal@default:default,org.eclipse.core.databinding@default:default,org.eclipse.emf.mapping.ecore2ecore.editor@default:default,org.eclipse.emf.common.ui@default:default,org.eclipse.ui@default:default,org.eclipse.equinox.p2.director@default:default,org.eclipse.ui.views@default:default,org.eclipse.team.cvs.core@default:default,javax.servlet.jsp@default:default,org.junit4@default:default,org.eclipse.help@default:default,org.eclipse.equinox.jsp.jasper@default:default,org.eclipse.jface@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.team.ui@default:default,org.eclipse.emf.mapping.ecore2ecore@default:default,org.eclipse.ui.views.log@default:default,org.eclipse.help.base@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.jdt.doc.isv@default:default,org.eclipse.pde.doc.user@default:default,org.eclipse.equinox.p2.exemplarysetup@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.ui.externaltools@default:default,org.eclipse.pde.core@default:default,org.apache.commons.logging@default:default,org.eclipse.pde@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.help.ui@default:default,org.eclipse.debug.core@default:default,org.eclipse.emf.converter@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.eclipse.team.cvs.ui@default:default,org.eclipse.emf.importer.ecore@default:default,org.eclipse.ecf.identity@default:default,org.apache.lucene.analysis@default:default,org.eclipse.emf.ecore.edit@default:default,org.eclipse.core.resources.win32.x86@default:false,org.eclipse.ui.console@default:default,org.eclipse.pde.runtime@default:default,org.eclipse.emf.ant@default:default,org.eclipse.team.cvs.ssh2@default:default,org.eclipse.debug.ui@default:default,org.eclipse.equinox.p2.updatesite@default:default,org.eclipse.core.resources@default:default,org.sat4j.core@default:default,org.eclipse.team.core@default:default,org.eclipse.emf.cheatsheets@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.pde.ui@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.ui.workbench.compatibility@default:false,org.eclipse.ui.win32@default:false,org.eclipse.update.configurator@3:true,org.eclipse.emf.importer@default:default,org.eclipse.pde.ui.templates@default:default,org.eclipse.ui.intro@default:default"/> >+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.net4j.util@default:default,org.eclipse.net4j@default:default,org.eclipse.emf.cdo.tests.model3@default:default,org.eclipse.emf.cdo.ui@default:default,org.eclipse.emf.cdo.common@default:default,org.eclipse.net4j.util.ui@default:default,org.eclipse.emf.cdo.examples@default:default,org.eclipse.emf.cdo.tests.model2@default:default,org.eclipse.emf.cdo.ui.ide@default:default,org.eclipse.emf.cdo.tests.model1@default:default,org.eclipse.emf.cdo.tests.mango@default:default,org.eclipse.emf.cdo.team@default:default,org.eclipse.net4j.ui@default:default,org.eclipse.emf.cdo.net4j@default:default,org.eclipse.emf.cdo@default:default,org.eclipse.net4j.tcp@default:default,org.eclipse.emf.cdo.edit@default:default"/> >+<booleanAttribute key="show_selected_only" value="false"/> >+<stringAttribute key="templateConfig" value="${target_home}\configuration\config.ini"/> >+<booleanAttribute key="tracing" value="true"/> >+<mapAttribute key="tracingOptions"> >+<mapEntry key="org.eclipse.core.runtime/debug/context" value="false"/> >+<mapEntry key="org.eclipse.core.jobs/jobs/beginend" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/completion" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/sources" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/indexmanager" value="false"/> >+<mapEntry key="org.eclipse.net4j.buddies.chat/debug" value="true"/> >+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/checkConditions" value="300"/> >+<mapEntry key="org.eclipse.jface.text.source/debug/RevisionRulerColumn" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/contexts" value="false"/> >+<mapEntry key="org.eclipse.debug.ui/debug/viewers/updateSequence" value="false"/> >+<mapEntry key="org.eclipse.osgi/trace/filename" value="runtime.traces"/> >+<mapEntry key="org.eclipse.net4j.pop/perf" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug" value="true"/> >+<mapEntry key="org.eclipse.debug.ui/debug/contextlaunching" value="false"/> >+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug" value="false"/> >+<mapEntry key="org.eclipse.net4j.tcp/debug" value="true"/> >+<mapEntry key="org.eclipse.team.cvs.core/dirtycaching" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.server/debug.repository" value="true"/> >+<mapEntry key="org.eclipse.jdt.core/debug/javamodel" value="false"/> >+<mapEntry key="org.eclipse.ui.intro/trace/printHTML" value="false"/> >+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/createChanges" value="300"/> >+<mapEntry key="org.eclipse.emf.cdo.common/debug.protocol" value="true"/> >+<mapEntry key="org.eclipse.net4j.pop.ui/perf" value="false"/> >+<mapEntry key="org.eclipse.net4j.util/debug.lifecycle.dump" value="true"/> >+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPerspectiveListener" value="false"/> >+<mapEntry key="org.eclipse.net4j.pop/debug" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.util" value="true"/> >+<mapEntry key="org.eclipse.osgi/resolver/debug" value="false"/> >+<mapEntry key="org.eclipse.net4j.db.postgresql/debug" value="true"/> >+<mapEntry key="org.eclipse.team.core/refreshjob" value="false"/> >+<mapEntry key="org.eclipse.ui/debug" value="false"/> >+<mapEntry key="org.eclipse.update.core/debug/installhandler" value="false"/> >+<mapEntry key="org.eclipse.jface.text/debug/AbstractInformationControlManager" value="false"/> >+<mapEntry key="org.eclipse.help.ui/debug/infopop" value="false"/> >+<mapEntry key="org.eclipse.pde.core/classpath" value="false"/> >+<mapEntry key="org.eclipse.team.cvs.core/threading" value="false"/> >+<mapEntry key="org.eclipse.equinox.preferences/general" value="false"/> >+<mapEntry key="org.eclipse.net4j.jms.server/debug.store" value="true"/> >+<mapEntry key="org.eclipse.ui/trace/handlers.performance" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/operations.verbose" value="false"/> >+<mapEntry key="org.eclipse.osgi/trace/activation" value="false"/> >+<mapEntry key="org.eclipse.debug.core/debug/commands" value="false"/> >+<mapEntry key="org.eclipse.ui/perf/workbench.restore" value="30000"/> >+<mapEntry key="org.eclipse.team.core/threading" value="false"/> >+<mapEntry key="org.eclipse.update.core/debug/parsing" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/postaction" value="false"/> >+<mapEntry key="org.eclipse.jdt.apt.core/debug/generatedFileMaps" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/graphics" value="false"/> >+<mapEntry key="org.eclipse.osgi/defaultprofile/logsynchronously" value="false"/> >+<mapEntry key="org.eclipse.net4j.pop.ui/debug" value="true"/> >+<mapEntry key="org.eclipse.net4j.db/debug" value="true"/> >+<mapEntry key="org.eclipse.net4j.buddies.chat.ui/debug" value="true"/> >+<mapEntry key="org.eclipse.ui/debug/workingSets" value="false"/> >+<mapEntry key="org.eclipse.debug.ui/debug/viewers/stateSaveRestore" value="false"/> >+<mapEntry key="org.eclipse.osgi/monitor/activation" value="false"/> >+<mapEntry key="org.eclipse.net4j.jms/debug.protocol" value="true"/> >+<mapEntry key="org.eclipse.help/debug/toc" value="false"/> >+<mapEntry key="org.eclipse.debug.ui/debug" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/buffermanager" value="false"/> >+<mapEntry key="org.eclipse.jface.text/debug/ContentAssistSubjectAdapters" value="false"/> >+<mapEntry key="org.eclipse.pde.build/debug" value="false"/> >+<mapEntry key="org.eclipse.jdt.ui/perf/search/participants" value="300"/> >+<mapEntry key="org.eclipse.ui/perf/perspective.create" value="800"/> >+<mapEntry key="org.eclipse.update.core/debug/type" value="false"/> >+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin" value="false"/> >+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPropertyChangeListener" value="false"/> >+<mapEntry key="org.eclipse.osgi/resolver/generics" value="false"/> >+<mapEntry key="org.eclipse.osgi/resolver/requires" value="false"/> >+<mapEntry key="org.eclipse.core.resources/refresh" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/perf/containerinitializer" value="5000"/> >+<mapEntry key="org.eclipse.osgi/profile/benchmark" value="false"/> >+<mapEntry key="org.eclipse.help.webapp/debug" value="true"/> >+<mapEntry key="org.eclipse.jdt.core/debug/builder/stats" value="false"/> >+<mapEntry key="org.eclipse.jdt.ui/debug/ASTProvider" value="false"/> >+<mapEntry key="org.eclipse.equinox.security.ui/debug/storage" value="false"/> >+<mapEntry key="org.eclipse.osgi/debug" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.server/debug.types" value="true"/> >+<mapEntry key="org.eclipse.ui/trace/handlers" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/contexts.performance" value="false"/> >+<mapEntry key="org.eclipse.net4j.buddies/debug" value="true"/> >+<mapEntry key="org.eclipse.team.cvs.core/metafiles" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/perf/completion" value="300"/> >+<mapEntry key="org.eclipse.osgi/profile/startup" value="false"/> >+<mapEntry key="org.eclipse.core.jobs/jobs" value="false"/> >+<mapEntry key="org.eclipse.core.resources/perf/save.participants" value="500"/> >+<mapEntry key="org.eclipse.emf.cdo.server.hibernate/debug" value="true"/> >+<mapEntry key="org.eclipse.net4j/debug" value="true"/> >+<mapEntry key="org.eclipse.net4j/debug.signal" value="true"/> >+<mapEntry key="org.eclipse.core.jobs/jobs/timing" value="false"/> >+<mapEntry key="org.eclipse.net4j.db.hsqldb/debug.sql" value="true"/> >+<mapEntry key="org.eclipse.jdt.core/perf/reconcile" value="1000"/> >+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPageListener" value="false"/> >+<mapEntry key="org.eclipse.net4j/debug.buffer" value="false"/> >+<mapEntry key="org.eclipse.core.resources/contenttype/cache" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.repository" value="true"/> >+<mapEntry key="org.eclipse.update.core/debug/configuration" value="false"/> >+<mapEntry key="org.eclipse.core.jobs/jobs/locks" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.examples/debug" value="true"/> >+<mapEntry key="org.eclipse.ui/trace/handlers.verbose.commandId" value=""/> >+<mapEntry key="org.eclipse.core.runtime/url/debug/connect" value="false"/> >+<mapEntry key="org.eclipse.ui.ide/debug" value="false"/> >+<mapEntry key="org.eclipse.osgi/profile/debug" value="false"/> >+<mapEntry key="org.eclipse.pde.core/debug" value="true"/> >+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPartReference" value="false"/> >+<mapEntry key="org.eclipse.ui/debug/job.stale" value="false"/> >+<mapEntry key="org.eclipse.net4j.pop.repository/perf" value="false"/> >+<mapEntry key="org.eclipse.net4j.util/debug.registry" value="true"/> >+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/createPartControl" value="1300"/> >+<mapEntry key="org.eclipse.jdt.core/debug/hierarchy" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/perf/variableinitializer" value="5000"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.object" value="true"/> >+<mapEntry key="org.eclipse.ui.ide/debug/internalerror/openDialog" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.server/debug.revision" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.server/debug.transaction" value="true"/> >+<mapEntry key="org.eclipse.core.resources/strings" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/sourcemapper" value="false"/> >+<mapEntry key="org.eclipse.core.resources/save/mastertable" value="false"/> >+<mapEntry key="org.eclipse.core.expressions/tracePropertyResolving" value="false"/> >+<mapEntry key="org.eclipse.core.resources/preferences" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/javadelta" value="false"/> >+<mapEntry key="org.eclipse.ui/perf/showHeapStatus" value="true"/> >+<mapEntry key="org.eclipse.jdt.core/debug/selection" value="false"/> >+<mapEntry key="org.eclipse.jdt.apt.core/debug" value="false"/> >+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist_sorters/extensions" value=""/> >+<mapEntry key="org.eclipse.emf.cdo.server.hibernate.id/debug" value="true"/> >+<mapEntry key="org.eclipse.jdt.core/debug/javamodel/cache" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo/perf.revision" value="true"/> >+<mapEntry key="org.eclipse.osgi/defaultprofile/logfilename" value=""/> >+<mapEntry key="org.eclipse.net4j/set.signal.thread.name" value="false"/> >+<mapEntry key="org.eclipse.team.core/backgroundevents" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/keyBindings" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.server/debug.session" value="true"/> >+<mapEntry key="org.eclipse.ui/perf/part.activate" value="200"/> >+<mapEntry key="org.eclipse.update.core/debug" value="true"/> >+<mapEntry key="org.eclipse.osgi/debug/security" value="false"/> >+<mapEntry key="org.eclipse.core.resources/restore/metainfo" value="false"/> >+<mapEntry key="org.eclipse.core.resources/build/needbuild" value="false"/> >+<mapEntry key="org.eclipse.ui/debug/swtdebugglobal" value="false"/> >+<mapEntry key="org.eclipse.core.resources/perf/builders" value="10000"/> >+<mapEntry key="org.eclipse.ui/perf/perspective.listeners" value="200"/> >+<mapEntry key="org.eclipse.net4j.db.hsqldb/debug" value="true"/> >+<mapEntry key="org.eclipse.net4j.jms.admin/debug.protocol" value="true"/> >+<mapEntry key="org.eclipse.ui/debug/showAllJobs" value="false"/> >+<mapEntry key="org.eclipse.core.resources/history" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.server/debug.store" value="true"/> >+<mapEntry key="org.eclipse.net4j.http.server/debug" value="true"/> >+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/search" value="false"/> >+<mapEntry key="org.eclipse.team.cvs.core/cvsprotocol" value="true"/> >+<mapEntry key="org.eclipse.pde.core/validation" value="false"/> >+<mapEntry key="org.eclipse.jface.text/debug/AnnotationPainter" value="false"/> >+<mapEntry key="org.eclipse.core.resources/restore/mastertable" value="false"/> >+<mapEntry key="org.eclipse.core.runtime/debug" value="false"/> >+<mapEntry key="org.eclipse.equinox.preferences/set" value="false"/> >+<mapEntry key="org.eclipse.core.resources/restore/snapshots" value="false"/> >+<mapEntry key="org.eclipse.ui/perf/perspective.switch" value="800"/> >+<mapEntry key="org.eclipse.help.webapp/debug/workingsets" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.protocol" value="true"/> >+<mapEntry key="org.eclipse.osgi/debug/bundleTime" value="false"/> >+<mapEntry key="org.eclipse.equinox.security.ui/debug" value="false"/> >+<mapEntry key="org.eclipse.osgi/resolver/uses" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.common/perf.revision" value="true"/> >+<mapEntry key="org.eclipse.core.resources/restore/markers" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.common/debug.model" value="true"/> >+<mapEntry key="org.eclipse.ui/perf/workbench.start" value="45000"/> >+<mapEntry key="org.eclipse.core.runtime/url/debug/cachecopy" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.common/perf.revision.reading" value="true"/> >+<mapEntry key="org.eclipse.core.runtime/perf/success" value="false"/> >+<mapEntry key="org.eclipse.net4j/debug.connector" value="true"/> >+<mapEntry key="org.eclipse.jdt.core/perf/selection" value="300"/> >+<mapEntry key="org.eclipse.osgi/debug/startlevel" value="false"/> >+<mapEntry key="org.eclipse.equinox.security/debug/loginFramework" value="false"/> >+<mapEntry key="org.eclipse.core.resources/restore" value="false"/> >+<mapEntry key="org.eclipse.osgi/resolver/wiring" value="false"/> >+<mapEntry key="org.eclipse.core.resources/perf/snapshot" value="1000"/> >+<mapEntry key="org.eclipse.net4j.buddies.server/debug" value="true"/> >+<mapEntry key="org.eclipse.ui.intro/trace/logPerformance" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/contexts.verbose" value="false"/> >+<mapEntry key="org.eclipse.osgi/debug/loader" value="false"/> >+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/makeActions" value="1000"/> >+<mapEntry key="org.eclipse.net4j/debug.acceptor" value="true"/> >+<mapEntry key="org.eclipse.net4j.buddies.ui/debug" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo/perf" value="true"/> >+<mapEntry key="org.eclipse.core.resources/save/markers" value="false"/> >+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver" value="false"/> >+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener2" value="false"/> >+<mapEntry key="org.eclipse.net4j.jvm/debug" value="true"/> >+<mapEntry key="org.eclipse.ui/trace/operations" value="false"/> >+<mapEntry key="org.eclipse.ui.ide/debug/markers" value="false"/> >+<mapEntry key="org.eclipse.update.core/debug/install" value="false"/> >+<mapEntry key="org.eclipse.equinox.registry/debug/events" value="false"/> >+<mapEntry key="org.eclipse.net4j.pop.editor/debug" value="true"/> >+<mapEntry key="org.eclipse.core.resources/save/metainfo" value="false"/> >+<mapEntry key="org.eclipse.net4j.util/debug.lifecycle" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo.examples.spring/debug" value="true"/> >+<mapEntry key="org.eclipse.ui/perf/contentTypes" value="200"/> >+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser/inprocess" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/perf/javadeltalistener" value="500"/> >+<mapEntry key="org.eclipse.core.resources/perf/listeners" value="500"/> >+<mapEntry key="org.eclipse.ui.intro/flags/noBrowser" value="false"/> >+<mapEntry key="org.eclipse.ui/perf/part.init" value="800"/> >+<mapEntry key="org.eclipse.equinox.security/debug" value="false"/> >+<mapEntry key="org.eclipse.core.contenttype/debug" value="false"/> >+<mapEntry key="org.eclipse.osgi/resolver/imports" value="false"/> >+<mapEntry key="org.eclipse.core.resources/restore/tree" value="false"/> >+<mapEntry key="org.eclipse.net4j.db.postgresql/debug.sql" value="true"/> >+<mapEntry key="org.eclipse.ui.intro.universal/trace/logPerformance" value="false"/> >+<mapEntry key="org.eclipse.help/debug/context" value="false"/> >+<mapEntry key="org.eclipse.net4j.template.ui/debug" value="true"/> >+<mapEntry key="org.eclipse.osgi/debug/manifest" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/multipageeditor" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo/debug" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo.ui/debug" value="true"/> >+<mapEntry key="org.eclipse.net4j.examples/debug" value="true"/> >+<mapEntry key="org.eclipse.jdt.apt.core/debug/generatedFiles" value="false"/> >+<mapEntry key="org.eclipse.core.resources/build/needbuildstack" value="false"/> >+<mapEntry key="org.eclipse.ui/debug/swtdebug" value="false"/> >+<mapEntry key="org.eclipse.core.resources/save/syncinfo" value="false"/> >+<mapEntry key="org.eclipse.team.cvs.ssh/debug" value="false"/> >+<mapEntry key="org.eclipse.core.resources/build/failure" value="false"/> >+<mapEntry key="org.eclipse.team.core/debug" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/builder" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.common/debug.revision" value="true"/> >+<mapEntry key="org.eclipse.net4j.pop.repository/debug" value="true"/> >+<mapEntry key="org.eclipse.osgi/trace/classLoading" value="false"/> >+<mapEntry key="org.eclipse.net4j.jms.server.jdbc/debug" value="true"/> >+<mapEntry key="org.eclipse.net4j/open.channel.timeout" value="10000"/> >+<mapEntry key="org.eclipse.core.jobs/jobs/errorondeadlock" value="false"/> >+<mapEntry key="org.eclipse.core.resources/save" value="false"/> >+<mapEntry key="org.eclipse.core.resources/contenttype" value="false"/> >+<mapEntry key="org.eclipse.jface.text/debug/FastPartitioner/PositionCache" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/compiler" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.server/debug" value="true"/> >+<mapEntry key="org.eclipse.osgi/debug/events" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/commands" value="false"/> >+<mapEntry key="org.eclipse.equinox.preferences/get" value="false"/> >+<mapEntry key="org.eclipse.jdt.ui/debug/ResultCollector" value="false"/> >+<mapEntry key="org.eclipse.debug.ui/debug/launchhistory" value="false"/> >+<mapEntry key="org.eclipse.net4j.util/debug.om" value="true"/> >+<mapEntry key="org.eclipse.net4j.jms.server/debug" value="true"/> >+<mapEntry key="org.eclipse.net4j.db.mysql/debug" value="true"/> >+<mapEntry key="org.eclipse.debug.ui/debug/viewers/model" value="false"/> >+<mapEntry key="org.eclipse.net4j.util/debug" value="true"/> >+<mapEntry key="org.eclipse.equinox.registry/debug" value="false"/> >+<mapEntry key="org.eclipse.ui.intro/debug" value="true"/> >+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution/advanced" value="false"/> >+<mapEntry key="org.eclipse.net4j.jms/debug" value="true"/> >+<mapEntry key="org.eclipse.osgi/eclipseadaptor/converter/debug" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.server/debug.resource" value="true"/> >+<mapEntry key="org.eclipse.net4j.debug/debug" value="true"/> >+<mapEntry key="org.eclipse.net4j.db.derby/debug.sql" value="true"/> >+<mapEntry key="org.eclipse.pde.core/cache" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.ui/test" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.transaction" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo.server.db/debug" value="true"/> >+<mapEntry key="org.eclipse.debug.core/debug/events" value="false"/> >+<mapEntry key="org.eclipse.net4j/debug.selector" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo.common/perf" value="true"/> >+<mapEntry key="org.eclipse.jdt.ui/debug" value="true"/> >+<mapEntry key="org.eclipse.net4j.db/debug.sql" value="true"/> >+<mapEntry key="org.eclipse.osgi/monitor/classes" value="false"/> >+<mapEntry key="org.eclipse.ui/perf/part.input" value="200"/> >+<mapEntry key="org.eclipse.ui.intro.universal/debug" value="true"/> >+<mapEntry key="org.eclipse.jdt.ui/debug/TypeConstraints" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.common/debug.id" value="true"/> >+<mapEntry key="org.eclipse.osgi/debug/messageBundles" value="false"/> >+<mapEntry key="org.eclipse.core.resources/build/invoking" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/javadelta/verbose" value="false"/> >+<mapEntry key="org.eclipse.net4j.util/debug.concurrency" value="true"/> >+<mapEntry key="org.eclipse.core.resources/save/tree" value="false"/> >+<mapEntry key="org.eclipse.ui/debug/contributions" value="false"/> >+<mapEntry key="org.eclipse.update.core/debug/warning" value="false"/> >+<mapEntry key="org.eclipse.core.resources/natures" value="false"/> >+<mapEntry key="org.eclipse.jdt.core.manipulation/debug" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo.common/perf.revision.writing" value="true"/> >+<mapEntry key="org.eclipse.net4j.jms.admin/debug" value="true"/> >+<mapEntry key="org.eclipse.net4j.db.derby/debug" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.model" value="true"/> >+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution" value="false"/> >+<mapEntry key="org.eclipse.help/debug/search" value="false"/> >+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser" value="false"/> >+<mapEntry key="org.eclipse.team.cvs.ssh/ssh_protocol" value="false"/> >+<mapEntry key="org.eclipse.core.resources/build/stacktrace" value="false"/> >+<mapEntry key="org.eclipse.ui/perf/part.create" value="800"/> >+<mapEntry key="org.eclipse.ui.intro/trace/logInfo" value="true"/> >+<mapEntry key="org.eclipse.team.core/streams" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.ui/test.bulk_add" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo.common/debug" value="true"/> >+<mapEntry key="org.eclipse.ui.ide/debug/undomonitor" value="false"/> >+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/RefactorActionGroup" value="150"/> >+<mapEntry key="org.eclipse.net4j.ui/debug" value="true"/> >+<mapEntry key="org.eclipse.ui/experimental/menus" value="false"/> >+<mapEntry key="org.eclipse.core.jobs/jobs/shutdown" value="false"/> >+<mapEntry key="org.eclipse.osgi/debug/packageadmin" value="false"/> >+<mapEntry key="org.eclipse.jdt.apt.core/debug/compilationEnv" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.session" value="true"/> >+<mapEntry key="org.eclipse.core.runtime/compatibility/debug" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.adapter" value="true"/> >+<mapEntry key="org.eclipse.ui/debug/declaredImages" value="false"/> >+<mapEntry key="org.eclipse.update.core/debug/reconciler" value="false"/> >+<mapEntry key="org.eclipse.ui.ide/debug/gc" value="false"/> >+<mapEntry key="org.eclipse.debug.ui/debug/viewers/contentProvider" value="false"/> >+<mapEntry key="org.eclipse.osgi/debug/services" value="false"/> >+<mapEntry key="org.eclipse.net4j.db.mysql/debug.sql" value="true"/> >+<mapEntry key="org.eclipse.net4j.util.ui/debug" value="true"/> >+<mapEntry key="org.eclipse.ui.workbench/debug" value="false"/> >+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist/extensions" value="1000"/> >+<mapEntry key="org.eclipse.osgi/debug/filter" value="false"/> >+<mapEntry key="org.eclipse.debug.core/debug" value="false"/> >+<mapEntry key="org.eclipse.net4j.buddies.common/debug" value="true"/> >+<mapEntry key="org.eclipse.core.resources/debug" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/zipaccess" value="false"/> >+<mapEntry key="org.eclipse.ui.browser/debug" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo.server/debug.protocol" value="true"/> >+<mapEntry key="org.eclipse.osgi/profile/impl" value="org.eclipse.osgi.internal.profile.DefaultProfileLogger"/> >+<mapEntry key="org.eclipse.net4j.jms.server/debug.protocol" value="true"/> >+<mapEntry key="org.eclipse.update.core/debug/web" value="false"/> >+<mapEntry key="org.eclipse.net4j.pop.repository.ccvs/perf" value="false"/> >+<mapEntry key="org.eclipse.team.cvs.core/debug" value="false"/> >+<mapEntry key="org.eclipse.help/debug" value="true"/> >+<mapEntry key="org.eclipse.core.runtime/perf" value="false"/> >+<mapEntry key="org.eclipse.osgi/trace/filters" value="trace.properties"/> >+<mapEntry key="org.eclipse.net4j/debug.channel" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo/perf.revision.loading" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.revision" value="true"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.view" value="true"/> >+<mapEntry key="org.eclipse.jdt.core/debug/formatter" value="false"/> >+<mapEntry key="org.eclipse.ui/perf/part.listeners" value="200"/> >+<mapEntry key="org.eclipse.debug.ui/debug/viewers/viewer" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/keyBindings.verbose" value="false"/> >+<mapEntry key="org.eclipse.osgi/defaultprofile/buffersize" value="256"/> >+<mapEntry key="org.eclipse.core.resources/restore/syncinfo" value="false"/> >+<mapEntry key="org.eclipse.team.cvs.core/syncchangeevents" value="false"/> >+<mapEntry key="org.eclipse.ui/perf/page.listeners" value="200"/> >+<mapEntry key="org.eclipse.net4j.http.common/debug" value="true"/> >+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution/failure" value="false"/> >+<mapEntry key="org.eclipse.emf.cdo/debug.resource" value="true"/> >+<mapEntry key="org.eclipse.net4j.http/debug" value="true"/> >+<mapEntry key="org.eclipse.jdt.apt.pluggable.core/debug" value="false"/> >+<mapEntry key="org.eclipse.ui/trace/handlers.verbose" value="false"/> >+<mapEntry key="org.eclipse.net4j.template/debug" value="true"/> >+<mapEntry key="org.eclipse.osgi/monitor/resources" value="false"/> >+<mapEntry key="org.eclipse.ui/perf/part.control" value="800"/> >+<mapEntry key="org.eclipse.net4j/debug.buffer.stream" value="false"/> >+<mapEntry key="org.eclipse.net4j.pop.repository.ccvs/debug" value="true"/> >+<mapEntry key="org.eclipse.ui/perf/uijob" value="200"/> >+<mapEntry key="org.eclipse.core.runtime/url/debug/cachelookup" value="false"/> >+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener2" value="false"/> >+<mapEntry key="org.eclipse.core.resources/build/delta" value="false"/> >+<mapEntry key="org.eclipse.core.resources/build/interrupt" value="false"/> >+<mapEntry key="org.eclipse.core.runtime/preferences/plugin" value="false"/> >+<mapEntry key="org.eclipse.core.runtime/url/debug" value="false"/> >+<mapEntry key="org.eclipse.osgi/resolver/cycles" value="false"/> >+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener" value="false"/> >+<mapEntry key="org.eclipse.jdt.core/debug/resolution" value="false"/> >+<mapEntry key="org.eclipse.update.configurator/debug" value="false"/> >+<mapEntry key="org.eclipse.help.ui/debug" value="true"/> >+<mapEntry key="org.eclipse.debug.ui/debug/viewers/deltas" value="false"/> >+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/location" value="false"/> >+<mapEntry key="org.eclipse.ui.intro.universal/trace/logInfo" value="true"/> >+</mapAttribute> >+<booleanAttribute key="useDefaultConfig" value="true"/> >+<booleanAttribute key="useDefaultConfigArea" value="true"/> >+<booleanAttribute key="useNamedJRE" value="true"/> >+<booleanAttribute key="useProduct" value="true"/> >+<booleanAttribute key="usefeatures" value="false"/> >+</launchConfiguration> >#P org.eclipse.emf.cdo >Index: src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java,v >retrieving revision 1.51 >diff -u -r1.51 CDOSessionImpl.java >--- src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java 10 Nov 2009 08:25:25 -0000 1.51 >+++ src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java 16 Nov 2009 17:37:35 -0000 >@@ -95,1512 +95,1274 @@ > /** > * @author Eike Stepper > */ >-public abstract class CDOSessionImpl extends Container<CDOView> implements InternalCDOSession >-{ >- private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_SESSION, CDOSessionImpl.class); >- >- private static final long NO_TIMEOUT = -1; >- >- private InternalCDOSessionConfiguration configuration; >- >- private ExceptionHandler exceptionHandler; >- >- private CDOSessionProtocol sessionProtocol; >- >- @ExcludeFromDump >- private IListener sessionProtocolListener = new LifecycleEventAdapter() >- { >- @Override >- protected void onDeactivated(ILifecycle lifecycle) >- { >- CDOSessionImpl.this.deactivate(); >- } >- }; >- >- private int sessionID; >- >- private String userID; >- >- private long lastUpdateTime; >- >- @ExcludeFromDump >- private Object lastUpdateTimeLock = new Object(); >- >- private CDOSession.Options options = createOptions(); >- >- private CDORepositoryInfo repositoryInfo; >- >- private CDOFetchRuleManager ruleManager = CDOFetchRuleManager.NOOP; >- >- private IRWLockManager<CDOSessionImpl, Object> lockmanager = new RWLockManager<CDOSessionImpl, Object>(); >- >- @ExcludeFromDump >- private Set<CDOSessionImpl> singletonCollection = Collections.singleton(this); >- >- private CDOAuthenticator authenticator; >- >- private InternalCDORemoteSessionManager remoteSessionManager; >- >- private Set<InternalCDOView> views = new HashSet<InternalCDOView>(); >- >- /** >- * Fixes a threading problem between a committing thread and the Net4j thread that delivers incoming commit >- * notifications. TODO This is a workaround, see Bug 294700 >- */ >- private Object commitLock = new Object(); >- >- @ExcludeFromDump >- private QueueRunner invalidationRunner; >- >- @ExcludeFromDump >- private Object invalidationRunnerLock = new Object(); >- >- @ExcludeFromDump >- private static ThreadLocal<Boolean> invalidationRunnerActive = new InheritableThreadLocal<Boolean>(); >- >- @ExcludeFromDump >- private int lastViewID; >- >- public CDOSessionImpl(InternalCDOSessionConfiguration configuration) >- { >- this.configuration = configuration; >- } >- >- public InternalCDOSessionConfiguration getConfiguration() >- { >- return configuration; >- } >- >- public CDORepositoryInfo getRepositoryInfo() >- { >- return repositoryInfo; >- } >- >- public void setRepositoryInfo(CDORepositoryInfo repositoryInfo) >- { >- this.repositoryInfo = repositoryInfo; >- } >- >- public int getSessionID() >- { >- return sessionID; >- } >- >- public void setSessionID(int sessionID) >- { >- this.sessionID = sessionID; >- } >- >- public String getUserID() >- { >- return userID; >- } >- >- public void setUserID(String userID) >- { >- this.userID = userID; >- } >- >- public ExceptionHandler getExceptionHandler() >- { >- return exceptionHandler; >- } >- >- public void setExceptionHandler(ExceptionHandler exceptionHandler) >- { >- checkInactive(); >- this.exceptionHandler = exceptionHandler; >- } >- >- /** >- * @since 2.0 >- */ >- public CDOSession.Options options() >- { >- return options; >- } >- >- /** >- * @since 2.0 >- */ >- protected CDOSession.Options createOptions() >- { >- return new OptionsImpl(); >- } >- >- public CDOSessionProtocol getSessionProtocol() >- { >- return sessionProtocol; >- } >- >- public void setSessionProtocol(CDOSessionProtocol sessionProtocol) >- { >- this.sessionProtocol = sessionProtocol; >- } >- >- public void close() >- { >- LifecycleUtil.deactivate(this, OMLogger.Level.DEBUG); >- } >- >- /** >- * @since 2.0 >- */ >- public boolean isClosed() >- { >- return !isActive(); >- } >- >- public Object processPackage(Object value) >- { >- CDOFactoryImpl.prepareDynamicEPackage(value); >- return value; >- } >- >- public EPackage[] loadPackages(CDOPackageUnit packageUnit) >- { >- if (packageUnit.getOriginalType().isGenerated()) >- { >- if (!options().isGeneratedPackageEmulationEnabled()) >- { >- throw new CDOException(MessageFormat.format(Messages.getString("CDOSessionImpl.0"), packageUnit)); >- } >- } >- >- return getSessionProtocol().loadPackages(packageUnit); >- } >- >- public void acquireAtomicRequestLock(Object key) >- { >- try >- { >- lockmanager.lock(LockType.WRITE, key, this, RWLockManager.WAIT); >- } >- catch (InterruptedException ex) >- { >- throw WrappedException.wrap(ex); >- } >- } >- >- public void releaseAtomicRequestLock(Object key) >- { >- lockmanager.unlock(LockType.WRITE, key, singletonCollection); >- } >- >- /** >- * @since 3.0 >- */ >- public CDOFetchRuleManager getFetchRuleManager() >- { >- return ruleManager; >- } >- >- /** >- * @since 3.0 >- */ >- public void setFetchRuleManager(CDOFetchRuleManager fetchRuleManager) >- { >- ruleManager = fetchRuleManager; >- } >- >- public CDOAuthenticator getAuthenticator() >- { >- return authenticator; >- } >- >- public void setAuthenticator(CDOAuthenticator authenticator) >- { >- this.authenticator = authenticator; >- } >- >- public InternalCDORemoteSessionManager getRemoteSessionManager() >- { >- return remoteSessionManager; >- } >- >- public void setRemoteSessionManager(InternalCDORemoteSessionManager remoteSessionManager) >- { >- this.remoteSessionManager = remoteSessionManager; >- } >- >- /** >- * @since 2.0 >- */ >- public InternalCDOTransaction openTransaction(ResourceSet resourceSet) >- { >- checkActive(); >- InternalCDOTransaction transaction = createTransaction(); >- initView(transaction, resourceSet); >- return transaction; >- } >- >- /** >- * @since 2.0 >- */ >- public InternalCDOTransaction openTransaction() >- { >- return openTransaction(createResourceSet()); >- } >- >- /** >- * @since 2.0 >- */ >- protected InternalCDOTransaction createTransaction() >- { >- return new CDOTransactionImpl(); >- } >- >- /** >- * @since 2.0 >- */ >- public InternalCDOView openView(ResourceSet resourceSet) >- { >- checkActive(); >- InternalCDOView view = createView(); >- initView(view, resourceSet); >- return view; >- } >- >- /** >- * @since 2.0 >- */ >- public InternalCDOView openView() >- { >- return openView(createResourceSet()); >- } >- >- /** >- * @since 2.0 >- */ >- protected InternalCDOView createView() >- { >- return new CDOViewImpl(); >- } >- >- public CDOAuditImpl openAudit(ResourceSet resourceSet, long timeStamp) >- { >- checkActive(); >- CDOAuditImpl audit = createAudit(timeStamp); >- initView(audit, resourceSet); >- return audit; >- } >- >- public CDOAuditImpl openAudit(long timeStamp) >- { >- return openAudit(createResourceSet(), timeStamp); >- } >- >- /** >- * @since 2.0 >- */ >- protected CDOAuditImpl createAudit(long timeStamp) >- { >- return new CDOAuditImpl(timeStamp); >- } >- >- /** >- * @since 2.0 >- */ >- public void viewDetached(InternalCDOView view) >- { >- // Detach viewset from the view >- view.getViewSet().remove(view); >- synchronized (views) >- { >- if (!views.remove(view)) >- { >- return; >- } >- } >- >- if (isActive()) >- { >- try >- { >- LifecycleUtil.deactivate(view); >- } >- catch (Exception ex) >- { >- throw WrappedException.wrap(ex); >- } >- } >- >- fireElementRemovedEvent(view); >- } >- >- public CDOView getView(int viewID) >- { >- checkActive(); >- for (InternalCDOView view : getViews()) >- { >- if (view.getViewID() == viewID) >- { >- return view; >- } >- } >- >- return null; >- } >- >- /** >- * @since 2.0 >- */ >- public InternalCDOView[] getViews() >- { >- checkActive(); >- synchronized (views) >- { >- return views.toArray(new InternalCDOView[views.size()]); >- } >- } >- >- public CDOView[] getElements() >- { >- return getViews(); >- } >- >- @Override >- public boolean isEmpty() >- { >- checkActive(); >- return views.isEmpty(); >- } >- >- /** >- * @since 2.0 >- */ >- public Collection<CDOTimeStampContext> refresh() >- { >- // If passive update is turned on we don`t need to refresh. >- // We do not throw an exception since the client could turn >- // that feature on or off without affecting their code. >- checkActive(); >- if (!options().isPassiveUpdateEnabled()) >- { >- Map<CDOID, CDOIDAndVersion> allRevisions = getAllCDOIDAndVersion(); >- >- try >- { >- if (!allRevisions.isEmpty()) >- { >- int initialChunkSize = options().getCollectionLoadingPolicy().getInitialChunkSize(); >- return getSessionProtocol().syncRevisions(allRevisions, initialChunkSize); >- } >- } >- catch (Exception ex) >- { >- throw WrappedException.wrap(ex); >- } >- } >- >- return Collections.emptyList(); >- } >- >- public long getLastUpdateTime() >- { >- synchronized (lastUpdateTimeLock) >- { >- return lastUpdateTime; >- } >- } >- >- public void setLastUpdateTime(long lastUpdateTime) >- { >- synchronized (lastUpdateTimeLock) >- { >- this.lastUpdateTime = lastUpdateTime; >- lastUpdateTimeLock.notifyAll(); >- } >- } >- >- public void waitForUpdate(long updateTime) >- { >- waitForUpdate(updateTime, NO_TIMEOUT); >- } >- >- public boolean waitForUpdate(long updateTime, long timeoutMillis) >- { >- long end = timeoutMillis == NO_TIMEOUT ? Long.MAX_VALUE : System.currentTimeMillis() + timeoutMillis; >- for (;;) >- { >- synchronized (lastUpdateTimeLock) >- { >- if (lastUpdateTime >= updateTime) >- { >- return true; >- } >- >- long now = System.currentTimeMillis(); >- if (now >= end) >- { >- return false; >- } >- >- try >- { >- lastUpdateTimeLock.wait(end - now); >- } >- catch (InterruptedException ex) >- { >- throw WrappedException.wrap(ex); >- } >- } >- } >- } >- >- /** >- * @since 3.0 >- */ >- public Object resolveElementProxy(CDORevision revision, EStructuralFeature feature, int accessIndex, int serverIndex) >- { >- CDOCollectionLoadingPolicy policy = options().getCollectionLoadingPolicy(); >- return policy.resolveProxy(this, revision, feature, accessIndex, serverIndex); >- } >- >- /** >- * @since 2.0 >- */ >- public void handleSyncResponse(long timestamp, Collection<CDOPackageUnit> newPackageUnits, >- Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects) >- { >- handleCommitNotification(timestamp, newPackageUnits, dirtyOIDs, detachedObjects, null, null, true, false); >- } >- >- /** >- * @since 2.0 >- */ >- public void handleCommitNotification(final long timeStamp, final Collection<CDOPackageUnit> newPackageUnits, >- Set<CDOIDAndVersion> dirtyOIDs, final Collection<CDOID> detachedObjects, >- final Collection<CDORevisionDelta> deltas, InternalCDOView excludedView) >- { >- handleCommitNotification(timeStamp, newPackageUnits, dirtyOIDs, detachedObjects, deltas, excludedView, options() >- .isPassiveUpdateEnabled(), true); >- } >- >- private void handleCommitNotification(final long timeStamp, final Collection<CDOPackageUnit> newPackageUnits, >- Set<CDOIDAndVersion> dirtyOIDs, final Collection<CDOID> detachedObjects, >- final Collection<CDORevisionDelta> deltas, InternalCDOView excludedView, final boolean passiveUpdate, >- final boolean async) >- { >- try >- { >- synchronized (commitLock) >- { >- if (passiveUpdate) >- { >- reviseRevisions(timeStamp, dirtyOIDs, detachedObjects, excludedView); >- } >- >- final Set<CDOIDAndVersion> finalDirtyOIDs = Collections.unmodifiableSet(dirtyOIDs); >- final Collection<CDOID> finalDetachedObjects = Collections.unmodifiableCollection(detachedObjects); >- final boolean skipChangeSubscription = (deltas == null || deltas.size() <= 0) >- && (detachedObjects == null || detachedObjects.size() <= 0); >- >- for (final InternalCDOView view : getViews()) >- { >- if (view != excludedView) >- { >- final Runnable runnable = new Runnable() >- { >- public void run() >- { >- try >- { >- Set<CDOObject> conflicts = null; >- if (passiveUpdate) >- { >- conflicts = view.handleInvalidation(timeStamp, finalDirtyOIDs, finalDetachedObjects); >- } >- >- if (!skipChangeSubscription) >- { >- view.handleChangeSubscription(deltas, detachedObjects); >- } >- >- if (conflicts != null) >- { >- ((InternalCDOTransaction)view).handleConflicts(conflicts); >- } >- >- view.fireAdaptersNotifiedEvent(timeStamp); >- } >- catch (RuntimeException ex) >- { >- if (!async) >- { >- throw ex; >- } >- >- if (view.isActive()) >- { >- OM.LOG.error(ex); >- } >- else >- { >- OM.LOG.info(Messages.getString("CDOSessionImpl.1")); >- } >- } >- } >- }; >- >- if (async) >- { >- QueueRunner runner = getInvalidationRunner(); >- runner.addWork(new Runnable() >- { >- public void run() >- { >- try >- { >- invalidationRunnerActive.set(true); >- runnable.run(); >- } >- finally >- { >- invalidationRunnerActive.set(false); >- } >- } >- }); >- } >- else >- { >- runnable.run(); >- } >- } >- } >- } >- } >- catch (RuntimeException ex) >- { >- if (!async) >- { >- throw ex; >- } >- >- if (isActive()) >- { >- OM.LOG.error(ex); >- } >- else >- { >- OM.LOG.info(Messages.getString("CDOSessionImpl.2")); >- } >- } >- >- setLastUpdateTime(timeStamp); >- fireInvalidationEvent(timeStamp, newPackageUnits, dirtyOIDs, detachedObjects, excludedView); >- } >- >- public void reviseRevisions(final long timeStamp, Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects, >- InternalCDOView excludedView) >- { >- InternalCDORevisionManager revisionManager = getRevisionManager(); >- if (excludedView == null || timeStamp == CDORevision.UNSPECIFIED_DATE) >- { >- for (CDOIDAndVersion dirtyOID : dirtyOIDs) >- { >- CDOID id = dirtyOID.getID(); >- int version = dirtyOID.getVersion(); >- revisionManager.reviseVersion(id, version, timeStamp); >- } >- } >- >- for (CDOID id : detachedObjects) >- { >- revisionManager.reviseLatest(id); >- } >- } >- >- public Object getCommitLock() >- { >- return commitLock; >- } >- >- private QueueRunner getInvalidationRunner() >- { >- synchronized (invalidationRunnerLock) >- { >- if (invalidationRunner == null) >- { >- invalidationRunner = createInvalidationRunner(); >- invalidationRunner.activate(); >- } >- } >- >- return invalidationRunner; >- } >- >- protected QueueRunner createInvalidationRunner() >- { >- return new QueueRunner() >- { >- @Override >- protected String getThreadName() >- { >- return "InvalidationRunner"; >- } >- >- @Override >- public String toString() >- { >- return getThreadName(); >- } >- }; >- } >- >- /** >- * @param packageUnits >- * @since 2.0 >- */ >- public void fireInvalidationEvent(long timeStamp, Collection<CDOPackageUnit> packageUnits, >- Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects, InternalCDOView excludedView) >- { >- fireEvent(new InvalidationEvent(excludedView, timeStamp, packageUnits, dirtyOIDs, detachedObjects)); >- } >- >- @Override >- public String toString() >- { >- String name = repositoryInfo == null ? "?" : repositoryInfo.getName(); >- return MessageFormat.format("CDOSession[{0}, {1}]", name, sessionID); >- } >- >- protected ResourceSet createResourceSet() >- { >- return new ResourceSetImpl(); >- } >- >- /** >- * @since 2.0 >- */ >- protected void initView(InternalCDOView view, ResourceSet resourceSet) >- { >- if (TRACER.isEnabled()) >- { >- TRACER.format("Initializing new {0} view", view.getViewType()); >- } >- >- InternalCDOViewSet viewSet = SessionUtil.prepareResourceSet(resourceSet); >- synchronized (views) >- { >- view.setSession(this); >- view.setViewID(++lastViewID); >- views.add(view); >- } >- >- // Link ViewSet with View >- view.setViewSet(viewSet); >- viewSet.add(view); >- >- try >- { >- view.activate(); >- fireElementAddedEvent(view); >- } >- catch (RuntimeException ex) >- { >- synchronized (views) >- { >- views.remove(view); >- } >- >- viewSet.remove(view); >- throw ex; >- } >- } >- >- @Override >- protected void doActivate() throws Exception >- { >- super.doActivate(); >- getConfiguration().activateSession(this); >- checkState(sessionProtocol, "sessionProtocol"); >- checkState(remoteSessionManager, "remoteSessionManager"); >- if (exceptionHandler != null) >- { >- sessionProtocol = new DelegatingSessionProtocol(sessionProtocol); >- } >- >- EventUtil.addListener(sessionProtocol, sessionProtocolListener); >- } >- >- @Override >- protected void doDeactivate() throws Exception >- { >- for (InternalCDOView view : views.toArray(new InternalCDOView[views.size()])) >- { >- try >- { >- view.close(); >- } >- catch (RuntimeException ignore) >- { >- } >- } >- >- views.clear(); >- >- if (invalidationRunner != null) >- { >- LifecycleUtil.deactivate(invalidationRunner, OMLogger.Level.WARN); >- invalidationRunner = null; >- } >- >- EventUtil.removeListener(sessionProtocol, sessionProtocolListener); >- getConfiguration().deactivateSession(this); >- super.doDeactivate(); >- } >- >- private Map<CDOID, CDOIDAndVersion> getAllCDOIDAndVersion() >- { >- Map<CDOID, CDOIDAndVersion> uniqueObjects = new HashMap<CDOID, CDOIDAndVersion>(); >- for (InternalCDOView view : getViews()) >- { >- view.getCDOIDAndVersion(uniqueObjects, Arrays.asList(view.getObjectsArray())); >- } >- >- // Need to add Revision from revisionManager since we do not have all objects in view. >- for (CDORevision revision : getRevisionManager().getCache().getRevisions()) >- { >- if (!uniqueObjects.containsKey(revision.getID())) >- { >- uniqueObjects.put(revision.getID(), CDOIDUtil.createIDAndVersion(revision.getID(), revision.getVersion())); >- } >- } >- >- return uniqueObjects; >- } >- >- public static boolean isInvalidationRunnerActive() >- { >- return invalidationRunnerActive.get(); >- } >- >- /** >- * @author Eike Stepper >- * @since 2.0 >- */ >- protected class OptionsImpl extends Notifier implements Options >- { >- private boolean generatedPackageEmulationEnabled = false; >- >- private boolean passiveUpdateEnabled = true; >- >- private CDOCollectionLoadingPolicy collectionLoadingPolicy; >- >- public OptionsImpl() >- { >- // TODO Remove preferences from core >- int value = OM.PREF_COLLECTION_LOADING_CHUNK_SIZE.getValue(); >- collectionLoadingPolicy = CDOUtil.createCollectionLoadingPolicy(value, value); >- } >- >- public IOptionsContainer getContainer() >- { >- return CDOSessionImpl.this; >- } >- >- public boolean isGeneratedPackageEmulationEnabled() >- { >- return generatedPackageEmulationEnabled; >- } >- >- public synchronized void setGeneratedPackageEmulationEnabled(boolean generatedPackageEmulationEnabled) >- { >- this.generatedPackageEmulationEnabled = generatedPackageEmulationEnabled; >- if (this.generatedPackageEmulationEnabled != generatedPackageEmulationEnabled) >- { >- this.generatedPackageEmulationEnabled = generatedPackageEmulationEnabled; >- // TODO Check inconsistent state if switching off? >- >- IListener[] listeners = getListeners(); >- if (listeners != null) >- { >- fireEvent(new GeneratedPackageEmulationEventImpl(), listeners); >- } >- } >- } >- >- public boolean isPassiveUpdateEnabled() >- { >- return passiveUpdateEnabled; >- } >- >- public synchronized void setPassiveUpdateEnabled(boolean passiveUpdateEnabled) >- { >- if (this.passiveUpdateEnabled != passiveUpdateEnabled) >- { >- this.passiveUpdateEnabled = passiveUpdateEnabled; >- >- // Need to refresh if we change state >- Map<CDOID, CDOIDAndVersion> allRevisions = getAllCDOIDAndVersion(); >- if (!allRevisions.isEmpty()) >- { >- int initialChunkSize = collectionLoadingPolicy.getInitialChunkSize(); >- getSessionProtocol().setPassiveUpdate(allRevisions, initialChunkSize, passiveUpdateEnabled); >- } >- >- IListener[] listeners = getListeners(); >- if (listeners != null) >- { >- fireEvent(new PassiveUpdateEventImpl(), listeners); >- } >- } >- } >- >- public CDOCollectionLoadingPolicy getCollectionLoadingPolicy() >- { >- return collectionLoadingPolicy; >- } >- >- public synchronized void setCollectionLoadingPolicy(CDOCollectionLoadingPolicy policy) >- { >- if (policy == null) >- { >- policy = CDOCollectionLoadingPolicy.DEFAULT; >- } >- >- if (collectionLoadingPolicy != policy) >- { >- collectionLoadingPolicy = policy; >- IListener[] listeners = getListeners(); >- if (listeners != null) >- { >- fireEvent(new CollectionLoadingPolicyEventImpl(), listeners); >- } >- } >- } >- >- /** >- * @author Eike Stepper >- */ >- private final class GeneratedPackageEmulationEventImpl extends OptionsEvent implements >- GeneratedPackageEmulationEvent >- { >- private static final long serialVersionUID = 1L; >- >- public GeneratedPackageEmulationEventImpl() >- { >- super(OptionsImpl.this); >- } >- } >- >- /** >- * @author Eike Stepper >- */ >- private final class PassiveUpdateEventImpl extends OptionsEvent implements PassiveUpdateEvent >- { >- private static final long serialVersionUID = 1L; >- >- public PassiveUpdateEventImpl() >- { >- super(OptionsImpl.this); >- } >- } >- >- /** >- * @author Eike Stepper >- */ >- private final class CollectionLoadingPolicyEventImpl extends OptionsEvent implements CollectionLoadingPolicyEvent >- { >- private static final long serialVersionUID = 1L; >- >- public CollectionLoadingPolicyEventImpl() >- { >- super(OptionsImpl.this); >- } >- } >- } >- >- /** >- * @author Eike Stepper >- */ >- private final class InvalidationEvent extends Event implements CDOSessionInvalidationEvent >- { >- private static final long serialVersionUID = 1L; >- >- private InternalCDOView view; >- >- private long timeStamp; >- >- private Set<CDOIDAndVersion> dirtyOIDs; >- >- private Collection<CDOID> detachedObjects; >- >- private Collection<CDOPackageUnit> newPackageUnits; >- >- public InvalidationEvent(InternalCDOView view, long timeStamp, Collection<CDOPackageUnit> packageUnits, >- Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects) >- { >- super(CDOSessionImpl.this); >- this.view = view; >- this.timeStamp = timeStamp; >- newPackageUnits = packageUnits; >- this.dirtyOIDs = dirtyOIDs; >- this.detachedObjects = detachedObjects; >- } >- >- @Override >- public CDOSession getSource() >- { >- return (CDOSession)super.getSource(); >- } >- >- public InternalCDOView getView() >- { >- return view; >- } >- >- public boolean isRemote() >- { >- return view == null; >- } >- >- public long getTimeStamp() >- { >- return timeStamp; >- } >- >- public Set<CDOIDAndVersion> getDirtyOIDs() >- { >- return dirtyOIDs; >- } >- >- public Collection<CDOID> getDetachedObjects() >- { >- return detachedObjects; >- } >- >- public Collection<CDOPackageUnit> getNewPackageUnits() >- { >- return newPackageUnits; >- } >- >- @Override >- public String toString() >- { >- return "CDOSessionInvalidationEvent: " + dirtyOIDs; >- } >- } >- >- /** >- * @author Eike Stepper >- */ >- public class DelegatingSessionProtocol extends Lifecycle implements CDOSessionProtocol >- { >- private CDOSessionProtocol delegate; >- >- @ExcludeFromDump >- private IListener delegateListener = new LifecycleEventAdapter() >- { >- @Override >- protected void onDeactivated(ILifecycle lifecycle) >- { >- DelegatingSessionProtocol.this.deactivate(); >- } >- }; >- >- public DelegatingSessionProtocol(CDOSessionProtocol delegate) >- { >- this.delegate = delegate; >- activate(); >- } >- >- public CDOSessionProtocol getDelegate() >- { >- return delegate; >- } >- >- public CDOSession getSession() >- { >- return (CDOSession)delegate.getSession(); >- } >- >- public boolean cancelQuery(int queryId) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.cancelQuery(queryId); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public void changeSubscription(int viewId, List<CDOID> cdoIDs, boolean subscribeMode, boolean clear) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- delegate.changeSubscription(viewId, cdoIDs, subscribeMode, clear); >- return; >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public void closeView(int viewId) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- delegate.closeView(viewId); >- return; >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public CommitTransactionResult commitTransaction(InternalCDOCommitContext commitContext, OMMonitor monitor) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.commitTransaction(commitContext, monitor); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public CommitTransactionResult commitTransactionCancel(InternalCDOXACommitContext xaContext, OMMonitor monitor) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.commitTransactionCancel(xaContext, monitor); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public CommitTransactionResult commitTransactionPhase1(InternalCDOXACommitContext xaContext, OMMonitor monitor) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.commitTransactionPhase1(xaContext, monitor); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public CommitTransactionResult commitTransactionPhase2(InternalCDOXACommitContext xaContext, OMMonitor monitor) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.commitTransactionPhase2(xaContext, monitor); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public CommitTransactionResult commitTransactionPhase3(InternalCDOXACommitContext xaContext, OMMonitor monitor) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.commitTransactionPhase3(xaContext, monitor); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public RepositoryTimeResult getRepositoryTime() >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.getRepositoryTime(); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public boolean isObjectLocked(CDOView view, CDOObject object, LockType lockType, boolean byOthers) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.isObjectLocked(view, object, lockType, byOthers); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public EPackage[] loadPackages(CDOPackageUnit packageUnit) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.loadPackages(packageUnit); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public Object loadChunk(InternalCDORevision revision, EStructuralFeature feature, int accessIndex, int fetchIndex, >- int fromIndex, int toIndex) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.loadChunk(revision, feature, accessIndex, fetchIndex, fromIndex, toIndex); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public InternalCDORevision loadRevision(CDOID id, int referenceChunk, int prefetchDepth) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.loadRevision(id, referenceChunk, prefetchDepth); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public InternalCDORevision loadRevisionByTime(CDOID id, int referenceChunk, int prefetchDepth, long timeStamp) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.loadRevisionByTime(id, referenceChunk, prefetchDepth, timeStamp); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public InternalCDORevision loadRevisionByVersion(CDOID id, int referenceChunk, int prefetchDepth, int version) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.loadRevisionByVersion(id, referenceChunk, prefetchDepth, version); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public List<InternalCDORevision> loadRevisions(Collection<CDOID> ids, int referenceChunk, int prefetchDepth) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.loadRevisions(ids, referenceChunk, prefetchDepth); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public List<InternalCDORevision> loadRevisionsByTime(Collection<CDOID> ids, int referenceChunk, int prefetchDepth, >- long timeStamp) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.loadRevisionsByTime(ids, referenceChunk, prefetchDepth, timeStamp); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public InternalCDORevision verifyRevision(InternalCDORevision revision, int referenceChunk) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.verifyRevision(revision, referenceChunk); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public void lockObjects(CDOView view, Map<CDOID, CDOIDAndVersion> objects, long timeout, LockType lockType) >- throws InterruptedException >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- delegate.lockObjects(view, objects, timeout, lockType); >- return; >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public void openView(int viewId, CDOCommonView.Type viewType, long timeStamp) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- delegate.openView(viewId, viewType, timeStamp); >- return; >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public void query(int viewID, AbstractQueryIterator<?> queryResult) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- delegate.query(viewID, queryResult); >- return; >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public boolean[] setAudit(int viewId, long timeStamp, List<InternalCDOObject> invalidObjects) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.setAudit(viewId, timeStamp, invalidObjects); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public void setPassiveUpdate(Map<CDOID, CDOIDAndVersion> idAndVersions, int initialChunkSize, >- boolean passiveUpdateEnabled) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- delegate.setPassiveUpdate(idAndVersions, initialChunkSize, passiveUpdateEnabled); >- return; >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public Collection<CDOTimeStampContext> syncRevisions(Map<CDOID, CDOIDAndVersion> allRevisions, int initialChunkSize) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.syncRevisions(allRevisions, initialChunkSize); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public void unlockObjects(CDOView view, Collection<? extends CDOObject> objects, LockType lockType) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- delegate.unlockObjects(view, objects, lockType); >- return; >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public List<CDORemoteSession> getRemoteSessions(InternalCDORemoteSessionManager manager, boolean subscribe) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.getRemoteSessions(manager, subscribe); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public Set<Integer> sendRemoteMessage(CDORemoteSessionMessage message, List<CDORemoteSession> recipients) >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.sendRemoteMessage(message, recipients); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- public boolean unsubscribeRemoteSessions() >- { >- int attempt = 0; >- for (;;) >- { >- try >- { >- return delegate.unsubscribeRemoteSessions(); >- } >- catch (Exception ex) >- { >- handleException(++attempt, ex); >- } >- } >- } >- >- @Override >- protected void doActivate() throws Exception >- { >- super.doActivate(); >- EventUtil.addListener(delegate, delegateListener); >- } >- >- @Override >- protected void doDeactivate() throws Exception >- { >- EventUtil.removeListener(delegate, delegateListener); >- LifecycleUtil.deactivate(delegate); >- delegate = null; >- super.doDeactivate(); >- } >- >- private void handleException(int attempt, Exception exception) >- { >- try >- { >- getExceptionHandler().handleException(CDOSessionImpl.this, attempt, exception); >- } >- catch (Exception ex) >- { >- throw WrappedException.wrap(ex); >- } >- } >- } >+public abstract class CDOSessionImpl extends Container<CDOView> implements >+ InternalCDOSession { >+ private static final ContextTracer TRACER = new ContextTracer( >+ OM.DEBUG_SESSION, CDOSessionImpl.class); >+ >+ private static final long NO_TIMEOUT = -1; >+ >+ private InternalCDOSessionConfiguration configuration; >+ >+ private ExceptionHandler exceptionHandler; >+ >+ private CDOSessionProtocol sessionProtocol; >+ >+ @ExcludeFromDump >+ private IListener sessionProtocolListener = new LifecycleEventAdapter() { >+ @Override >+ protected void onDeactivated(ILifecycle lifecycle) { >+ CDOSessionImpl.this.deactivate(); >+ } >+ }; >+ >+ private int sessionID; >+ >+ private String userID; >+ >+ private long lastUpdateTime; >+ >+ @ExcludeFromDump >+ private Object lastUpdateTimeLock = new Object(); >+ >+ private CDOSession.Options options = createOptions(); >+ >+ private CDORepositoryInfo repositoryInfo; >+ >+ private CDOFetchRuleManager ruleManager = CDOFetchRuleManager.NOOP; >+ >+ private IRWLockManager<CDOSessionImpl, Object> lockmanager = new RWLockManager<CDOSessionImpl, Object>(); >+ >+ public IRWLockManager<CDOSessionImpl, Object> getLockmanager() { >+ return lockmanager; >+ } >+ >+ @ExcludeFromDump >+ private Set<CDOSessionImpl> singletonCollection = Collections >+ .singleton(this); >+ >+ private CDOAuthenticator authenticator; >+ >+ private InternalCDORemoteSessionManager remoteSessionManager; >+ >+ private Set<InternalCDOView> views = new HashSet<InternalCDOView>(); >+ >+ /** >+ * Fixes a threading problem between a committing thread and the Net4j >+ * thread that delivers incoming commit notifications. TODO This is a >+ * workaround, see Bug 294700 >+ */ >+ private Object commitLock = new Object(); >+ >+ @ExcludeFromDump >+ private QueueRunner invalidationRunner; >+ >+ @ExcludeFromDump >+ private Object invalidationRunnerLock = new Object(); >+ >+ @ExcludeFromDump >+ private static ThreadLocal<Boolean> invalidationRunnerActive = new InheritableThreadLocal<Boolean>(); >+ >+ @ExcludeFromDump >+ private int lastViewID; >+ >+ public CDOSessionImpl(InternalCDOSessionConfiguration configuration) { >+ this.configuration = configuration; >+ } >+ >+ public InternalCDOSessionConfiguration getConfiguration() { >+ return configuration; >+ } >+ >+ public CDORepositoryInfo getRepositoryInfo() { >+ return repositoryInfo; >+ } >+ >+ public void setRepositoryInfo(CDORepositoryInfo repositoryInfo) { >+ this.repositoryInfo = repositoryInfo; >+ } >+ >+ public int getSessionID() { >+ return sessionID; >+ } >+ >+ public void setSessionID(int sessionID) { >+ this.sessionID = sessionID; >+ } >+ >+ public String getUserID() { >+ return userID; >+ } >+ >+ public void setUserID(String userID) { >+ this.userID = userID; >+ } >+ >+ public ExceptionHandler getExceptionHandler() { >+ return exceptionHandler; >+ } >+ >+ public void setExceptionHandler(ExceptionHandler exceptionHandler) { >+ checkInactive(); >+ this.exceptionHandler = exceptionHandler; >+ } >+ >+ /** >+ * @since 2.0 >+ */ >+ public CDOSession.Options options() { >+ return options; >+ } >+ >+ /** >+ * @since 2.0 >+ */ >+ protected CDOSession.Options createOptions() { >+ return new OptionsImpl(); >+ } >+ >+ public CDOSessionProtocol getSessionProtocol() { >+ return sessionProtocol; >+ } >+ >+ public void setSessionProtocol(CDOSessionProtocol sessionProtocol) { >+ this.sessionProtocol = sessionProtocol; >+ } >+ >+ public void close() { >+ LifecycleUtil.deactivate(this, OMLogger.Level.DEBUG); >+ } >+ >+ /** >+ * @since 2.0 >+ */ >+ public boolean isClosed() { >+ return !isActive(); >+ } >+ >+ public Object processPackage(Object value) { >+ CDOFactoryImpl.prepareDynamicEPackage(value); >+ return value; >+ } >+ >+ public EPackage[] loadPackages(CDOPackageUnit packageUnit) { >+ if (packageUnit.getOriginalType().isGenerated()) { >+ if (!options().isGeneratedPackageEmulationEnabled()) { >+ throw new CDOException(MessageFormat.format(Messages >+ .getString("CDOSessionImpl.0"), packageUnit)); >+ } >+ } >+ >+ return getSessionProtocol().loadPackages(packageUnit); >+ } >+ >+ public void acquireAtomicRequestLock(Object key) { >+ try { >+ lockmanager.lock(LockType.WRITE, key, this, RWLockManager.WAIT); >+ } catch (InterruptedException ex) { >+ throw WrappedException.wrap(ex); >+ } >+ } >+ >+ public void releaseAtomicRequestLock(Object key) { >+ lockmanager.unlock(LockType.WRITE, key, singletonCollection); >+ } >+ >+ /** >+ * @since 3.0 >+ */ >+ public CDOFetchRuleManager getFetchRuleManager() { >+ return ruleManager; >+ } >+ >+ /** >+ * @since 3.0 >+ */ >+ public void setFetchRuleManager(CDOFetchRuleManager fetchRuleManager) { >+ ruleManager = fetchRuleManager; >+ } >+ >+ public CDOAuthenticator getAuthenticator() { >+ return authenticator; >+ } >+ >+ public void setAuthenticator(CDOAuthenticator authenticator) { >+ this.authenticator = authenticator; >+ } >+ >+ public InternalCDORemoteSessionManager getRemoteSessionManager() { >+ return remoteSessionManager; >+ } >+ >+ public void setRemoteSessionManager( >+ InternalCDORemoteSessionManager remoteSessionManager) { >+ this.remoteSessionManager = remoteSessionManager; >+ } >+ >+ /** >+ * @since 2.0 >+ */ >+ public InternalCDOTransaction openTransaction(ResourceSet resourceSet) { >+ checkActive(); >+ InternalCDOTransaction transaction = createTransaction(); >+ initView(transaction, resourceSet); >+ return transaction; >+ } >+ >+ /** >+ * @since 2.0 >+ */ >+ public InternalCDOTransaction openTransaction() { >+ return openTransaction(createResourceSet()); >+ } >+ >+ /** >+ * @since 2.0 >+ */ >+ protected InternalCDOTransaction createTransaction() { >+ return new CDOTransactionImpl(); >+ } >+ >+ /** >+ * @since 2.0 >+ */ >+ public InternalCDOView openView(ResourceSet resourceSet) { >+ checkActive(); >+ InternalCDOView view = createView(); >+ initView(view, resourceSet); >+ return view; >+ } >+ >+ /** >+ * @since 2.0 >+ */ >+ public InternalCDOView openView() { >+ return openView(createResourceSet()); >+ } >+ >+ /** >+ * @since 2.0 >+ */ >+ protected InternalCDOView createView() { >+ return new CDOViewImpl(); >+ } >+ >+ public CDOAuditImpl openAudit(ResourceSet resourceSet, long timeStamp) { >+ checkActive(); >+ CDOAuditImpl audit = createAudit(timeStamp); >+ initView(audit, resourceSet); >+ return audit; >+ } >+ >+ public CDOAuditImpl openAudit(long timeStamp) { >+ return openAudit(createResourceSet(), timeStamp); >+ } >+ >+ /** >+ * @since 2.0 >+ */ >+ protected CDOAuditImpl createAudit(long timeStamp) { >+ return new CDOAuditImpl(timeStamp); >+ } >+ >+ /** >+ * @since 2.0 >+ */ >+ public void viewDetached(InternalCDOView view) { >+ // Detach viewset from the view >+ view.getViewSet().remove(view); >+ synchronized (views) { >+ if (!views.remove(view)) { >+ return; >+ } >+ } >+ >+ if (isActive()) { >+ try { >+ LifecycleUtil.deactivate(view); >+ } catch (Exception ex) { >+ throw WrappedException.wrap(ex); >+ } >+ } >+ >+ fireElementRemovedEvent(view); >+ } >+ >+ public CDOView getView(int viewID) { >+ checkActive(); >+ for (InternalCDOView view : getViews()) { >+ if (view.getViewID() == viewID) { >+ return view; >+ } >+ } >+ >+ return null; >+ } >+ >+ /** >+ * @since 2.0 >+ */ >+ public InternalCDOView[] getViews() { >+ checkActive(); >+ synchronized (views) { >+ return views.toArray(new InternalCDOView[views.size()]); >+ } >+ } >+ >+ public CDOView[] getElements() { >+ return getViews(); >+ } >+ >+ @Override >+ public boolean isEmpty() { >+ checkActive(); >+ return views.isEmpty(); >+ } >+ >+ /** >+ * @since 2.0 >+ */ >+ public Collection<CDOTimeStampContext> refresh() { >+ // If passive update is turned on we don`t need to refresh. >+ // We do not throw an exception since the client could turn >+ // that feature on or off without affecting their code. >+ checkActive(); >+ if (!options().isPassiveUpdateEnabled()) { >+ Map<CDOID, CDOIDAndVersion> allRevisions = getAllCDOIDAndVersion(); >+ >+ try { >+ if (!allRevisions.isEmpty()) { >+ int initialChunkSize = options() >+ .getCollectionLoadingPolicy().getInitialChunkSize(); >+ return getSessionProtocol().syncRevisions(allRevisions, >+ initialChunkSize); >+ } >+ } catch (Exception ex) { >+ throw WrappedException.wrap(ex); >+ } >+ } >+ >+ return Collections.emptyList(); >+ } >+ >+ public long getLastUpdateTime() { >+ synchronized (lastUpdateTimeLock) { >+ return lastUpdateTime; >+ } >+ } >+ >+ public void setLastUpdateTime(long lastUpdateTime) { >+ synchronized (lastUpdateTimeLock) { >+ this.lastUpdateTime = lastUpdateTime; >+ lastUpdateTimeLock.notifyAll(); >+ } >+ } >+ >+ public void waitForUpdate(long updateTime) { >+ waitForUpdate(updateTime, NO_TIMEOUT); >+ } >+ >+ public boolean waitForUpdate(long updateTime, long timeoutMillis) { >+ long end = timeoutMillis == NO_TIMEOUT ? Long.MAX_VALUE : System >+ .currentTimeMillis() >+ + timeoutMillis; >+ for (;;) { >+ synchronized (lastUpdateTimeLock) { >+ if (lastUpdateTime >= updateTime) { >+ return true; >+ } >+ >+ long now = System.currentTimeMillis(); >+ if (now >= end) { >+ return false; >+ } >+ >+ try { >+ lastUpdateTimeLock.wait(end - now); >+ } catch (InterruptedException ex) { >+ throw WrappedException.wrap(ex); >+ } >+ } >+ } >+ } >+ >+ /** >+ * @since 3.0 >+ */ >+ public Object resolveElementProxy(CDORevision revision, >+ EStructuralFeature feature, int accessIndex, int serverIndex) { >+ CDOCollectionLoadingPolicy policy = options() >+ .getCollectionLoadingPolicy(); >+ return policy.resolveProxy(this, revision, feature, accessIndex, >+ serverIndex); >+ } >+ >+ /** >+ * @since 2.0 >+ */ >+ public void handleSyncResponse(long timestamp, >+ Collection<CDOPackageUnit> newPackageUnits, >+ Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects) { >+ handleCommitNotification(timestamp, newPackageUnits, dirtyOIDs, >+ detachedObjects, null, null, true, false); >+ } >+ >+ /** >+ * @since 2.0 >+ */ >+ public void handleCommitNotification(final long timeStamp, >+ final Collection<CDOPackageUnit> newPackageUnits, >+ Set<CDOIDAndVersion> dirtyOIDs, >+ final Collection<CDOID> detachedObjects, >+ final Collection<CDORevisionDelta> deltas, >+ InternalCDOView excludedView) { >+ handleCommitNotification(timeStamp, newPackageUnits, dirtyOIDs, >+ detachedObjects, deltas, excludedView, options() >+ .isPassiveUpdateEnabled(), true); >+ } >+ >+ private void handleCommitNotification(final long timeStamp, >+ final Collection<CDOPackageUnit> newPackageUnits, >+ Set<CDOIDAndVersion> dirtyOIDs, >+ final Collection<CDOID> detachedObjects, >+ final Collection<CDORevisionDelta> deltas, >+ InternalCDOView excludedView, final boolean passiveUpdate, >+ final boolean async) { >+ try { >+ synchronized (commitLock) { >+ if (passiveUpdate) { >+ reviseRevisions(timeStamp, dirtyOIDs, detachedObjects, >+ excludedView); >+ } >+ >+ final Set<CDOIDAndVersion> finalDirtyOIDs = Collections >+ .unmodifiableSet(dirtyOIDs); >+ final Collection<CDOID> finalDetachedObjects = Collections >+ .unmodifiableCollection(detachedObjects); >+ final boolean skipChangeSubscription = (deltas == null || deltas >+ .size() <= 0) >+ && (detachedObjects == null || detachedObjects.size() <= 0); >+ >+ for (final InternalCDOView view : getViews()) { >+ if (view != excludedView) { >+ final Runnable runnable = new Runnable() { >+ public void run() { >+ try { >+ Set<CDOObject> conflicts = null; >+ if (passiveUpdate) { >+ conflicts = view.handleInvalidation( >+ timeStamp, finalDirtyOIDs, >+ finalDetachedObjects); >+ } >+ >+ if (!skipChangeSubscription) { >+ view.handleChangeSubscription(deltas, >+ detachedObjects); >+ } >+ >+ if (conflicts != null) { >+ ((InternalCDOTransaction) view) >+ .handleConflicts(conflicts); >+ } >+ >+ view.fireAdaptersNotifiedEvent(timeStamp); >+ } catch (RuntimeException ex) { >+ if (!async) { >+ throw ex; >+ } >+ >+ if (view.isActive()) { >+ OM.LOG.error(ex); >+ } else { >+ OM.LOG.info(Messages >+ .getString("CDOSessionImpl.1")); >+ } >+ } >+ } >+ }; >+ >+ if (async) { >+ QueueRunner runner = getInvalidationRunner(); >+ runner.addWork(new Runnable() { >+ public void run() { >+ try { >+ invalidationRunnerActive.set(true); >+ runnable.run(); >+ } finally { >+ invalidationRunnerActive.set(false); >+ } >+ } >+ }); >+ } else { >+ runnable.run(); >+ } >+ } >+ } >+ } >+ } catch (RuntimeException ex) { >+ if (!async) { >+ throw ex; >+ } >+ >+ if (isActive()) { >+ OM.LOG.error(ex); >+ } else { >+ OM.LOG.info(Messages.getString("CDOSessionImpl.2")); >+ } >+ } >+ >+ setLastUpdateTime(timeStamp); >+ fireInvalidationEvent(timeStamp, newPackageUnits, dirtyOIDs, >+ detachedObjects, excludedView); >+ } >+ >+ public void reviseRevisions(final long timeStamp, >+ Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects, >+ InternalCDOView excludedView) { >+ InternalCDORevisionManager revisionManager = getRevisionManager(); >+ if (excludedView == null || timeStamp == CDORevision.UNSPECIFIED_DATE) { >+ for (CDOIDAndVersion dirtyOID : dirtyOIDs) { >+ CDOID id = dirtyOID.getID(); >+ int version = dirtyOID.getVersion(); >+ revisionManager.reviseVersion(id, version, timeStamp); >+ } >+ } >+ >+ for (CDOID id : detachedObjects) { >+ revisionManager.reviseLatest(id); >+ } >+ } >+ >+ public Object getCommitLock() { >+ return commitLock; >+ } >+ >+ private QueueRunner getInvalidationRunner() { >+ synchronized (invalidationRunnerLock) { >+ if (invalidationRunner == null) { >+ invalidationRunner = createInvalidationRunner(); >+ invalidationRunner.activate(); >+ } >+ } >+ >+ return invalidationRunner; >+ } >+ >+ protected QueueRunner createInvalidationRunner() { >+ return new QueueRunner() { >+ @Override >+ protected String getThreadName() { >+ return "InvalidationRunner"; >+ } >+ >+ @Override >+ public String toString() { >+ return getThreadName(); >+ } >+ }; >+ } >+ >+ /** >+ * @param packageUnits >+ * @since 2.0 >+ */ >+ public void fireInvalidationEvent(long timeStamp, >+ Collection<CDOPackageUnit> packageUnits, >+ Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects, >+ InternalCDOView excludedView) { >+ fireEvent(new InvalidationEvent(excludedView, timeStamp, packageUnits, >+ dirtyOIDs, detachedObjects)); >+ } >+ >+ @Override >+ public String toString() { >+ String name = repositoryInfo == null ? "?" : repositoryInfo.getName(); >+ return MessageFormat.format("CDOSession[{0}, {1}]", name, sessionID); >+ } >+ >+ protected ResourceSet createResourceSet() { >+ return new ResourceSetImpl(); >+ } >+ >+ /** >+ * @since 2.0 >+ */ >+ protected void initView(InternalCDOView view, ResourceSet resourceSet) { >+ if (TRACER.isEnabled()) { >+ TRACER.format("Initializing new {0} view", view.getViewType()); >+ } >+ >+ InternalCDOViewSet viewSet = SessionUtil >+ .prepareResourceSet(resourceSet); >+ synchronized (views) { >+ view.setSession(this); >+ view.setViewID(++lastViewID); >+ views.add(view); >+ } >+ >+ // Link ViewSet with View >+ view.setViewSet(viewSet); >+ viewSet.add(view); >+ >+ try { >+ view.activate(); >+ fireElementAddedEvent(view); >+ } catch (RuntimeException ex) { >+ synchronized (views) { >+ views.remove(view); >+ } >+ >+ viewSet.remove(view); >+ throw ex; >+ } >+ } >+ >+ @Override >+ protected void doActivate() throws Exception { >+ super.doActivate(); >+ getConfiguration().activateSession(this); >+ checkState(sessionProtocol, "sessionProtocol"); >+ checkState(remoteSessionManager, "remoteSessionManager"); >+ if (exceptionHandler != null) { >+ sessionProtocol = new DelegatingSessionProtocol(sessionProtocol); >+ } >+ >+ EventUtil.addListener(sessionProtocol, sessionProtocolListener); >+ } >+ >+ @Override >+ protected void doDeactivate() throws Exception { >+ for (InternalCDOView view : views.toArray(new InternalCDOView[views >+ .size()])) { >+ try { >+ view.close(); >+ } catch (RuntimeException ignore) { >+ } >+ } >+ >+ views.clear(); >+ >+ if (invalidationRunner != null) { >+ LifecycleUtil.deactivate(invalidationRunner, OMLogger.Level.WARN); >+ invalidationRunner = null; >+ } >+ >+ EventUtil.removeListener(sessionProtocol, sessionProtocolListener); >+ getConfiguration().deactivateSession(this); >+ super.doDeactivate(); >+ } >+ >+ private Map<CDOID, CDOIDAndVersion> getAllCDOIDAndVersion() { >+ Map<CDOID, CDOIDAndVersion> uniqueObjects = new HashMap<CDOID, CDOIDAndVersion>(); >+ for (InternalCDOView view : getViews()) { >+ view.getCDOIDAndVersion(uniqueObjects, Arrays.asList(view >+ .getObjectsArray())); >+ } >+ >+ // Need to add Revision from revisionManager since we do not have all >+ // objects in view. >+ for (CDORevision revision : getRevisionManager().getCache() >+ .getRevisions()) { >+ if (!uniqueObjects.containsKey(revision.getID())) { >+ uniqueObjects.put(revision.getID(), CDOIDUtil >+ .createIDAndVersion(revision.getID(), revision >+ .getVersion())); >+ } >+ } >+ >+ return uniqueObjects; >+ } >+ >+ public static boolean isInvalidationRunnerActive() { >+ return invalidationRunnerActive.get(); >+ } >+ >+ /** >+ * @author Eike Stepper >+ * @since 2.0 >+ */ >+ protected class OptionsImpl extends Notifier implements Options { >+ private boolean generatedPackageEmulationEnabled = false; >+ >+ private boolean passiveUpdateEnabled = true; >+ >+ private CDOCollectionLoadingPolicy collectionLoadingPolicy; >+ >+ public OptionsImpl() { >+ // TODO Remove preferences from core >+ int value = OM.PREF_COLLECTION_LOADING_CHUNK_SIZE.getValue(); >+ collectionLoadingPolicy = CDOUtil.createCollectionLoadingPolicy( >+ value, value); >+ } >+ >+ public IOptionsContainer getContainer() { >+ return CDOSessionImpl.this; >+ } >+ >+ public boolean isGeneratedPackageEmulationEnabled() { >+ return generatedPackageEmulationEnabled; >+ } >+ >+ public synchronized void setGeneratedPackageEmulationEnabled( >+ boolean generatedPackageEmulationEnabled) { >+ this.generatedPackageEmulationEnabled = generatedPackageEmulationEnabled; >+ if (this.generatedPackageEmulationEnabled != generatedPackageEmulationEnabled) { >+ this.generatedPackageEmulationEnabled = generatedPackageEmulationEnabled; >+ // TODO Check inconsistent state if switching off? >+ >+ IListener[] listeners = getListeners(); >+ if (listeners != null) { >+ fireEvent(new GeneratedPackageEmulationEventImpl(), >+ listeners); >+ } >+ } >+ } >+ >+ public boolean isPassiveUpdateEnabled() { >+ return passiveUpdateEnabled; >+ } >+ >+ public synchronized void setPassiveUpdateEnabled( >+ boolean passiveUpdateEnabled) { >+ if (this.passiveUpdateEnabled != passiveUpdateEnabled) { >+ this.passiveUpdateEnabled = passiveUpdateEnabled; >+ >+ // Need to refresh if we change state >+ Map<CDOID, CDOIDAndVersion> allRevisions = getAllCDOIDAndVersion(); >+ if (!allRevisions.isEmpty()) { >+ int initialChunkSize = collectionLoadingPolicy >+ .getInitialChunkSize(); >+ getSessionProtocol().setPassiveUpdate(allRevisions, >+ initialChunkSize, passiveUpdateEnabled); >+ } >+ >+ IListener[] listeners = getListeners(); >+ if (listeners != null) { >+ fireEvent(new PassiveUpdateEventImpl(), listeners); >+ } >+ } >+ } >+ >+ public CDOCollectionLoadingPolicy getCollectionLoadingPolicy() { >+ return collectionLoadingPolicy; >+ } >+ >+ public synchronized void setCollectionLoadingPolicy( >+ CDOCollectionLoadingPolicy policy) { >+ if (policy == null) { >+ policy = CDOCollectionLoadingPolicy.DEFAULT; >+ } >+ >+ if (collectionLoadingPolicy != policy) { >+ collectionLoadingPolicy = policy; >+ IListener[] listeners = getListeners(); >+ if (listeners != null) { >+ fireEvent(new CollectionLoadingPolicyEventImpl(), listeners); >+ } >+ } >+ } >+ >+ /** >+ * @author Eike Stepper >+ */ >+ private final class GeneratedPackageEmulationEventImpl extends >+ OptionsEvent implements GeneratedPackageEmulationEvent { >+ private static final long serialVersionUID = 1L; >+ >+ public GeneratedPackageEmulationEventImpl() { >+ super(OptionsImpl.this); >+ } >+ } >+ >+ /** >+ * @author Eike Stepper >+ */ >+ private final class PassiveUpdateEventImpl extends OptionsEvent >+ implements PassiveUpdateEvent { >+ private static final long serialVersionUID = 1L; >+ >+ public PassiveUpdateEventImpl() { >+ super(OptionsImpl.this); >+ } >+ } >+ >+ /** >+ * @author Eike Stepper >+ */ >+ private final class CollectionLoadingPolicyEventImpl extends >+ OptionsEvent implements CollectionLoadingPolicyEvent { >+ private static final long serialVersionUID = 1L; >+ >+ public CollectionLoadingPolicyEventImpl() { >+ super(OptionsImpl.this); >+ } >+ } >+ } >+ >+ /** >+ * @author Eike Stepper >+ */ >+ private final class InvalidationEvent extends Event implements >+ CDOSessionInvalidationEvent { >+ private static final long serialVersionUID = 1L; >+ >+ private InternalCDOView view; >+ >+ private long timeStamp; >+ >+ private Set<CDOIDAndVersion> dirtyOIDs; >+ >+ private Collection<CDOID> detachedObjects; >+ >+ private Collection<CDOPackageUnit> newPackageUnits; >+ >+ public InvalidationEvent(InternalCDOView view, long timeStamp, >+ Collection<CDOPackageUnit> packageUnits, >+ Set<CDOIDAndVersion> dirtyOIDs, >+ Collection<CDOID> detachedObjects) { >+ super(CDOSessionImpl.this); >+ this.view = view; >+ this.timeStamp = timeStamp; >+ newPackageUnits = packageUnits; >+ this.dirtyOIDs = dirtyOIDs; >+ this.detachedObjects = detachedObjects; >+ } >+ >+ @Override >+ public CDOSession getSource() { >+ return (CDOSession) super.getSource(); >+ } >+ >+ public InternalCDOView getView() { >+ return view; >+ } >+ >+ public boolean isRemote() { >+ return view == null; >+ } >+ >+ public long getTimeStamp() { >+ return timeStamp; >+ } >+ >+ public Set<CDOIDAndVersion> getDirtyOIDs() { >+ return dirtyOIDs; >+ } >+ >+ public Collection<CDOID> getDetachedObjects() { >+ return detachedObjects; >+ } >+ >+ public Collection<CDOPackageUnit> getNewPackageUnits() { >+ return newPackageUnits; >+ } >+ >+ @Override >+ public String toString() { >+ return "CDOSessionInvalidationEvent: " + dirtyOIDs; >+ } >+ } >+ >+ /** >+ * @author Eike Stepper >+ */ >+ public class DelegatingSessionProtocol extends Lifecycle implements >+ CDOSessionProtocol { >+ private CDOSessionProtocol delegate; >+ >+ @ExcludeFromDump >+ private IListener delegateListener = new LifecycleEventAdapter() { >+ @Override >+ protected void onDeactivated(ILifecycle lifecycle) { >+ DelegatingSessionProtocol.this.deactivate(); >+ } >+ }; >+ >+ public DelegatingSessionProtocol(CDOSessionProtocol delegate) { >+ this.delegate = delegate; >+ activate(); >+ } >+ >+ public CDOSessionProtocol getDelegate() { >+ return delegate; >+ } >+ >+ public CDOSession getSession() { >+ return (CDOSession) delegate.getSession(); >+ } >+ >+ public boolean cancelQuery(int queryId) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.cancelQuery(queryId); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public void changeSubscription(int viewId, List<CDOID> cdoIDs, >+ boolean subscribeMode, boolean clear) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ delegate.changeSubscription(viewId, cdoIDs, subscribeMode, >+ clear); >+ return; >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public void closeView(int viewId) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ delegate.closeView(viewId); >+ return; >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public CommitTransactionResult commitTransaction( >+ InternalCDOCommitContext commitContext, OMMonitor monitor) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.commitTransaction(commitContext, monitor); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public CommitTransactionResult commitTransactionCancel( >+ InternalCDOXACommitContext xaContext, OMMonitor monitor) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.commitTransactionCancel(xaContext, monitor); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public CommitTransactionResult commitTransactionPhase1( >+ InternalCDOXACommitContext xaContext, OMMonitor monitor) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.commitTransactionPhase1(xaContext, monitor); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public CommitTransactionResult commitTransactionPhase2( >+ InternalCDOXACommitContext xaContext, OMMonitor monitor) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.commitTransactionPhase2(xaContext, monitor); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public CommitTransactionResult commitTransactionPhase3( >+ InternalCDOXACommitContext xaContext, OMMonitor monitor) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.commitTransactionPhase3(xaContext, monitor); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public RepositoryTimeResult getRepositoryTime() { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.getRepositoryTime(); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public boolean isObjectLocked(CDOView view, CDOObject object, >+ LockType lockType, boolean byOthers) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.isObjectLocked(view, object, lockType, >+ byOthers); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public EPackage[] loadPackages(CDOPackageUnit packageUnit) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.loadPackages(packageUnit); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public Object loadChunk(InternalCDORevision revision, >+ EStructuralFeature feature, int accessIndex, int fetchIndex, >+ int fromIndex, int toIndex) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.loadChunk(revision, feature, accessIndex, >+ fetchIndex, fromIndex, toIndex); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public InternalCDORevision loadRevision(CDOID id, int referenceChunk, >+ int prefetchDepth) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.loadRevision(id, referenceChunk, >+ prefetchDepth); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public InternalCDORevision loadRevisionByTime(CDOID id, >+ int referenceChunk, int prefetchDepth, long timeStamp) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.loadRevisionByTime(id, referenceChunk, >+ prefetchDepth, timeStamp); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public InternalCDORevision loadRevisionByVersion(CDOID id, >+ int referenceChunk, int prefetchDepth, int version) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.loadRevisionByVersion(id, referenceChunk, >+ prefetchDepth, version); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public List<InternalCDORevision> loadRevisions(Collection<CDOID> ids, >+ int referenceChunk, int prefetchDepth) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.loadRevisions(ids, referenceChunk, >+ prefetchDepth); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public List<InternalCDORevision> loadRevisionsByTime( >+ Collection<CDOID> ids, int referenceChunk, int prefetchDepth, >+ long timeStamp) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.loadRevisionsByTime(ids, referenceChunk, >+ prefetchDepth, timeStamp); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public InternalCDORevision verifyRevision(InternalCDORevision revision, >+ int referenceChunk) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.verifyRevision(revision, referenceChunk); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public void lockObjects(CDOView view, >+ Map<CDOID, CDOIDAndVersion> objects, long timeout, >+ LockType lockType) throws InterruptedException { >+ int attempt = 0; >+ for (;;) { >+ try { >+ delegate.lockObjects(view, objects, timeout, lockType); >+ return; >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public void openView(int viewId, CDOCommonView.Type viewType, >+ long timeStamp) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ delegate.openView(viewId, viewType, timeStamp); >+ return; >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public void query(int viewID, AbstractQueryIterator<?> queryResult) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ delegate.query(viewID, queryResult); >+ return; >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public boolean[] setAudit(int viewId, long timeStamp, >+ List<InternalCDOObject> invalidObjects) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.setAudit(viewId, timeStamp, invalidObjects); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public void setPassiveUpdate(Map<CDOID, CDOIDAndVersion> idAndVersions, >+ int initialChunkSize, boolean passiveUpdateEnabled) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ delegate.setPassiveUpdate(idAndVersions, initialChunkSize, >+ passiveUpdateEnabled); >+ return; >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public Collection<CDOTimeStampContext> syncRevisions( >+ Map<CDOID, CDOIDAndVersion> allRevisions, int initialChunkSize) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.syncRevisions(allRevisions, >+ initialChunkSize); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public void unlockObjects(CDOView view, >+ Collection<? extends CDOObject> objects, LockType lockType) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ delegate.unlockObjects(view, objects, lockType); >+ return; >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public List<CDORemoteSession> getRemoteSessions( >+ InternalCDORemoteSessionManager manager, boolean subscribe) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.getRemoteSessions(manager, subscribe); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public Set<Integer> sendRemoteMessage(CDORemoteSessionMessage message, >+ List<CDORemoteSession> recipients) { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.sendRemoteMessage(message, recipients); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ public boolean unsubscribeRemoteSessions() { >+ int attempt = 0; >+ for (;;) { >+ try { >+ return delegate.unsubscribeRemoteSessions(); >+ } catch (Exception ex) { >+ handleException(++attempt, ex); >+ } >+ } >+ } >+ >+ @Override >+ protected void doActivate() throws Exception { >+ super.doActivate(); >+ EventUtil.addListener(delegate, delegateListener); >+ } >+ >+ @Override >+ protected void doDeactivate() throws Exception { >+ EventUtil.removeListener(delegate, delegateListener); >+ LifecycleUtil.deactivate(delegate); >+ delegate = null; >+ super.doDeactivate(); >+ } >+ >+ private void handleException(int attempt, Exception exception) { >+ try { >+ getExceptionHandler().handleException(CDOSessionImpl.this, >+ attempt, exception); >+ } catch (Exception ex) { >+ throw WrappedException.wrap(ex); >+ } >+ } >+ } >+ > } >Index: src/org/eclipse/emf/spi/cdo/InternalCDOSession.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java,v >retrieving revision 1.26 >diff -u -r1.26 InternalCDOSession.java >--- src/org/eclipse/emf/spi/cdo/InternalCDOSession.java 10 Nov 2009 08:25:25 -0000 1.26 >+++ src/org/eclipse/emf/spi/cdo/InternalCDOSession.java 16 Nov 2009 17:37:35 -0000 >@@ -24,6 +24,9 @@ > import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager.RevisionLocker; > import org.eclipse.emf.cdo.view.CDOFetchRuleManager; > >+import org.eclipse.emf.internal.cdo.session.CDOSessionImpl; >+ >+import org.eclipse.net4j.util.concurrent.IRWLockManager; > import org.eclipse.net4j.util.lifecycle.ILifecycle; > > import org.eclipse.emf.ecore.EStructuralFeature; >@@ -35,85 +38,96 @@ > * @author Eike Stepper > * @since 2.0 > */ >-public interface InternalCDOSession extends CDOSession, PackageProcessor, PackageLoader, RevisionLocker, ILifecycle >-{ >- /** >- * @since 3.0 >- */ >- public InternalCDOSessionConfiguration getConfiguration(); >- >- public CDOSessionProtocol getSessionProtocol(); >- >- /** >- * @since 3.0 >- */ >- public void setSessionProtocol(CDOSessionProtocol sessionProtocol); >- >- public InternalCDOPackageRegistry getPackageRegistry(); >- >- /** >- * @since 3.0 >- */ >- public InternalCDORevisionManager getRevisionManager(); >- >- public void setExceptionHandler(CDOSession.ExceptionHandler exceptionHandler); >- >- /** >- * @since 3.0 >- */ >- public void setFetchRuleManager(CDOFetchRuleManager fetchRuleManager); >- >- /** >- * @since 3.0 >- */ >- public void setRepositoryInfo(CDORepositoryInfo repositoryInfo); >- >- /** >- * @since 3.0 >- */ >- public InternalCDORemoteSessionManager getRemoteSessionManager(); >- >- /** >- * @since 3.0 >- */ >- public void setRemoteSessionManager(InternalCDORemoteSessionManager remoteSessionManager); >- >- /** >- * @since 3.0 >- */ >- public void setSessionID(int sessionID); >- >- public void setUserID(String userID); >- >- /** >- * @since 3.0 >- */ >- public void setLastUpdateTime(long lastUpdateTime); >- >- public void viewDetached(InternalCDOView view); >- >- /** >- * @since 3.0 >- */ >- public Object resolveElementProxy(CDORevision revision, EStructuralFeature feature, int accessIndex, int serverIndex); >- >- /** >- * @since 3.0 >- */ >- public Object getCommitLock(); >- >- public void handleCommitNotification(long timeStamp, Collection<CDOPackageUnit> newPackageUnits, >- Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects, Collection<CDORevisionDelta> deltas, >- InternalCDOView excludedView); >- >- public void handleSyncResponse(long timestamp, Collection<CDOPackageUnit> newPackageUnits, >- Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects); >- >- /** >- * In some cases we need to sync without propagating event. Lock is a good example. >- * >- * @since 3.0 >- */ >- public void reviseRevisions(final long timeStamp, Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects, >- InternalCDOView excludedView); >+public interface InternalCDOSession extends CDOSession, PackageProcessor, >+ PackageLoader, RevisionLocker, ILifecycle { >+ /** >+ * @since 3.0 >+ */ >+ public InternalCDOSessionConfiguration getConfiguration(); >+ >+ public CDOSessionProtocol getSessionProtocol(); >+ >+ /** >+ * @since 3.0 >+ */ >+ public void setSessionProtocol(CDOSessionProtocol sessionProtocol); >+ >+ public InternalCDOPackageRegistry getPackageRegistry(); >+ >+ /** >+ * @since 3.0 >+ */ >+ public InternalCDORevisionManager getRevisionManager(); >+ >+ public void setExceptionHandler(CDOSession.ExceptionHandler exceptionHandler); >+ >+ /** >+ * @since 3.0 >+ */ >+ public void setFetchRuleManager(CDOFetchRuleManager fetchRuleManager); >+ >+ /** >+ * @since 3.0 >+ */ >+ public void setRepositoryInfo(CDORepositoryInfo repositoryInfo); >+ >+ /** >+ * @since 3.0 >+ */ >+ public InternalCDORemoteSessionManager getRemoteSessionManager(); >+ >+ /** >+ * @since 3.0 >+ */ >+ public void setRemoteSessionManager( >+ InternalCDORemoteSessionManager remoteSessionManager); >+ >+ /** >+ * @since 3.0 >+ */ >+ public void setSessionID(int sessionID); >+ >+ public void setUserID(String userID); >+ >+ /** >+ * @since 3.0 >+ */ >+ public void setLastUpdateTime(long lastUpdateTime); >+ >+ public void viewDetached(InternalCDOView view); >+ >+ /** >+ * @since 3.0 >+ */ >+ public Object resolveElementProxy(CDORevision revision, >+ EStructuralFeature feature, int accessIndex, int serverIndex); >+ >+ /** >+ * @since 3.0 >+ */ >+ public Object getCommitLock(); >+ >+ public void handleCommitNotification(long timeStamp, >+ Collection<CDOPackageUnit> newPackageUnits, >+ Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects, >+ Collection<CDORevisionDelta> deltas, InternalCDOView excludedView); >+ >+ public void handleSyncResponse(long timestamp, >+ Collection<CDOPackageUnit> newPackageUnits, >+ Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects); >+ >+ /** >+ * In some cases we need to sync without propagating event. Lock is a good >+ * example. >+ * >+ * @since 3.0 >+ */ >+ public void reviseRevisions(final long timeStamp, >+ Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects, >+ InternalCDOView excludedView); >+ >+ /** >+ *@author Juan Pedro Silva >+ */ >+ public IRWLockManager<CDOSessionImpl, Object> getLockmanager(); > } >Index: src/org/eclipse/emf/cdo/session/CDOSession.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java,v >retrieving revision 1.19 >diff -u -r1.19 CDOSession.java >--- src/org/eclipse/emf/cdo/session/CDOSession.java 30 Sep 2009 17:51:15 -0000 1.19 >+++ src/org/eclipse/emf/cdo/session/CDOSession.java 16 Nov 2009 17:37:34 -0000 >@@ -24,6 +24,9 @@ > import org.eclipse.emf.cdo.view.CDOFetchRuleManager; > import org.eclipse.emf.cdo.view.CDOView; > >+import org.eclipse.emf.internal.cdo.session.CDOSessionImpl; >+ >+import org.eclipse.net4j.util.concurrent.IRWLockManager; > import org.eclipse.net4j.util.container.IContainer; > import org.eclipse.net4j.util.options.IOptionsEvent; > >@@ -45,211 +48,235 @@ > * <li> {@link CDOSession#getViews() View management} > * </ul> > * <p> >- * Note that, in order to retrieve, access and store {@link EObject objects} a {@link CDOView view} is needed. The >- * various <code>openXYZ</code> methods are provided for this purpose. >+ * Note that, in order to retrieve, access and store {@link EObject objects} a >+ * {@link CDOView view} is needed. The various <code>openXYZ</code> methods are >+ * provided for this purpose. > * > * @author Eike Stepper > * @since 2.0 > */ >-public interface CDOSession extends CDOCommonSession, IContainer<CDOView> >-{ >- /** >- * @since 3.0 >- */ >- public CDOSessionConfiguration getConfiguration(); >- >- /** >- * Returns the EMF {@link EPackage.Registry package registry} that is used by all {@link EObject objects} of all >- * {@link CDOView views} of this session. >- * <p> >- * This registry is managed by the {@link CDOPackageUnit package unit manager} of this session. All {@link EPackage >- * packages} that are already persisted in the repository of this session are automatically registered with this >- * registry. New packages can be locally registered with this registry and are committed to the repository through a >- * {@link CDOTransaction transaction}, if needed. >- * >- * @see #getPackageUnitManager() >- */ >- public CDOPackageRegistry getPackageRegistry(); >- >- /** >- * Returns the CDO {@link CDORevisionManager revision manager} that manages the {@link CDORevision revisions} of the >- * repository of this session. >- * >- * @since 3.0 >- */ >- public CDORevisionManager getRevisionManager(); >- >- /** >- * @since 3.0 >- */ >- public CDOFetchRuleManager getFetchRuleManager(); >- >- /** >- * Returns the CDO {@link CDORemoteSessionManager remote session manager} that keeps track of the other remote >- * sessions served by the repository of this local session. >- */ >- public CDORemoteSessionManager getRemoteSessionManager(); >- >- public ExceptionHandler getExceptionHandler(); >- >- /** >- * Opens and returns a new {@link CDOTransaction transaction} on the given EMF {@link ResourceSet resource set}. >- * >- * @see #openTransaction() >- */ >- public CDOTransaction openTransaction(ResourceSet resourceSet); >- >- /** >- * Opens and returns a new {@link CDOTransaction transaction} on a new EMF {@link ResourceSet resource set}. >- * <p> >- * Same as calling <code>openTransaction(new ResourceSetImpl())</code>. >- * >- * @see #openTransaction(ResourceSet) >- */ >- public CDOTransaction openTransaction(); >- >- /** >- * Opens and returns a new {@link CDOView view} on the given EMF {@link ResourceSet resource set}. >- * >- * @see #openView() >- */ >- public CDOView openView(ResourceSet resourceSet); >- >- /** >- * Opens and returns a new {@link CDOView view} on a new EMF {@link ResourceSet resource set}. >- * <p> >- * Same as calling <code>openView(new ResourceSetImpl())</code>. >- * >- * @see #openView(ResourceSet) >- */ >- public CDOView openView(); >- >- /** >- * Opens and returns a new {@link CDOAudit audit} on the given EMF {@link ResourceSet resource set}. >- * >- * @see #openAudit() >- */ >- public CDOAudit openAudit(ResourceSet resourceSet, long timeStamp); >- >- /** >- * Opens and returns a new {@link CDOAudit audit} on a new EMF {@link ResourceSet resource set}. >- * <p> >- * Same as calling <code>openAudit(new ResourceSetImpl(), timeStamp)</code>. >- * >- * @see #openAudit(ResourceSet, long) >- */ >- public CDOAudit openAudit(long timeStamp); >- >- /** >- * Returns an array of all open {@link CDOView views}, {@link CDOTransaction transactions} and {@link CDOAudit audits} >- * of this session. >- * >- * @see #openView() >- * @see #openTransaction() >- * @see #openAudit(long) >- */ >- public CDOView[] getViews(); >- >- /** >- * Refreshes the objects cache. >- * <p> >- * Takes CDOID and version of all objects in the cache and sends it to the server. {@link CDOTimeStampContext} >- * contains informations of which objects changed/detached. The collection is ordered by timestamp. In the case where >- * {@link #isPassiveUpdateEnabled()} is <code>true</code>, this method will return immediately without doing anything. >- */ >- public Collection<CDOTimeStampContext> refresh(); >- >- /** >- * Returns the time stamp of the last commit operation. May not be accurate if >- * {@link Options#isPassiveUpdateEnabled() passive updates} are disabled. >- * >- * @since 3.0 >- */ >- public long getLastUpdateTime(); >- >- /** >- * Blocks the calling thread until a commit operation with the given time stamp or higher has occured. >- * >- * @since 3.0 >- */ >- public void waitForUpdate(long updateTime); >- >- /** >- * Blocks the calling thread until a commit operation with the given time stamp or higher has occured or the given >- * timeout has expired. >- * >- * @return <code>true</code> if the specified commit operation has occured within the given timeout period, >- * <code>false</code> otherwise. >- * @since 3.0 >- */ >- public boolean waitForUpdate(long updateTime, long timeoutMillis); >- >- /** >- * Returns the {@link Options options} of this session. >- */ >- public Options options(); >- >- /** >- * Returns an instance of {@link CDORepositoryInfo} that describes the model repository this {@link CDOSession >- * session} is connected to. >- * >- * @since 3.0 >- */ >- public CDORepositoryInfo getRepositoryInfo(); >- >- /** >- * @author Simon McDuff >- */ >- public interface Options extends CDOCommonSession.Options >- { >- public boolean isGeneratedPackageEmulationEnabled(); >- >- public void setGeneratedPackageEmulationEnabled(boolean generatedPackageEmulationEnabled); >- >- /** >- * The {@link CDOCollectionLoadingPolicy collection loading policy} of this {@link CDOSession session} controls how >- * a list gets populated. By default, when an object is fetched, all its elements are filled with the proper values. >- * <p> >- * This could be time-consuming, especially if the reference list does not need to be accessed. In CDO it is >- * possible to partially load collections. The default list implementation that is shipped with CDO makes a >- * distinction between the two following situations: >- * <ol> >- * <li>How many CDOIDs to fill when an object is loaded for the first time; >- * <li>Which elements to fill with CDOIDs when the accessed element is not yet filled. >- * </ol> >- * Example: >- * <p> >- * <code>CDOUtil.createCollectionLoadingPolicy(initialElements, subsequentElements);</code> >- * <p> >- * The user can also provide its own implementation of the CDOCollectionLoadingPolicy interface. >- */ >- public CDOCollectionLoadingPolicy getCollectionLoadingPolicy(); >- >- /** >- * Returns the CDOCollectionLoadingPolicy currently being used by this session. >- */ >- public void setCollectionLoadingPolicy(CDOCollectionLoadingPolicy policy); >- >- /** >- * @author Eike Stepper >- */ >- public interface GeneratedPackageEmulationEvent extends IOptionsEvent >- { >- } >- >- /** >- * @author Eike Stepper >- */ >- public interface CollectionLoadingPolicyEvent extends IOptionsEvent >- { >- } >- } >- >- /** >- * @author Eike Stepper >- */ >- public interface ExceptionHandler >- { >- public void handleException(CDOSession session, int attempt, Exception exception) throws Exception; >- } >+public interface CDOSession extends CDOCommonSession, IContainer<CDOView> { >+ /** >+ * @since 3.0 >+ */ >+ public CDOSessionConfiguration getConfiguration(); >+ >+ /** >+ * Returns the EMF {@link EPackage.Registry package registry} that is used >+ * by all {@link EObject objects} of all {@link CDOView views} of this >+ * session. >+ * <p> >+ * This registry is managed by the {@link CDOPackageUnit package unit >+ * manager} of this session. All {@link EPackage packages} that are already >+ * persisted in the repository of this session are automatically registered >+ * with this registry. New packages can be locally registered with this >+ * registry and are committed to the repository through a >+ * {@link CDOTransaction transaction}, if needed. >+ * >+ * @see #getPackageUnitManager() >+ */ >+ public CDOPackageRegistry getPackageRegistry(); >+ >+ /** >+ * Returns the CDO {@link CDORevisionManager revision manager} that manages >+ * the {@link CDORevision revisions} of the repository of this session. >+ * >+ * @since 3.0 >+ */ >+ public CDORevisionManager getRevisionManager(); >+ >+ /** >+ * @since 3.0 >+ */ >+ public CDOFetchRuleManager getFetchRuleManager(); >+ >+ /** >+ * Returns the CDO {@link CDORemoteSessionManager remote session manager} >+ * that keeps track of the other remote sessions served by the repository of >+ * this local session. >+ */ >+ public CDORemoteSessionManager getRemoteSessionManager(); >+ >+ public ExceptionHandler getExceptionHandler(); >+ >+ /** >+ * Opens and returns a new {@link CDOTransaction transaction} on the given >+ * EMF {@link ResourceSet resource set}. >+ * >+ * @see #openTransaction() >+ */ >+ public CDOTransaction openTransaction(ResourceSet resourceSet); >+ >+ /** >+ * Opens and returns a new {@link CDOTransaction transaction} on a new EMF >+ * {@link ResourceSet resource set}. >+ * <p> >+ * Same as calling <code>openTransaction(new ResourceSetImpl())</code>. >+ * >+ * @see #openTransaction(ResourceSet) >+ */ >+ public CDOTransaction openTransaction(); >+ >+ /** >+ * Opens and returns a new {@link CDOView view} on the given EMF >+ * {@link ResourceSet resource set}. >+ * >+ * @see #openView() >+ */ >+ public CDOView openView(ResourceSet resourceSet); >+ >+ /** >+ * Opens and returns a new {@link CDOView view} on a new EMF >+ * {@link ResourceSet resource set}. >+ * <p> >+ * Same as calling <code>openView(new ResourceSetImpl())</code>. >+ * >+ * @see #openView(ResourceSet) >+ */ >+ public CDOView openView(); >+ >+ /** >+ * Opens and returns a new {@link CDOAudit audit} on the given EMF >+ * {@link ResourceSet resource set}. >+ * >+ * @see #openAudit() >+ */ >+ public CDOAudit openAudit(ResourceSet resourceSet, long timeStamp); >+ >+ /** >+ * Opens and returns a new {@link CDOAudit audit} on a new EMF >+ * {@link ResourceSet resource set}. >+ * <p> >+ * Same as calling <code>openAudit(new ResourceSetImpl(), timeStamp)</code>. >+ * >+ * @see #openAudit(ResourceSet, long) >+ */ >+ public CDOAudit openAudit(long timeStamp); >+ >+ /** >+ * Returns an array of all open {@link CDOView views}, >+ * {@link CDOTransaction transactions} and {@link CDOAudit audits} of this >+ * session. >+ * >+ * @see #openView() >+ * @see #openTransaction() >+ * @see #openAudit(long) >+ */ >+ public CDOView[] getViews(); >+ >+ /** >+ * Refreshes the objects cache. >+ * <p> >+ * Takes CDOID and version of all objects in the cache and sends it to the >+ * server. {@link CDOTimeStampContext} contains informations of which >+ * objects changed/detached. The collection is ordered by timestamp. In the >+ * case where {@link #isPassiveUpdateEnabled()} is <code>true</code>, this >+ * method will return immediately without doing anything. >+ */ >+ public Collection<CDOTimeStampContext> refresh(); >+ >+ /** >+ * Returns the time stamp of the last commit operation. May not be accurate >+ * if {@link Options#isPassiveUpdateEnabled() passive updates} are disabled. >+ * >+ * @since 3.0 >+ */ >+ public long getLastUpdateTime(); >+ >+ /** >+ * Blocks the calling thread until a commit operation with the given time >+ * stamp or higher has occured. >+ * >+ * @since 3.0 >+ */ >+ public void waitForUpdate(long updateTime); >+ >+ /** >+ * Blocks the calling thread until a commit operation with the given time >+ * stamp or higher has occured or the given timeout has expired. >+ * >+ * @return <code>true</code> if the specified commit operation has occured >+ * within the given timeout period, <code>false</code> otherwise. >+ * @since 3.0 >+ */ >+ public boolean waitForUpdate(long updateTime, long timeoutMillis); >+ >+ /** >+ * Returns the {@link Options options} of this session. >+ */ >+ public Options options(); >+ >+ /** >+ * Returns an instance of {@link CDORepositoryInfo} that describes the model >+ * repository this {@link CDOSession session} is connected to. >+ * >+ * @since 3.0 >+ */ >+ public CDORepositoryInfo getRepositoryInfo(); >+ >+ /** >+ * @author Simon McDuff >+ */ >+ public interface Options extends CDOCommonSession.Options { >+ public boolean isGeneratedPackageEmulationEnabled(); >+ >+ public void setGeneratedPackageEmulationEnabled( >+ boolean generatedPackageEmulationEnabled); >+ >+ /** >+ * The {@link CDOCollectionLoadingPolicy collection loading policy} of >+ * this {@link CDOSession session} controls how a list gets populated. >+ * By default, when an object is fetched, all its elements are filled >+ * with the proper values. >+ * <p> >+ * This could be time-consuming, especially if the reference list does >+ * not need to be accessed. In CDO it is possible to partially load >+ * collections. The default list implementation that is shipped with CDO >+ * makes a distinction between the two following situations: >+ * <ol> >+ * <li>How many CDOIDs to fill when an object is loaded for the first >+ * time; >+ * <li>Which elements to fill with CDOIDs when the accessed element is >+ * not yet filled. >+ * </ol> >+ * Example: >+ * <p> >+ * <code>CDOUtil.createCollectionLoadingPolicy(initialElements, subsequentElements);</code> >+ * <p> >+ * The user can also provide its own implementation of the >+ * CDOCollectionLoadingPolicy interface. >+ */ >+ public CDOCollectionLoadingPolicy getCollectionLoadingPolicy(); >+ >+ /** >+ * Returns the CDOCollectionLoadingPolicy currently being used by this >+ * session. >+ */ >+ public void setCollectionLoadingPolicy(CDOCollectionLoadingPolicy policy); >+ >+ /** >+ * @author Eike Stepper >+ */ >+ public interface GeneratedPackageEmulationEvent extends IOptionsEvent { >+ } >+ >+ /** >+ * @author Eike Stepper >+ */ >+ public interface CollectionLoadingPolicyEvent extends IOptionsEvent { >+ } >+ } >+ >+ /** >+ * @author Eike Stepper >+ */ >+ public interface ExceptionHandler { >+ public void handleException(CDOSession session, int attempt, >+ Exception exception) throws Exception; >+ } >+ >+ /** >+ *@author Juan Pedro Silva >+ */ >+ public IRWLockManager<CDOSessionImpl, Object> getLockmanager(); > } >Index: src/org/eclipse/emf/cdo/view/RemoteLockEvent.java >=================================================================== >RCS file: src/org/eclipse/emf/cdo/view/RemoteLockEvent.java >diff -N src/org/eclipse/emf/cdo/view/RemoteLockEvent.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/emf/cdo/view/RemoteLockEvent.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,30 @@ >+/** >+ * Copyright (c) 2004 - 2009 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.view; >+ >+import org.eclipse.net4j.util.event.INotifier; >+ >+/** >+ * @author Eike Stepper >+ */ >+public class RemoteLockEvent implements CDOViewEvent { >+ public RemoteLockEvent(INotifier source) { >+ super(); >+ this.source = (CDOView) source; >+ } >+ >+ private CDOView source; >+ >+ public CDOView getSource() { >+ return source; >+ } >+ >+} >Index: src/org/eclipse/emf/cdo/view/RemoteLockReleasedEvent.java >=================================================================== >RCS file: src/org/eclipse/emf/cdo/view/RemoteLockReleasedEvent.java >diff -N src/org/eclipse/emf/cdo/view/RemoteLockReleasedEvent.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/emf/cdo/view/RemoteLockReleasedEvent.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,22 @@ >+/** >+ * Copyright (c) 2004 - 2009 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.view; >+ >+import org.eclipse.net4j.util.event.INotifier; >+ >+/** >+ * @author Juan Pedro Silva >+ */ >+public class RemoteLockReleasedEvent extends RemoteLockEvent { >+ public RemoteLockReleasedEvent(INotifier source) { >+ super(source); >+ } >+} >Index: src/org/eclipse/emf/cdo/view/RemoteLockAcquiredEvent.java >=================================================================== >RCS file: src/org/eclipse/emf/cdo/view/RemoteLockAcquiredEvent.java >diff -N src/org/eclipse/emf/cdo/view/RemoteLockAcquiredEvent.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/emf/cdo/view/RemoteLockAcquiredEvent.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,23 @@ >+/** >+ * Copyright (c) 2004 - 2009 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.view; >+ >+import org.eclipse.net4j.util.event.INotifier; >+ >+/** >+ * @author Juan Pedro Silva >+ */ >+public class RemoteLockAcquiredEvent extends RemoteLockEvent { >+ >+ public RemoteLockAcquiredEvent(INotifier source) { >+ super(source); >+ } >+} >#P org.eclipse.emf.cdo.server >Index: src/org/eclipse/emf/cdo/spi/server/InternalSessionManager.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalSessionManager.java,v >retrieving revision 1.7 >diff -u -r1.7 InternalSessionManager.java >--- src/org/eclipse/emf/cdo/spi/server/InternalSessionManager.java 11 Aug 2009 14:51:55 -0000 1.7 >+++ src/org/eclipse/emf/cdo/spi/server/InternalSessionManager.java 16 Nov 2009 17:37:43 -0000 >@@ -15,9 +15,11 @@ > import org.eclipse.emf.cdo.common.model.CDOPackageUnit; > import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta; > import org.eclipse.emf.cdo.server.ISessionManager; >+import org.eclipse.emf.cdo.server.IView; > import org.eclipse.emf.cdo.server.SessionCreationException; > import org.eclipse.emf.cdo.session.remote.CDORemoteSessionMessage; > >+import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType; > import org.eclipse.net4j.util.security.IUserManager; > > import java.util.List; >@@ -51,4 +53,8 @@ > public void handleRemoteSessionNotification(byte opcode, InternalSession excludedSession); > > public List<Integer> sendMessage(InternalSession sender, CDORemoteSessionMessage message, int[] recipients); >+ >+ public List<Integer> sendRemoteLock(IView view, List<CDOID> lockedObjects, LockType lockType); >+ >+ public List<Integer> sendRemoteUnLock(IView view, List<CDOID> lockedObjects, LockType lockType); > } >Index: src/org/eclipse/emf/cdo/spi/server/ISessionProtocol.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/ISessionProtocol.java,v >retrieving revision 1.4 >diff -u -r1.4 ISessionProtocol.java >--- src/org/eclipse/emf/cdo/spi/server/ISessionProtocol.java 18 Jul 2009 10:42:57 -0000 1.4 >+++ src/org/eclipse/emf/cdo/spi/server/ISessionProtocol.java 16 Nov 2009 17:37:43 -0000 >@@ -17,8 +17,11 @@ > import org.eclipse.emf.cdo.common.protocol.CDOProtocol; > import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta; > import org.eclipse.emf.cdo.server.ISession; >+import org.eclipse.emf.cdo.server.IView; > import org.eclipse.emf.cdo.session.remote.CDORemoteSessionMessage; > >+import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType; >+ > import java.util.List; > > /** >@@ -35,4 +38,8 @@ > public void sendRemoteSessionNotification(byte opcode, ISession session); > > public boolean sendRemoteMessageNotification(InternalSession sender, CDORemoteSessionMessage message); >+ >+ public void sendRemoteLockNotification(IView sender, List<CDOID> lockedObjects, LockType lockType); >+ >+ public void sendRemoteUnLockNotification(IView sender, List<CDOID> lockedObjects, LockType lockType); > } >Index: src/org/eclipse/emf/cdo/internal/server/SessionManager.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/SessionManager.java,v >retrieving revision 1.41 >diff -u -r1.41 SessionManager.java >--- src/org/eclipse/emf/cdo/internal/server/SessionManager.java 6 Nov 2009 18:07:50 -0000 1.41 >+++ src/org/eclipse/emf/cdo/internal/server/SessionManager.java 16 Nov 2009 17:37:43 -0000 >@@ -20,6 +20,7 @@ > import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta; > import org.eclipse.emf.cdo.internal.server.bundle.OM; > import org.eclipse.emf.cdo.server.ISession; >+import org.eclipse.emf.cdo.server.IView; > import org.eclipse.emf.cdo.server.SessionCreationException; > import org.eclipse.emf.cdo.session.remote.CDORemoteSessionMessage; > import org.eclipse.emf.cdo.spi.server.ISessionProtocol; >@@ -27,6 +28,7 @@ > import org.eclipse.emf.cdo.spi.server.InternalSession; > import org.eclipse.emf.cdo.spi.server.InternalSessionManager; > >+import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType; > import org.eclipse.net4j.util.container.Container; > import org.eclipse.net4j.util.lifecycle.LifecycleUtil; > import org.eclipse.net4j.util.om.trace.ContextTracer; >@@ -391,4 +393,38 @@ > > super.doDeactivate(); > } >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ public List<Integer> sendRemoteLock(IView sender, List<CDOID> lockedObjects, LockType lockType) >+ { >+ List<Integer> result = new ArrayList<Integer>(); >+ for (InternalSession recipient : getSessions()) >+ { >+ if (recipient != null && recipient.hasListeners()) >+ { >+ recipient.getProtocol().sendRemoteLockNotification(sender, lockedObjects, lockType); >+ result.add(recipient.getSessionID()); >+ } >+ } >+ return result; >+ } >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ public List<Integer> sendRemoteUnLock(IView sender, List<CDOID> lockedObjects, LockType lockType) >+ { >+ List<Integer> result = new ArrayList<Integer>(); >+ for (InternalSession recipient : getSessions()) >+ { >+ if (recipient != null && recipient.hasListeners()) >+ { >+ recipient.getProtocol().sendRemoteUnLockNotification(sender, lockedObjects, lockType); >+ result.add(recipient.getSessionID()); >+ } >+ } >+ return result; >+ } > } >Index: src/org/eclipse/emf/cdo/internal/server/LockManager.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/LockManager.java,v >retrieving revision 1.7 >diff -u -r1.7 LockManager.java >--- src/org/eclipse/emf/cdo/internal/server/LockManager.java 7 Jul 2009 06:48:14 -0000 1.7 >+++ src/org/eclipse/emf/cdo/internal/server/LockManager.java 16 Nov 2009 17:37:43 -0000 >@@ -17,6 +17,9 @@ > import org.eclipse.emf.cdo.server.IView; > import org.eclipse.emf.cdo.spi.server.InternalLockManager; > import org.eclipse.emf.cdo.spi.server.InternalRepository; >+import org.eclipse.emf.cdo.view.RemoteLockAcquiredEvent; >+import org.eclipse.emf.cdo.view.RemoteLockEvent; >+import org.eclipse.emf.cdo.view.RemoteLockReleasedEvent; > > import org.eclipse.net4j.util.ReflectUtil.ExcludeFromDump; > import org.eclipse.net4j.util.concurrent.RWLockManager; >@@ -91,4 +94,15 @@ > > super.doDeactivate(); > } >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ protected void notify(RemoteLockEvent event) >+ { >+ if (event instanceof RemoteLockAcquiredEvent || event instanceof RemoteLockReleasedEvent) // Redundant >+ { >+ fireEvent(event, registeredLockListeners.get()); >+ } >+ } > } >Index: src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedServerSessionProtocol.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedServerSessionProtocol.java,v >retrieving revision 1.8 >diff -u -r1.8 EmbeddedServerSessionProtocol.java >--- src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedServerSessionProtocol.java 18 Jul 2009 23:00:48 -0000 1.8 >+++ src/org/eclipse/emf/cdo/internal/server/embedded/EmbeddedServerSessionProtocol.java 16 Nov 2009 17:37:43 -0000 >@@ -16,11 +16,13 @@ > import org.eclipse.emf.cdo.common.protocol.CDOAuthenticationResult; > import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta; > import org.eclipse.emf.cdo.server.ISession; >+import org.eclipse.emf.cdo.server.IView; > import org.eclipse.emf.cdo.session.remote.CDORemoteSessionMessage; > import org.eclipse.emf.cdo.spi.server.ISessionProtocol; > import org.eclipse.emf.cdo.spi.server.InternalRepository; > import org.eclipse.emf.cdo.spi.server.InternalSession; > >+import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType; > import org.eclipse.net4j.util.lifecycle.Lifecycle; > > import java.util.Arrays; >@@ -81,4 +83,14 @@ > { > throw new UnsupportedOperationException(); > } >+ >+ public void sendRemoteLockNotification(IView sender, List<CDOID> lockedObjects, LockType lockType) >+ { >+ throw new UnsupportedOperationException(); >+ } >+ >+ public void sendRemoteUnLockNotification(IView sender, List<CDOID> lockedObjects, LockType lockType) >+ { >+ throw new UnsupportedOperationException(); >+ } > } >#P org.eclipse.emf.cdo.common >Index: src/org/eclipse/emf/cdo/common/protocol/CDOProtocolConstants.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/protocol/CDOProtocolConstants.java,v >retrieving revision 1.15 >diff -u -r1.15 CDOProtocolConstants.java >--- src/org/eclipse/emf/cdo/common/protocol/CDOProtocolConstants.java 27 Jul 2009 07:09:40 -0000 1.15 >+++ src/org/eclipse/emf/cdo/common/protocol/CDOProtocolConstants.java 16 Nov 2009 17:37:45 -0000 >@@ -92,6 +92,16 @@ > public static final short SIGNAL_REMOTE_SESSION_NOTIFICATION = 32; > > // ////////////////////////////////////////////////////////////////////// >+ // Lock Signal IDs >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ public static final short SIGNAL_REMOTE_LOCK = 35; >+ >+ public static final short SIGNAL_REMOTE_UNLOCK = 36; >+ >+ // ////////////////////////////////////////////////////////////////////// > // Session Management > > public static final int ERROR_REPOSITORY_NOT_FOUND = -1; >#P org.eclipse.emf.cdo.net4j >Index: src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java,v >retrieving revision 1.13 >diff -u -r1.13 CDOClientProtocol.java >--- src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java 23 Sep 2009 17:19:24 -0000 1.13 >+++ src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java 16 Nov 2009 17:37:47 -0000 >@@ -219,11 +219,35 @@ > { > throw runtimeException; > } >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ try >+ { >+ notifyLocks(view, objects, timeout, lockType); >+ } >+ catch (Exception ex) >+ { >+ ex.printStackTrace(); >+ } > } > > public void unlockObjects(CDOView view, Collection<? extends CDOObject> objects, LockType lockType) > { > send(new UnlockObjectsRequest(this, view, objects, lockType)); >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ try >+ { >+ send(new RemoteUnLockObjectsIndicationRequest(this, view, objects, lockType)); >+ } >+ catch (Exception ex) >+ { >+ ex.printStackTrace(); >+ } > } > > public boolean isObjectLocked(CDOView view, CDOObject object, LockType lockType, boolean byOthers) >@@ -288,6 +312,18 @@ > case CDOProtocolConstants.SIGNAL_REMOTE_MESSAGE_NOTIFICATION: > return new RemoteMessageNotificationIndication(this); > >+ /** >+ * @author Juan Pedro Silva >+ */ >+ case CDOProtocolConstants.SIGNAL_REMOTE_LOCK: >+ return new RemoteLockObjectsIndication(this); >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ case CDOProtocolConstants.SIGNAL_REMOTE_UNLOCK: >+ return new RemoteLockReleasedIndication(this); >+ > default: > return super.createSignalReactor(signalID); > } >@@ -347,4 +383,46 @@ > REVISION_LOADING.stop(request); > } > } >+ >+ /** >+ * @author Juan Pedro Silva >+ * @throws InterruptedException >+ */ >+ private void notifyLocks(CDOView view, Map<CDOID, CDOIDAndVersion> objects, long timeout, LockType lockType) >+ throws InterruptedException >+ { >+ InterruptedException interruptedException = null; >+ RuntimeException runtimeException = null; >+ try >+ { >+ new RemoteLockObjectsIndicationRequest(this, view, objects, view.getSession().options() >+ .getCollectionLoadingPolicy().getInitialChunkSize(), 1000, lockType).send(); >+ } >+ catch (RemoteException ex) >+ { >+ if (ex.getCause() instanceof RuntimeException) >+ { >+ runtimeException = (RuntimeException)ex.getCause(); >+ } >+ else if (ex.getCause() instanceof InterruptedException) >+ { >+ interruptedException = (InterruptedException)ex.getCause(); >+ } >+ } >+ catch (Exception ex) >+ { >+ ex.printStackTrace(); >+ } >+ >+ if (interruptedException != null) >+ { >+ throw interruptedException; >+ } >+ >+ if (runtimeException != null) >+ { >+ throw runtimeException; >+ } >+ } >+ > } >Index: src/org/eclipse/emf/cdo/internal/net4j/CDONet4jSessionImpl.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/CDONet4jSessionImpl.java,v >retrieving revision 1.2 >diff -u -r1.2 CDONet4jSessionImpl.java >--- src/org/eclipse/emf/cdo/internal/net4j/CDONet4jSessionImpl.java 11 Jul 2009 10:09:34 -0000 1.2 >+++ src/org/eclipse/emf/cdo/internal/net4j/CDONet4jSessionImpl.java 16 Nov 2009 17:37:47 -0000 >@@ -23,9 +23,12 @@ > import org.eclipse.emf.internal.cdo.session.CDOSessionImpl; > > import org.eclipse.net4j.signal.ISignalProtocol; >+import org.eclipse.net4j.util.event.IListener; > > import org.eclipse.emf.spi.cdo.CDOSessionProtocol; > >+import java.util.Collection; >+ > /** > * @author Eike Stepper > */ >@@ -111,4 +114,14 @@ > this.progressInterval = progressInterval; > } > } >+ >+ public void registerLockListener(Collection<IListener> lockListeners) >+ { >+ throw new UnsupportedOperationException(); >+ } >+ >+ public void unRegisterLockListener(Collection<IListener> lockListeners) >+ { >+ throw new UnsupportedOperationException(); >+ } > } >Index: src/org/eclipse/emf/cdo/internal/net4j/protocol/RemoteLockObjectsIndicationRequest.java >=================================================================== >RCS file: src/org/eclipse/emf/cdo/internal/net4j/protocol/RemoteLockObjectsIndicationRequest.java >diff -N src/org/eclipse/emf/cdo/internal/net4j/protocol/RemoteLockObjectsIndicationRequest.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/emf/cdo/internal/net4j/protocol/RemoteLockObjectsIndicationRequest.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,82 @@ >+/** >+ * Copyright (c) 2004 - 2009 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.internal.net4j.protocol; >+ >+import org.eclipse.emf.cdo.common.id.CDOID; >+import org.eclipse.emf.cdo.common.id.CDOIDAndVersion; >+import org.eclipse.emf.cdo.common.io.CDODataInput; >+import org.eclipse.emf.cdo.common.io.CDODataOutput; >+import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants; >+import org.eclipse.emf.cdo.internal.net4j.bundle.OM; >+import org.eclipse.emf.cdo.transaction.CDOTimeStampContext; >+import org.eclipse.emf.cdo.view.CDOView; >+ >+import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType; >+import org.eclipse.net4j.util.om.trace.ContextTracer; >+ >+import java.io.IOException; >+import java.util.Collection; >+import java.util.Map; >+ >+/** >+ * @author Juan Pedro Silva >+ * @see org.eclipse.emf.cdo.internal.net4j.protocol.LockObjectsRequest >+ */ >+public class RemoteLockObjectsIndicationRequest extends AbstractSyncRevisionsRequest >+{ >+ private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_PROTOCOL, LockObjectsRequest.class); >+ >+ private CDOView view; >+ >+ private LockType lockType; >+ >+ private long timeout; >+ >+ public RemoteLockObjectsIndicationRequest(CDOClientProtocol protocol, CDOView view, >+ Map<CDOID, CDOIDAndVersion> idAndVersions, int referenceChunk, long timeout, LockType lockType) >+ { >+ super(protocol, CDOProtocolConstants.SIGNAL_REMOTE_LOCK, idAndVersions, referenceChunk); >+ this.view = view; >+ >+ this.timeout = timeout; >+ this.lockType = lockType; >+ } >+ >+ @Override >+ protected void requesting(CDODataOutput out) throws IOException >+ { >+ super.requesting(out); >+ out.writeInt(view.getViewID()); >+ out.writeCDOLockType(lockType); >+ out.writeLong(timeout); >+ >+ if (TRACER.isEnabled()) >+ { >+ TRACER.format("Locking of type {0} requested for view {1} with timeout {2}", //$NON-NLS-1$ >+ lockType == LockType.READ ? "read" : "write", view.getViewID(), timeout); //$NON-NLS-1$ //$NON-NLS-2$ >+ } >+ } >+ >+ @Override >+ protected Collection<CDOTimeStampContext> confirming(CDODataInput in) throws IOException >+ { >+ // Collection<CDOTimeStampContext> contexts = super.confirming(in); >+ // for (CDOTimeStampContext timestampContext : contexts) >+ // { >+ // getSession().reviseRevisions(timestampContext.getTimeStamp(), timestampContext.getDirtyObjects(), >+ // timestampContext.getDetachedObjects(), null); >+ // ((InternalCDOView)view).handleInvalidationWithoutNotification(timestampContext.getDirtyObjects(), >+ // timestampContext.getDetachedObjects(), new HashSet<InternalCDOObject>(), new HashSet<InternalCDOObject>()); >+ // } >+ >+ return null;// contexts; >+ } >+} >Index: src/org/eclipse/emf/cdo/internal/net4j/protocol/RemoteUnLockObjectsIndicationRequest.java >=================================================================== >RCS file: src/org/eclipse/emf/cdo/internal/net4j/protocol/RemoteUnLockObjectsIndicationRequest.java >diff -N src/org/eclipse/emf/cdo/internal/net4j/protocol/RemoteUnLockObjectsIndicationRequest.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/emf/cdo/internal/net4j/protocol/RemoteUnLockObjectsIndicationRequest.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,89 @@ >+/*************************************************************************** >+ * Copyright (c) 2004 - 2009 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: >+ * Simon McDuff - initial API and implementation >+ **************************************************************************/ >+package org.eclipse.emf.cdo.internal.net4j.protocol; >+ >+import org.eclipse.emf.cdo.CDOObject; >+import org.eclipse.emf.cdo.common.io.CDODataInput; >+import org.eclipse.emf.cdo.common.io.CDODataOutput; >+import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants; >+import org.eclipse.emf.cdo.internal.net4j.bundle.OM; >+import org.eclipse.emf.cdo.view.CDOView; >+ >+import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType; >+import org.eclipse.net4j.util.om.trace.ContextTracer; >+ >+import java.io.IOException; >+import java.util.Collection; >+ >+/** >+ * @author Juan Pedro Silva >+ * @see org.eclipse.emf.cdo.internal.net4j.protocol.UnlockObjectsRequest >+ */ >+public class RemoteUnLockObjectsIndicationRequest extends CDOClientRequest<Boolean> >+{ >+ private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_PROTOCOL, UnlockObjectsRequest.class); >+ >+ private CDOView view; >+ >+ private Collection<? extends CDOObject> objects; >+ >+ private LockType lockType; >+ >+ public RemoteUnLockObjectsIndicationRequest(CDOClientProtocol protocol, CDOView view, >+ Collection<? extends CDOObject> objects, LockType lockType) >+ { >+ super(protocol, CDOProtocolConstants.SIGNAL_REMOTE_UNLOCK); >+ this.view = view; >+ this.objects = objects; >+ this.lockType = lockType; >+ } >+ >+ @Override >+ protected void requesting(CDODataOutput out) throws IOException >+ { >+ out.writeInt(view.getViewID()); >+ out.writeCDOLockType(lockType); >+ if (objects == null) >+ { >+ if (TRACER.isEnabled()) >+ { >+ TRACER.format("Unlocking all objects for view {0}", view.getViewID()); //$NON-NLS-1$ >+ } >+ >+ out.writeInt(CDOProtocolConstants.RELEASE_ALL_LOCKS); >+ } >+ else >+ { >+ if (TRACER.isEnabled()) >+ { >+ TRACER.format("Unlocking of type {0} requested for view {1}", lockType == LockType.READ ? "read" //$NON-NLS-1$ //$NON-NLS-2$ >+ : "write", view.getViewID()); //$NON-NLS-1$ >+ } >+ >+ out.writeInt(objects.size()); >+ for (CDOObject object : objects) >+ { >+ if (TRACER.isEnabled()) >+ { >+ TRACER.format("Unlocking requested for objects {0}", object.cdoID()); //$NON-NLS-1$ >+ } >+ >+ out.writeCDOID(object.cdoID()); >+ } >+ } >+ } >+ >+ @Override >+ protected Boolean confirming(CDODataInput in) throws IOException >+ { >+ return in.readBoolean(); >+ } >+} >Index: src/org/eclipse/emf/cdo/internal/net4j/protocol/RemoteLockObjectsIndication.java >=================================================================== >RCS file: src/org/eclipse/emf/cdo/internal/net4j/protocol/RemoteLockObjectsIndication.java >diff -N src/org/eclipse/emf/cdo/internal/net4j/protocol/RemoteLockObjectsIndication.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/emf/cdo/internal/net4j/protocol/RemoteLockObjectsIndication.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,80 @@ >+/** >+ * Copyright (c) 2004 - 2009 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.internal.net4j.protocol; >+ >+import org.eclipse.emf.cdo.common.id.CDOID; >+import org.eclipse.emf.cdo.common.id.CDOIDAndVersion; >+import org.eclipse.emf.cdo.common.io.CDODataInput; >+import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants; >+import org.eclipse.emf.cdo.common.revision.CDORevision; >+import org.eclipse.emf.cdo.internal.net4j.bundle.OM; >+import org.eclipse.emf.cdo.view.RemoteLockAcquiredEvent; >+ >+import org.eclipse.emf.internal.cdo.view.CDOViewImpl; >+ >+import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType; >+import org.eclipse.net4j.util.io.IORuntimeException; >+import org.eclipse.net4j.util.om.trace.ContextTracer; >+ >+import java.io.IOException; >+import java.util.ArrayList; >+import java.util.List; >+ >+/** >+ * @author Juan Pedro Silva >+ * @see org.eclipse.emf.cdo.server.internal.net4j.protocol.LockObjectsIndication >+ */ >+public class RemoteLockObjectsIndication extends CDOClientIndication >+{ >+ private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_PROTOCOL, CommitNotificationIndication.class); >+ >+ private LockType lockType; >+ >+ private CDOViewImpl view; >+ >+ private List<CDOID> lockedObjects = new ArrayList<CDOID>(); >+ >+ private List<CDOIDAndVersion> idAndVersions = new ArrayList<CDOIDAndVersion>(); >+ >+ private int referenceChunk = CDORevision.UNCHUNKED; >+ >+ public RemoteLockObjectsIndication(CDOClientProtocol cdoClientProtocol) >+ { >+ super(cdoClientProtocol, CDOProtocolConstants.SIGNAL_REMOTE_LOCK); >+ } >+ >+ @Override >+ protected void indicating(CDODataInput in) throws IOException >+ { >+ // referenceChunk = in.readInt(); >+ // int size = in.readInt(); >+ // for (int i = 0; i < size; i++) >+ // { >+ // CDOID id = in.readCDOID(); >+ // int version = in.readInt(); >+ // lockedObjects.add(id); >+ // idAndVersions.add(CDOIDUtil.createIDAndVersion(id, version)); >+ // } >+ // int viewID = in.readInt(); >+ // lockType = in.readCDOLockType(); >+ // long timeout = in.readLong(); >+ >+ try >+ { >+ // view = (CDOViewImpl)getSession().getView(viewID); // The view might not be from this session. >+ getSession().getLockmanager().notifyEvent(new RemoteLockAcquiredEvent(view)); >+ } >+ catch (Exception ex) // Interrupted >+ { >+ throw new IORuntimeException(ex); >+ } >+ } >+} >Index: src/org/eclipse/emf/cdo/internal/net4j/protocol/RemoteLockReleasedIndication.java >=================================================================== >RCS file: src/org/eclipse/emf/cdo/internal/net4j/protocol/RemoteLockReleasedIndication.java >diff -N src/org/eclipse/emf/cdo/internal/net4j/protocol/RemoteLockReleasedIndication.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/emf/cdo/internal/net4j/protocol/RemoteLockReleasedIndication.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,80 @@ >+/** >+ * Copyright (c) 2004 - 2009 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.internal.net4j.protocol; >+ >+import org.eclipse.emf.cdo.common.id.CDOID; >+import org.eclipse.emf.cdo.common.id.CDOIDAndVersion; >+import org.eclipse.emf.cdo.common.io.CDODataInput; >+import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants; >+import org.eclipse.emf.cdo.common.revision.CDORevision; >+import org.eclipse.emf.cdo.internal.net4j.bundle.OM; >+import org.eclipse.emf.cdo.view.RemoteLockReleasedEvent; >+ >+import org.eclipse.emf.internal.cdo.view.CDOViewImpl; >+ >+import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType; >+import org.eclipse.net4j.util.io.IORuntimeException; >+import org.eclipse.net4j.util.om.trace.ContextTracer; >+ >+import java.io.IOException; >+import java.util.ArrayList; >+import java.util.List; >+ >+/** >+ * @author Juan Pedro Silva >+ * @see org.eclipse.emf.cdo.server.internal.net4j.protocol.LockObjectsIndication >+ */ >+public class RemoteLockReleasedIndication extends CDOClientIndication >+{ >+ private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_PROTOCOL, CommitNotificationIndication.class); >+ >+ private LockType lockType; >+ >+ private CDOViewImpl view; >+ >+ private List<CDOID> lockedObjects = new ArrayList<CDOID>(); >+ >+ private List<CDOIDAndVersion> idAndVersions = new ArrayList<CDOIDAndVersion>(); >+ >+ private int referenceChunk = CDORevision.UNCHUNKED; >+ >+ public RemoteLockReleasedIndication(CDOClientProtocol cdoClientProtocol) >+ { >+ super(cdoClientProtocol, CDOProtocolConstants.SIGNAL_REMOTE_UNLOCK); >+ } >+ >+ @Override >+ protected void indicating(CDODataInput in) throws IOException >+ { >+ // referenceChunk = in.readInt(); >+ // int size = in.readInt(); >+ // for (int i = 0; i < size; i++) >+ // { >+ // CDOID id = in.readCDOID(); >+ // int version = in.readInt(); >+ // lockedObjects.add(id); >+ // idAndVersions.add(CDOIDUtil.createIDAndVersion(id, version)); >+ // } >+ // int viewID = in.readInt(); >+ // lockType = in.readCDOLockType(); >+ // long timeout = in.readLong(); >+ >+ try >+ { >+ // view = (CDOViewImpl)getSession().getView(viewID); // The view might not be from this session. >+ getSession().getLockmanager().notifyEvent(new RemoteLockReleasedEvent(view)); >+ } >+ catch (Exception ex) // Interrupted >+ { >+ throw new IORuntimeException(ex); >+ } >+ } >+} >#P org.eclipse.net4j.util >Index: src/org/eclipse/net4j/util/concurrent/RWLockManager.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.net4j/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/concurrent/RWLockManager.java,v >retrieving revision 1.12 >diff -u -r1.12 RWLockManager.java >--- src/org/eclipse/net4j/util/concurrent/RWLockManager.java 10 Jul 2009 07:50:55 -0000 1.12 >+++ src/org/eclipse/net4j/util/concurrent/RWLockManager.java 16 Nov 2009 17:37:51 -0000 >@@ -11,8 +11,11 @@ > */ > package org.eclipse.net4j.util.concurrent; > >+import org.eclipse.net4j.util.collection.FastList; > import org.eclipse.net4j.util.collection.HashBag; > import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType; >+import org.eclipse.net4j.util.event.IEvent; >+import org.eclipse.net4j.util.event.IListener; > import org.eclipse.net4j.util.lifecycle.Lifecycle; > > import java.util.ArrayList; >@@ -635,4 +638,111 @@ > throw new UnsupportedOperationException(); > } > } >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ protected boolean hasListenerRegistered = false; >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ protected FastList<IListener> registeredLockListeners = new FastList<IListener>() >+ { >+ @Override >+ protected IListener[] newArray(int length) >+ { >+ return new IListener[length]; >+ } >+ >+ @Override >+ protected void firstElementAdded() >+ { >+ firstListenerAdded(); >+ } >+ >+ @Override >+ protected void lastElementRemoved() >+ { >+ lastListenerRemoved(); >+ } >+ }; >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ public void registerLockListeners(Collection<IListener> collToRegister) >+ { >+ for (IListener il : collToRegister) >+ { >+ registerListener(il); >+ } >+ } >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ public void registerLockListener(IListener listenerToRegister) >+ { >+ registerListener(listenerToRegister); >+ } >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ public void unRegisterLockListener(IListener listenerToRegister) >+ { >+ unRegisterListener(listenerToRegister); >+ } >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ public void unRegisterLockListeners(Collection<IListener> collToUnregister) >+ { >+ for (IListener il : collToUnregister) >+ { >+ unRegisterListener(il); >+ } >+ } >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ public void notifyEvent(IEvent event) >+ { >+ notify(event); >+ } >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ protected void registerListener(IListener listenerToRegister) >+ { >+ if (!hasListenerRegistered) >+ { >+ hasListenerRegistered = true; >+ } >+ registeredLockListeners.add(listenerToRegister); >+ } >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ protected void unRegisterListener(IListener listenerToRegister) >+ { >+ registeredLockListeners.remove(listenerToRegister); >+ if (registeredLockListeners.isEmpty()) >+ { >+ hasListenerRegistered = false; >+ } >+ } >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ protected void notify(IEvent event) >+ { >+ fireEvent(event, registeredLockListeners.get()); >+ } > } >Index: src/org/eclipse/net4j/util/concurrent/IRWLockManager.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.net4j/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/concurrent/IRWLockManager.java,v >retrieving revision 1.3 >diff -u -r1.3 IRWLockManager.java >--- src/org/eclipse/net4j/util/concurrent/IRWLockManager.java 10 Jul 2009 07:50:54 -0000 1.3 >+++ src/org/eclipse/net4j/util/concurrent/IRWLockManager.java 16 Nov 2009 17:37:51 -0000 >@@ -10,6 +10,9 @@ > */ > package org.eclipse.net4j.util.concurrent; > >+import org.eclipse.net4j.util.event.IEvent; >+import org.eclipse.net4j.util.event.IListener; >+ > import java.util.Collection; > > /** >@@ -55,4 +58,29 @@ > { > WRITE, READ > } >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ public void registerLockListeners(Collection<IListener> collToRegister); >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ public void registerLockListener(IListener listenerToRegister); >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ public void unRegisterLockListener(IListener listenerToRegister); >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ public void unRegisterLockListeners(Collection<IListener> collToUnregister); >+ >+ /** >+ * @author Juan Pedro Silva >+ */ >+ public void notifyEvent(IEvent event); > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 283274
:
151848
|
151850
|
152326
|
153394