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 119456 Details for
Bug 250486
Objects are GC'ed out of a view even when adapters are attached
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]
Patch v1
clipboard.txt (text/plain), 72.51 KB, created by
Simon Mc Duff
on 2008-12-03 22:10:47 EST
(
hide
)
Description:
Patch v1
Filename:
MIME Type:
Creator:
Simon Mc Duff
Created:
2008-12-03 22:10:47 EST
Size:
72.51 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.emf.cdo.tests >Index: src/org/eclipse/emf/cdo/tests/TransactionHandlerTest.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/tests/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/TransactionHandlerTest.java,v >retrieving revision 1.5 >diff -u -r1.5 TransactionHandlerTest.java >--- src/org/eclipse/emf/cdo/tests/TransactionHandlerTest.java 14 Nov 2008 20:15:58 -0000 1.5 >+++ src/org/eclipse/emf/cdo/tests/TransactionHandlerTest.java 4 Dec 2008 03:05:59 -0000 >@@ -11,6 +11,7 @@ > **************************************************************************/ > package org.eclipse.emf.cdo.tests; > >+import org.eclipse.emf.cdo.CDOCommitContext; > import org.eclipse.emf.cdo.CDOObject; > import org.eclipse.emf.cdo.CDOSession; > import org.eclipse.emf.cdo.CDOTransaction; >@@ -377,7 +378,7 @@ > listOfAddingObject.add(object); > } > >- public void committingTransaction(CDOTransaction transaction) >+ public void committingTransaction(CDOTransaction transaction, CDOCommitContext commitContext) > { > numberOfCommit++; > } >@@ -396,5 +397,9 @@ > { > numberOfRollback++; > } >+ >+ public void committedTransaction(CDOTransaction transaction, CDOCommitContext commitContext) >+ { >+ } > } > } >Index: src/org/eclipse/emf/cdo/tests/AllTestsAllConfigs.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/tests/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTestsAllConfigs.java,v >retrieving revision 1.24 >diff -u -r1.24 AllTestsAllConfigs.java >--- src/org/eclipse/emf/cdo/tests/AllTestsAllConfigs.java 26 Nov 2008 13:30:15 -0000 1.24 >+++ src/org/eclipse/emf/cdo/tests/AllTestsAllConfigs.java 4 Dec 2008 03:05:59 -0000 >@@ -79,6 +79,7 @@ > testClasses.add(RepositoryTest.class); > testClasses.add(LockingManagerTest.class); > testClasses.add(MultiValuedOfAttributeTest.class); >+ testClasses.add(AdapterManagerTest.class); > > // Specific for MEMStore > testClasses.add(MEMStoreQueryTest.class); >Index: src/org/eclipse/emf/cdo/tests/ChangeSubscriptionTest.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/tests/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ChangeSubscriptionTest.java,v >retrieving revision 1.4 >diff -u -r1.4 ChangeSubscriptionTest.java >--- src/org/eclipse/emf/cdo/tests/ChangeSubscriptionTest.java 17 Oct 2008 20:09:20 -0000 1.4 >+++ src/org/eclipse/emf/cdo/tests/ChangeSubscriptionTest.java 4 Dec 2008 03:05:59 -0000 >@@ -10,7 +10,7 @@ > **************************************************************************/ > package org.eclipse.emf.cdo.tests; > >-import org.eclipse.emf.cdo.CDOChangeSubscriptionPolicy; >+import org.eclipse.emf.cdo.CDOAdapterPolicy; > import org.eclipse.emf.cdo.CDODeltaNotification; > import org.eclipse.emf.cdo.CDOSession; > import org.eclipse.emf.cdo.CDOTransaction; >@@ -39,15 +39,15 @@ > { > public void testSameSession() throws Exception > { >- testSameSession(CDOChangeSubscriptionPolicy.ALL); >+ testSameSession(CDOAdapterPolicy.ALL); > } > > public void testSameSession_disable() throws Exception > { >- testSameSession(CDOChangeSubscriptionPolicy.NONE); >+ testSameSession(CDOAdapterPolicy.NONE); > } > >- public void testSameSession(final CDOChangeSubscriptionPolicy enabled) throws Exception >+ public void testSameSession(final CDOAdapterPolicy enabled) throws Exception > { > msg("Opening session"); > final CDOSession session = openModel1Session(); >@@ -69,7 +69,7 @@ > msg("Opening transaction"); > final CDOTransaction transaction = session.openTransaction(); > >- transaction.setChangeSubscriptionPolicy(enabled); >+ transaction.setAdapterDeltaNotificationPolicy(enabled); > > msg("Creating resource"); > final CDOResource resourceA = transaction.createResource("/test1"); >@@ -103,18 +103,17 @@ > @Override > protected boolean successful() > { >- return enabled == CDOChangeSubscriptionPolicy.ALL && adapter.getNotifications().size() == 1 >- || enabled == CDOChangeSubscriptionPolicy.NONE && adapter.getNotifications().size() == 0; >+ return enabled == CDOAdapterPolicy.ALL && adapter.getNotifications().size() == 1 >+ || enabled == CDOAdapterPolicy.NONE && adapter.getNotifications().size() == 0; > } > }.timedOut(); > > assertEquals(false, timedOut); > > // Switching policy to the other >- final CDOChangeSubscriptionPolicy enabled2 = enabled == CDOChangeSubscriptionPolicy.ALL ? CDOChangeSubscriptionPolicy.NONE >- : CDOChangeSubscriptionPolicy.ALL; >+ final CDOAdapterPolicy enabled2 = enabled == CDOAdapterPolicy.ALL ? CDOAdapterPolicy.NONE : CDOAdapterPolicy.ALL; > >- transaction.setChangeSubscriptionPolicy(enabled2); >+ transaction.setAdapterDeltaNotificationPolicy(enabled2); > > adapter.getNotifications().clear(); > >@@ -132,8 +131,8 @@ > @Override > protected boolean successful() > { >- return enabled2 == CDOChangeSubscriptionPolicy.ALL && adapter.getNotifications().size() == 1 >- || enabled2 == CDOChangeSubscriptionPolicy.NONE && adapter.getNotifications().size() == 0; >+ return enabled2 == CDOAdapterPolicy.ALL && adapter.getNotifications().size() == 1 >+ || enabled2 == CDOAdapterPolicy.NONE && adapter.getNotifications().size() == 0; > } > }.timedOut(); > >@@ -142,16 +141,16 @@ > > public void testSeparateSession() throws Exception > { >- testSeparateSession(CDOChangeSubscriptionPolicy.ALL); >+ testSeparateSession(CDOAdapterPolicy.ALL); > > } > > public void testSeparateSession_disable() throws Exception > { >- testSeparateSession(CDOChangeSubscriptionPolicy.NONE); >+ testSeparateSession(CDOAdapterPolicy.NONE); > } > >- public void testSeparateSession(final CDOChangeSubscriptionPolicy enabled) throws Exception >+ public void testSeparateSession(final CDOAdapterPolicy enabled) throws Exception > { > msg("Opening session"); > final CDOSession session = openModel1Session(); >@@ -172,7 +171,7 @@ > > msg("Opening transaction"); > final CDOTransaction transaction = session.openTransaction(); >- transaction.setChangeSubscriptionPolicy(enabled); >+ transaction.setAdapterDeltaNotificationPolicy(enabled); > > msg("Creating resource"); > final CDOResource resourceA = transaction.createResource("/test1"); >@@ -209,18 +208,17 @@ > @Override > protected boolean successful() > { >- return enabled == CDOChangeSubscriptionPolicy.ALL && adapter.getNotifications().size() == 1 >- || enabled == CDOChangeSubscriptionPolicy.NONE && adapter.getNotifications().size() == 0; >+ return enabled == CDOAdapterPolicy.ALL && adapter.getNotifications().size() == 1 >+ || enabled == CDOAdapterPolicy.NONE && adapter.getNotifications().size() == 0; > } > }.timedOut(); > > assertEquals(false, timedOut); > > // Switching policy to the other >- final CDOChangeSubscriptionPolicy enabled2 = enabled == CDOChangeSubscriptionPolicy.ALL ? CDOChangeSubscriptionPolicy.NONE >- : CDOChangeSubscriptionPolicy.ALL; >+ final CDOAdapterPolicy enabled2 = enabled == CDOAdapterPolicy.ALL ? CDOAdapterPolicy.NONE : CDOAdapterPolicy.ALL; > >- transaction.setChangeSubscriptionPolicy(enabled2); >+ transaction.setAdapterDeltaNotificationPolicy(enabled2); > > adapter.getNotifications().clear(); > >@@ -238,8 +236,8 @@ > @Override > protected boolean successful() > { >- return enabled2 == CDOChangeSubscriptionPolicy.ALL && adapter.getNotifications().size() == 1 >- || enabled2 == CDOChangeSubscriptionPolicy.NONE && adapter.getNotifications().size() == 0; >+ return enabled2 == CDOAdapterPolicy.ALL && adapter.getNotifications().size() == 1 >+ || enabled2 == CDOAdapterPolicy.NONE && adapter.getNotifications().size() == 0; > } > }.timedOut(); > >@@ -268,7 +266,7 @@ > > msg("Opening transaction"); > final CDOTransaction transaction = session.openTransaction(); >- transaction.setChangeSubscriptionPolicy(CDOChangeSubscriptionPolicy.ALL); >+ transaction.setAdapterDeltaNotificationPolicy(CDOAdapterPolicy.ALL); > msg("Creating resource"); > final CDOResource resourceA = transaction.createResource("/test1"); > >@@ -289,7 +287,7 @@ > session2.setPassiveUpdateEnabled(false); > > final CDOTransaction transaction2 = session2.openTransaction(); >- transaction.setChangeSubscriptionPolicy(CDOChangeSubscriptionPolicy.ALL); >+ transaction.setAdapterDeltaNotificationPolicy(CDOAdapterPolicy.ALL); > > final Category category1B = (Category)transaction2.getObject(CDOUtil.getCDOObject(category1A).cdoID(), true); > >@@ -339,7 +337,7 @@ > msg("Opening transaction"); > final CDOTransaction transaction = session.openTransaction(); > >- transaction.setChangeSubscriptionPolicy(customPolicy); >+ transaction.setAdapterDeltaNotificationPolicy(customPolicy); > > msg("Creating resource"); > final CDOResource resourceA = transaction.createResource("/test1"); >@@ -390,7 +388,7 @@ > assertEquals(false, timedOut); > > // Switching policy to the other >- transaction.setChangeSubscriptionPolicy(CDOChangeSubscriptionPolicy.ALL); >+ transaction.setAdapterDeltaNotificationPolicy(CDOAdapterPolicy.ALL); > > adapter.getNotifications().clear(); > >@@ -439,7 +437,7 @@ > msg("Opening transaction"); > final CDOTransaction transaction = session.openTransaction(); > >- transaction.setChangeSubscriptionPolicy(CDOChangeSubscriptionPolicy.ALL); >+ transaction.setAdapterDeltaNotificationPolicy(CDOAdapterPolicy.ALL); > > msg("Creating resource"); > final CDOResource resourceA = transaction.createResource("/test1"); >@@ -570,7 +568,7 @@ > /** > * @author Simon McDuff > */ >- private class CDOIDFilterChangeSubscriptionPolicy implements CDOChangeSubscriptionPolicy >+ private class CDOIDFilterChangeSubscriptionPolicy implements CDOAdapterPolicy > { > private Set<CDOID> cdoIDs = new HashSet<CDOID>(); > >@@ -578,7 +576,7 @@ > { > } > >- public boolean shouldSubscribe(EObject eObject, Adapter object) >+ public boolean valid(EObject eObject, Adapter object) > { > return cdoIDs.contains(((InternalCDOObject)eObject).cdoID()); > } >Index: src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_251087_Test.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/tests/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_251087_Test.java,v >retrieving revision 1.2 >diff -u -r1.2 Bugzilla_251087_Test.java >--- src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_251087_Test.java 14 Nov 2008 20:15:58 -0000 1.2 >+++ src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_251087_Test.java 4 Dec 2008 03:05:59 -0000 >@@ -12,7 +12,7 @@ > > package org.eclipse.emf.cdo.tests.bugzilla; > >-import org.eclipse.emf.cdo.CDOChangeSubscriptionPolicy; >+import org.eclipse.emf.cdo.CDOAdapterPolicy; > import org.eclipse.emf.cdo.CDOSession; > import org.eclipse.emf.cdo.CDOTransaction; > import org.eclipse.emf.cdo.common.id.CDOID; >@@ -45,7 +45,7 @@ > CDOTransaction transaction1 = session.openTransaction(); > > transaction1.setInvalidationNotificationEnabled(true); >- transaction1.setChangeSubscriptionPolicy(CDOChangeSubscriptionPolicy.ALL); >+ transaction1.setAdapterDeltaNotificationPolicy(CDOAdapterPolicy.ALL); > > String resourcePath = "/test1"; > CDOResource res = transaction1.createResource(resourcePath); >@@ -71,7 +71,7 @@ > CDOTransaction transaction1 = sessionA.openTransaction(); > > transaction1.setInvalidationNotificationEnabled(true); >- transaction1.setChangeSubscriptionPolicy(CDOChangeSubscriptionPolicy.ALL); >+ transaction1.setAdapterDeltaNotificationPolicy(CDOAdapterPolicy.ALL); > > String resourcePath = "/test1"; > CDOResource res = transaction1.createResource(resourcePath); >@@ -83,7 +83,7 @@ > CDOID companyID = CDOUtil.getCDOObject(obj2).cdoID(); > Company companyB = (Company)transB1.getObject(companyID); > sessionB.setPassiveUpdateEnabled(false); >- transB1.setChangeSubscriptionPolicy(CDOChangeSubscriptionPolicy.ALL); >+ transB1.setAdapterDeltaNotificationPolicy(CDOAdapterPolicy.ALL); > final TestAdapter testAdapter = new TestAdapter(); > companyB.eAdapters().add(testAdapter); > assertEquals(true, ((InternalCDOTransaction)transB1).hasSubscription(companyID)); >Index: src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_254489_Test.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/tests/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_254489_Test.java,v >retrieving revision 1.1 >diff -u -r1.1 Bugzilla_254489_Test.java >--- src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_254489_Test.java 6 Nov 2008 19:31:33 -0000 1.1 >+++ src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_254489_Test.java 4 Dec 2008 03:05:59 -0000 >@@ -11,7 +11,7 @@ > > package org.eclipse.emf.cdo.tests.bugzilla; > >-import org.eclipse.emf.cdo.CDOChangeSubscriptionPolicy; >+import org.eclipse.emf.cdo.CDOAdapterPolicy; > import org.eclipse.emf.cdo.CDOSession; > import org.eclipse.emf.cdo.CDOTransaction; > import org.eclipse.emf.cdo.eresource.CDOResource; >@@ -55,7 +55,7 @@ > > transaction1.commit(); > >- transaction2.setChangeSubscriptionPolicy(CDOChangeSubscriptionPolicy.ALL); >+ transaction2.setAdapterDeltaNotificationPolicy(CDOAdapterPolicy.ALL); > CDOResource res2 = transaction2.getResource("/res1"); > Company companyA2 = (Company)res2.getContents().get(0); > final TestAdapter companyA2Adapter = new TestAdapter(); >Index: src/org/eclipse/emf/cdo/tests/AdapterManagerTest.java >=================================================================== >RCS file: src/org/eclipse/emf/cdo/tests/AdapterManagerTest.java >diff -N src/org/eclipse/emf/cdo/tests/AdapterManagerTest.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/emf/cdo/tests/AdapterManagerTest.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,261 @@ >+/*************************************************************************** >+ * Copyright (c) 2004 - 2008 Eike Stepper, Germany. >+ * 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.tests; >+ >+import org.eclipse.emf.cdo.CDOAdapterPolicy; >+import org.eclipse.emf.cdo.CDOSession; >+import org.eclipse.emf.cdo.CDOTransaction; >+import org.eclipse.emf.cdo.common.id.CDOID; >+import org.eclipse.emf.cdo.tests.model1.Company; >+import org.eclipse.emf.cdo.util.CDOUtil; >+ >+import org.eclipse.emf.common.notify.Adapter; >+import org.eclipse.emf.common.notify.Notification; >+import org.eclipse.emf.common.notify.Notifier; >+ >+import java.lang.ref.WeakReference; >+import java.util.ArrayList; >+import java.util.List; >+ >+/** >+ * @author Simon McDuff >+ */ >+public class AdapterManagerTest extends AbstractCDOTest >+{ >+ public void testAdapterPolicy_NONE() throws Exception >+ { >+ msg("Opening session"); >+ final CDOSession session = openModel1Session(); >+ >+ session.setPassiveUpdateEnabled(false); >+ >+ // ************************************************************* // >+ >+ msg("Creating company"); >+ Company companyA = getModel1Factory().createCompany(); >+ TestAdapter testAdapter = new TestAdapter(); >+ msg("Opening transaction"); >+ CDOTransaction transaction = session.openTransaction(); >+ >+ transaction.createResource("/resA").getContents().add(companyA); >+ >+ msg("Committing"); >+ transaction.commit(); >+ >+ CDOID id = CDOUtil.getCDOObject(companyA).cdoID(); >+ companyA.eAdapters().add(testAdapter); >+ companyA = null; >+ >+ System.gc(); >+ >+ assertEquals(false, transaction.isObjectRegistered(id)); >+ companyA = (Company)transaction.getObject(id); >+ assertEquals(0, testAdapter.getNotifications().size()); >+ companyA.setCity("Ottawa"); >+ assertEquals(0, testAdapter.getNotifications().size()); >+ } >+ >+ public void testAdapterPolicy_ALL() throws Exception >+ { >+ msg("Opening session"); >+ final CDOSession session = openModel1Session(); >+ >+ session.setPassiveUpdateEnabled(false); >+ >+ // ************************************************************* // >+ >+ msg("Creating company"); >+ Company companyA = getModel1Factory().createCompany(); >+ TestAdapter testAdapter = new TestAdapter(); >+ msg("Opening transaction"); >+ CDOTransaction transaction = session.openTransaction(); >+ >+ transaction.setAdapterReferencePolicy(CDOAdapterPolicy.ALL); >+ >+ transaction.createResource("/resA").getContents().add(companyA); >+ >+ msg("Committing"); >+ transaction.commit(); >+ CDOID id = CDOUtil.getCDOObject(companyA).cdoID(); >+ companyA.eAdapters().add(testAdapter); >+ companyA = null; >+ >+ testAdapter.getNotifications().clear(); >+ System.gc(); >+ >+ assertEquals(true, transaction.isObjectRegistered(id)); >+ companyA = (Company)transaction.getObject(id); >+ >+ assertEquals(0, testAdapter.getNotifications().size()); >+ companyA.setCity("Ottawa"); >+ assertEquals(1, testAdapter.getNotifications().size()); >+ } >+ >+ public void testAdapterPolicy_AttachObject() throws Exception >+ { >+ msg("Opening session"); >+ final CDOSession session = openModel1Session(); >+ >+ session.setPassiveUpdateEnabled(false); >+ >+ // ************************************************************* // >+ >+ msg("Creating company"); >+ Company companyA = getModel1Factory().createCompany(); >+ TestAdapter testAdapter = new TestAdapter(); >+ >+ companyA.eAdapters().add(testAdapter); >+ >+ msg("Opening transaction"); >+ CDOTransaction transaction = session.openTransaction(); >+ >+ transaction.setAdapterReferencePolicy(CDOAdapterPolicy.ALL); >+ >+ transaction.createResource("/resA").getContents().add(companyA); >+ >+ msg("Committing"); >+ transaction.commit(); >+ CDOID id = CDOUtil.getCDOObject(companyA).cdoID(); >+ >+ companyA = null; >+ >+ testAdapter.getNotifications().clear(); >+ System.gc(); >+ >+ assertEquals(true, transaction.isObjectRegistered(id)); >+ companyA = (Company)transaction.getObject(id); >+ >+ assertEquals(0, testAdapter.getNotifications().size()); >+ companyA.setCity("Ottawa"); >+ assertEquals(1, testAdapter.getNotifications().size()); >+ } >+ >+ public void testAdapterPolicy_DetachObject() throws Exception >+ { >+ msg("Opening session"); >+ final CDOSession session = openModel1Session(); >+ >+ session.setPassiveUpdateEnabled(false); >+ >+ // ************************************************************* // >+ >+ msg("Creating company"); >+ Company companyA = getModel1Factory().createCompany(); >+ WeakReference<Company> weakCompanyA = new WeakReference<Company>(companyA); >+ >+ TestAdapter testAdapter = new TestAdapter(); >+ >+ companyA.eAdapters().add(testAdapter); >+ >+ msg("Opening transaction"); >+ CDOTransaction transaction = session.openTransaction(); >+ >+ transaction.setAdapterReferencePolicy(CDOAdapterPolicy.ALL); >+ >+ transaction.createResource("/resA").getContents().add(companyA); >+ >+ msg("Committing"); >+ transaction.commit(); >+ CDOID id = CDOUtil.getCDOObject(companyA).cdoID(); >+ companyA = null; >+ >+ testAdapter.getNotifications().clear(); >+ System.gc(); >+ >+ assertEquals(true, transaction.isObjectRegistered(id)); >+ Company companyB = (Company)transaction.getObject(id); >+ assertEquals(companyB, weakCompanyA.get()); >+ companyB.setCity("Ottawa"); >+ transaction.getResource("/resA").getContents().remove(0); >+ transaction.commit(); >+ companyB = null; >+ >+ testAdapter.getNotifications().clear(); >+ System.gc(); >+ >+ assertTrue(weakCompanyA.get() == null); >+ } >+ >+ public void testAdapterPolicy_ChangePolicy() throws Exception >+ { >+ msg("Opening session"); >+ final CDOSession session = openModel1Session(); >+ >+ session.setPassiveUpdateEnabled(false); >+ >+ // ************************************************************* // >+ >+ msg("Creating company"); >+ Company companyA = getModel1Factory().createCompany(); >+ >+ TestAdapter testAdapter = new TestAdapter(); >+ companyA.eAdapters().add(testAdapter); >+ >+ msg("Opening transaction"); >+ CDOTransaction transaction = session.openTransaction(); >+ >+ transaction.createResource("/resA").getContents().add(companyA); >+ >+ msg("Committing"); >+ transaction.commit(); >+ CDOID id = CDOUtil.getCDOObject(companyA).cdoID(); >+ transaction.setAdapterReferencePolicy(CDOAdapterPolicy.ALL); >+ companyA = null; >+ >+ testAdapter.getNotifications().clear(); >+ System.gc(); >+ >+ assertEquals(true, transaction.isObjectRegistered(id)); >+ transaction.setAdapterReferencePolicy(CDOAdapterPolicy.NONE); >+ >+ System.gc(); >+ >+ assertEquals(false, transaction.isObjectRegistered(id)); >+ } >+ >+ /** >+ * @author Simon McDuff >+ */ >+ private static class TestAdapter implements Adapter >+ { >+ private List<Notification> notifications = new ArrayList<Notification>(); >+ >+ public TestAdapter() >+ { >+ } >+ >+ public Notifier getTarget() >+ { >+ return null; >+ } >+ >+ public List<Notification> getNotifications() >+ { >+ return notifications; >+ } >+ >+ public boolean isAdapterForType(Object type) >+ { >+ return false; >+ } >+ >+ public void notifyChanged(Notification notification) >+ { >+ notifications.add(notification); >+ } >+ >+ public void setTarget(Notifier newTarget) >+ { >+ >+ } >+ } >+ >+} >#P org.eclipse.emf.cdo >Index: src/org/eclipse/emf/cdo/CDOView.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOView.java,v >retrieving revision 1.59 >diff -u -r1.59 CDOView.java >--- src/org/eclipse/emf/cdo/CDOView.java 28 Nov 2008 17:11:09 -0000 1.59 >+++ src/org/eclipse/emf/cdo/CDOView.java 4 Dec 2008 03:06:00 -0000 >@@ -187,16 +187,16 @@ > public void setInvalidationNotificationEnabled(boolean enabled); > > /** >- * Returns the current {@link CDOChangeSubscriptionPolicy change subscription policy}. >+ * Returns the current {@link CDOAdapterPolicy change subscription policy}. > * > * @return The current change subscription policy, never <code>null</code>. >- * @see #setChangeSubscriptionPolicy(CDOChangeSubscriptionPolicy) >+ * @see #setAdapterDeltaNotificationPolicy(CDOAdapterPolicy) > * @since 2.0 > */ >- public CDOChangeSubscriptionPolicy getChangeSubscriptionPolicy(); >+ public CDOAdapterPolicy getAdapterDeltaNotificationPolicy(); > > /** >- * Specifies the change subscription policy. By default, the value is set to {@link CDOChangeSubscriptionPolicy#NONE}. >+ * Specifies the change subscription policy. By default, the value is set to {@link CDOAdapterPolicy#NONE}. > * <p> > * To activate the policy, you must do the following: <br> > * <code>transaction.setChangeSubscriptionPolicy(CDOChangeSubscriptionPolicy.ALL);</code> >@@ -207,12 +207,10 @@ > * By activating this feature, each object having at least one adapter that matches the current policy will be > * registered with the server and will be notified for each change occurring in the scope of any other transaction. > * <p> >- * {@link CDOChangeSubscriptionPolicy#NONE} - Disabled. <br> >- * {@link CDOChangeSubscriptionPolicy#ALL} - Enabled for all adapters used.<br> >- * {@link CDOChangeSubscriptionPolicy#ONLY_CDO_ADAPTER} - Enabled only for adapters that implement {@link CDOAdapter}. >- * <br> >- * Any other class that implement {@link CDOChangeSubscriptionPolicy} will enable for whatever rules defined in that >- * class. <br> >+ * {@link CDOAdapterPolicy#NONE} - Disabled. <br> >+ * {@link CDOAdapterPolicy#ALL} - Enabled for all adapters used.<br> >+ * {@link CDOAdapterPolicy#ONLY_CDO_ADAPTER} - Enabled only for adapters that implement {@link CDOAdapter}. <br> >+ * Any other class that implement {@link CDOAdapterPolicy} will enable for whatever rules defined in that class. <br> > * <p> > * If <code>myAdapter</code> in the above example matches the current policy, <code>eObject</code> will be registered > * with the server and you will receive all changes from other transaction. >@@ -227,7 +225,17 @@ > * > * @since 2.0 > */ >- public void setChangeSubscriptionPolicy(CDOChangeSubscriptionPolicy policy); >+ public void setAdapterDeltaNotificationPolicy(CDOAdapterPolicy policy); >+ >+ /** >+ * @since 2.0 >+ */ >+ public void setAdapterReferencePolicy(CDOAdapterPolicy policy); >+ >+ /** >+ * @since 2.0 >+ */ >+ public CDOAdapterPolicy getAdapterReferencePolicy(); > > /** > * @since 2.0 >Index: src/org/eclipse/emf/cdo/CDOTransactionHandler.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOTransactionHandler.java,v >retrieving revision 1.14 >diff -u -r1.14 CDOTransactionHandler.java >--- src/org/eclipse/emf/cdo/CDOTransactionHandler.java 14 Sep 2008 08:35:51 -0000 1.14 >+++ src/org/eclipse/emf/cdo/CDOTransactionHandler.java 4 Dec 2008 03:06:00 -0000 >@@ -48,8 +48,19 @@ > * Called by a <code>CDOTransaction</code> <b>before</b> it is being committed. The implementor of this method is > * allowed to throw an unchecked exception that will propagate up to the operation that is about to commit the > * transaction. >+ * >+ * @since 2.0 >+ */ >+ public void committingTransaction(CDOTransaction transaction, CDOCommitContext commitContext); >+ >+ /** >+ * Called by a <code>CDOTransaction</code> <b>after</b> it is being committed. The implementor of this method is not >+ * allowed to throw an unchecked exception that will propagate up to the operation that is about to commit the >+ * transaction. >+ * >+ * @since 2.0 > */ >- public void committingTransaction(CDOTransaction transaction); >+ public void committedTransaction(CDOTransaction transaction, CDOCommitContext commitContext); > > /** > * Called by a <code>CDOTransaction</code> <b>after</b> it is rolled back. If the implementor of this method throws an >Index: src/org/eclipse/emf/cdo/CDOInvalidationNotification.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOInvalidationNotification.java,v >retrieving revision 1.8 >diff -u -r1.8 CDOInvalidationNotification.java >--- src/org/eclipse/emf/cdo/CDOInvalidationNotification.java 17 Oct 2008 20:09:19 -0000 1.8 >+++ src/org/eclipse/emf/cdo/CDOInvalidationNotification.java 4 Dec 2008 03:06:00 -0000 >@@ -25,7 +25,7 @@ > * > * @author Simon McDuff > * @see CDOSessionInvalidationEvent >- * @see CDOChangeSubscriptionPolicy >+ * @see CDOAdapterPolicy > * @noimplement This interface is not intended to be implemented by clients. > */ > public interface CDOInvalidationNotification extends CDONotification >Index: src/org/eclipse/emf/cdo/CDOSessionInvalidationEvent.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOSessionInvalidationEvent.java,v >retrieving revision 1.11 >diff -u -r1.11 CDOSessionInvalidationEvent.java >--- src/org/eclipse/emf/cdo/CDOSessionInvalidationEvent.java 10 Oct 2008 08:20:23 -0000 1.11 >+++ src/org/eclipse/emf/cdo/CDOSessionInvalidationEvent.java 4 Dec 2008 03:06:00 -0000 >@@ -26,7 +26,7 @@ > * > * @author Eike Stepper > * @see CDOInvalidationNotification >- * @see CDOChangeSubscriptionPolicy >+ * @see CDOAdapterPolicy > * @noimplement This interface is not intended to be implemented by clients. > */ > public interface CDOSessionInvalidationEvent extends CDOSessionEvent >Index: src/org/eclipse/emf/cdo/CDOViewInvalidationEvent.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOViewInvalidationEvent.java,v >retrieving revision 1.1 >diff -u -r1.1 CDOViewInvalidationEvent.java >--- src/org/eclipse/emf/cdo/CDOViewInvalidationEvent.java 3 Nov 2008 15:03:32 -0000 1.1 >+++ src/org/eclipse/emf/cdo/CDOViewInvalidationEvent.java 4 Dec 2008 03:06:00 -0000 >@@ -20,7 +20,7 @@ > * > * @author Simon McDuff > * @see CDOInvalidationNotification >- * @see CDOChangeSubscriptionPolicy >+ * @see CDOAdapterPolicy > * @noimplement This interface is not intended to be implemented by clients. > * @since 2.0 > */ >Index: src/org/eclipse/emf/cdo/CDOChangeSubscriptionPolicy.java >=================================================================== >RCS file: src/org/eclipse/emf/cdo/CDOChangeSubscriptionPolicy.java >diff -N src/org/eclipse/emf/cdo/CDOChangeSubscriptionPolicy.java >--- src/org/eclipse/emf/cdo/CDOChangeSubscriptionPolicy.java 10 Oct 2008 08:28:30 -0000 1.3 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,78 +0,0 @@ >-/*************************************************************************** >- * Copyright (c) 2004 - 2008 Eike Stepper, Germany. >- * 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 >- * Eike Stepper - maintenance >- **************************************************************************/ >-package org.eclipse.emf.cdo; >- >-import org.eclipse.emf.common.notify.Adapter; >-import org.eclipse.emf.ecore.EObject; >- >-/** >- * Specifies a change subscription policy. >- * <p> >- * To activate a policy, you must do the following: <br> >- * <code>view.setChangeSubscriptionPolicy(CDOChangeSubscriptionPolicy.ALL);</code> >- * <p> >- * To register an object, you must add an adapter to the object in which you are interested:<br> >- * <code>eObject.eAdapters().add(myAdapter);</code> >- * <p> >- * By activating this feature, each object having at least one adapter that matches the current policy will be >- * registered with the server and will be notified for each change occurring in the scope of any other transaction. >- * <p> >- * {@link CDOChangeSubscriptionPolicy#NONE} - Disabled. <br> >- * {@link CDOChangeSubscriptionPolicy#ALL} - Enabled for all adapters used.<br> >- * {@link CDOChangeSubscriptionPolicy#ONLY_CDO_ADAPTER} - Enabled only for adapters that implement {@link CDOAdapter}. <br> >- * Any other class that implement {@link CDOChangeSubscriptionPolicy} will enable for whatever rules defined in that >- * class. <br> >- * <p> >- * If <code>myAdapter</code> in the above example matches the current policy, <code>eObject</code> will be registered >- * with the server and you will receive all changes from other transaction. >- * <p> >- * When the policy is changed all objects in the cache will automatically be recalculated. >- * <p> >- * You can subscribe to temporary objects. Even if you cannot receive notifications from other {@link CDOTransaction} >- * for these because they are only local to you, at commit time these objects will be registered automatically. >- * <p> >- * <b>Note:</b> It can be used with <code>CDOSession.setPassiveUpdate(false)</code>. In this case, it will receive >- * changes without having the objects changed. >- * >- * @author Simon McDuff >- * @see CDOSessionInvalidationEvent >- * @see CDOInvalidationNotification >- * @since 2.0 >- */ >-public interface CDOChangeSubscriptionPolicy >-{ >- public static final CDOChangeSubscriptionPolicy NONE = new CDOChangeSubscriptionPolicy() >- { >- public boolean shouldSubscribe(EObject eObject, Adapter adapter) >- { >- return false; >- } >- }; >- >- public static final CDOChangeSubscriptionPolicy ONLY_CDO_ADAPTER = new CDOChangeSubscriptionPolicy() >- { >- public boolean shouldSubscribe(EObject eObject, Adapter adapter) >- { >- return adapter instanceof CDOAdapter; >- } >- }; >- >- public static final CDOChangeSubscriptionPolicy ALL = new CDOChangeSubscriptionPolicy() >- { >- public boolean shouldSubscribe(EObject eObject, Adapter adapter) >- { >- return true; >- } >- }; >- >- public boolean shouldSubscribe(EObject eObject, Adapter adapter); >-} >Index: src/org/eclipse/emf/internal/cdo/CDOViewImpl.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOViewImpl.java,v >retrieving revision 1.168 >diff -u -r1.168 CDOViewImpl.java >--- src/org/eclipse/emf/internal/cdo/CDOViewImpl.java 3 Dec 2008 02:37:31 -0000 1.168 >+++ src/org/eclipse/emf/internal/cdo/CDOViewImpl.java 4 Dec 2008 03:06:02 -0000 >@@ -12,7 +12,7 @@ > **************************************************************************/ > package org.eclipse.emf.internal.cdo; > >-import org.eclipse.emf.cdo.CDOChangeSubscriptionPolicy; >+import org.eclipse.emf.cdo.CDOAdapterPolicy; > import org.eclipse.emf.cdo.CDOFeatureAnalyzer; > import org.eclipse.emf.cdo.CDONotification; > import org.eclipse.emf.cdo.CDOObject; >@@ -64,6 +64,7 @@ > import org.eclipse.net4j.util.WrappedException; > import org.eclipse.net4j.util.ReflectUtil.ExcludeFromDump; > import org.eclipse.net4j.util.collection.CloseableIterator; >+import org.eclipse.net4j.util.collection.HashBag; > import org.eclipse.net4j.util.concurrent.RWLockManager; > import org.eclipse.net4j.util.om.trace.ContextTracer; > import org.eclipse.net4j.util.ref.ReferenceValueMap; >@@ -133,10 +134,14 @@ > */ > private ChangeSubscriptionManager changeSubscriptionManager = new ChangeSubscriptionManager(); > >+ private ViewAdapterManager adapterPolicyManager = null; >+ > /** > * @since 2.0 > */ >- private CDOChangeSubscriptionPolicy changeSubscriptionPolicy = CDOChangeSubscriptionPolicy.NONE; >+ private CDOAdapterPolicy changeSubscriptionPolicy = CDOAdapterPolicy.NONE; >+ >+ private CDOAdapterPolicy adapterReferencePolicy = CDOAdapterPolicy.NONE; > > /** > * @since 2.0 >@@ -148,6 +153,7 @@ > invalidationNotificationEnabled = OM.PREF_ENABLE_INVALIDATION_NOTIFICATION.getValue(); > revisionPrefetchingPolicy = CDOUtil.createRevisionPrefetchingPolicy(OM.PREF_REVISION_LOADING_CHUNK_SIZE.getValue()); > objects = createObjectsMap(); >+ adapterPolicyManager = createAdapterManager(); > } > > public int getViewID() >@@ -337,7 +343,7 @@ > /** > * @since 2.0 > */ >- public CDOChangeSubscriptionPolicy getChangeSubscriptionPolicy() >+ public CDOAdapterPolicy getAdapterDeltaNotificationPolicy() > { > return changeSubscriptionPolicy; > } >@@ -345,11 +351,11 @@ > /** > * @since 2.0 > */ >- public void setChangeSubscriptionPolicy(CDOChangeSubscriptionPolicy subscriptionPolicy) >+ public void setAdapterDeltaNotificationPolicy(CDOAdapterPolicy subscriptionPolicy) > { > if (subscriptionPolicy == null) > { >- subscriptionPolicy = CDOChangeSubscriptionPolicy.NONE; >+ subscriptionPolicy = CDOAdapterPolicy.NONE; > } > > if (changeSubscriptionPolicy != subscriptionPolicy) >@@ -362,6 +368,31 @@ > /** > * @since 2.0 > */ >+ public CDOAdapterPolicy getAdapterReferencePolicy() >+ { >+ return adapterReferencePolicy; >+ } >+ >+ /** >+ * @since 2.0 >+ */ >+ public void setAdapterReferencePolicy(CDOAdapterPolicy adapterPolicy) >+ { >+ if (adapterPolicy == null) >+ { >+ adapterPolicy = CDOAdapterPolicy.NONE; >+ } >+ >+ if (this.adapterReferencePolicy != adapterPolicy) >+ { >+ this.adapterReferencePolicy = adapterPolicy; >+ adapterPolicyManager.reset(); >+ } >+ } >+ >+ /** >+ * @since 2.0 >+ */ > public CDORevisionPrefetchingPolicy getRevisionPrefetchingPolicy() > { > return revisionPrefetchingPolicy; >@@ -1211,7 +1242,7 @@ > */ > public void handleChangeSubscription(Collection<CDORevisionDelta> deltas, Collection<CDOID> detachedObjects) > { >- if (getChangeSubscriptionPolicy() != CDOChangeSubscriptionPolicy.NONE) >+ if (getAdapterDeltaNotificationPolicy() != CDOAdapterPolicy.NONE) > { > if (deltas != null) > { >@@ -1251,6 +1282,32 @@ > /** > * @since 2.0 > */ >+ public void handleAddAdapter(InternalCDOObject eObject, Adapter adapter) >+ { >+ if (!FSMUtil.isNew(eObject)) >+ { >+ subscribe(eObject, adapter); >+ } >+ >+ adapterPolicyManager.attachAdapter(eObject, adapter); >+ } >+ >+ /** >+ * @since 2.0 >+ */ >+ public void handleRemoveAdapter(InternalCDOObject eObject, Adapter adapter) >+ { >+ if (!FSMUtil.isNew(eObject)) >+ { >+ unsubscribe(eObject, adapter); >+ } >+ >+ adapterPolicyManager.detachAdapter(eObject, adapter); >+ } >+ >+ /** >+ * @since 2.0 >+ */ > public void subscribe(EObject eObject, Adapter adapter) > { > changeSubscriptionManager.subscribe(eObject, adapter); >@@ -1280,12 +1337,28 @@ > return changeSubscriptionManager; > } > >+ /** >+ * @since 2.0 >+ */ >+ protected ViewAdapterManager getAdapterManager() >+ { >+ return adapterPolicyManager; >+ } >+ > protected ConcurrentMap<CDOID, InternalCDOObject> createObjectsMap() > { > return new ReferenceValueMap.Weak<CDOID, InternalCDOObject>(); > } > > /** >+ * @since 2.0 >+ */ >+ protected ViewAdapterManager createAdapterManager() >+ { >+ return new ViewAdapterManager(); >+ } >+ >+ /** > * Needed for {@link CDOAuditImpl#setTimeStamp(long)}. > * > * @since 2.0 >@@ -1426,6 +1499,74 @@ > * @author Simon McDuff > * @since 2.0 > */ >+ protected class ViewAdapterManager >+ { >+ protected Set<CDOObject> objects = new HashBag<CDOObject>(); >+ >+ synchronized protected void attachObject(CDOObject object) >+ { >+ int count = 0; >+ for (Adapter adapter : object.eAdapters()) >+ { >+ if (adapterReferencePolicy.valid(object, adapter)) >+ { >+ count++; >+ } >+ } >+ >+ for (int i = 0; i < count; i++) >+ { >+ objects.add(object); >+ } >+ >+ } >+ >+ synchronized protected void detachObject(CDOObject object) >+ { >+ while (objects.remove(object)) >+ { >+ ; >+ } >+ } >+ >+ synchronized protected void attachAdapter(CDOObject object, Adapter adapter) >+ { >+ if (getAdapterReferencePolicy().valid(object, adapter)) >+ { >+ objects.add(object); >+ } >+ } >+ >+ synchronized protected void detachAdapter(CDOObject object, Adapter adapter) >+ { >+ if (getAdapterReferencePolicy().valid(object, adapter)) >+ { >+ objects.add(object); >+ } >+ } >+ >+ synchronized public void reset() >+ { >+ // Keep the object in memory >+ Set<CDOObject> oldObject = objects; >+ objects = new HashBag<CDOObject>(); >+ if (getAdapterReferencePolicy() != CDOAdapterPolicy.NONE) >+ { >+ InternalCDOObject objects[] = getObjectsArray(); >+ for (int i = 0; i < objects.length; i++) >+ { >+ InternalCDOObject object = objects[i]; >+ attachObject(object); >+ } >+ } >+ oldObject.clear(); >+ } >+ }; >+ >+ /** >+ * @author Simon McDuff >+ * @since 2.0 >+ */ > protected class ChangeSubscriptionManager > { > private Map<CDOID, SubscribeEntry> subscriptions = new HashMap<CDOID, SubscribeEntry>() >@@ -1452,7 +1593,7 @@ > { > subscriptions.clear(); > List<CDOID> cdoIDs = new ArrayList<CDOID>(); >- if (changeSubscriptionPolicy != CDOChangeSubscriptionPolicy.NONE) >+ if (changeSubscriptionPolicy != CDOAdapterPolicy.NONE) > { > for (InternalCDOObject cdoObject : getObjectsArray()) > { >@@ -1539,7 +1680,7 @@ > { > for (Adapter adapter : object.eAdapters()) > { >- if (changeSubscriptionPolicy.shouldSubscribe(object, adapter)) >+ if (changeSubscriptionPolicy.valid(object, adapter)) > { > count++; > } >@@ -1554,7 +1695,7 @@ > { > synchronized (subscriptions) > { >- if (getChangeSubscriptionPolicy().shouldSubscribe(eObject, adapter)) >+ if (getAdapterDeltaNotificationPolicy().valid(eObject, adapter)) > { > InternalCDOObject internalCDOObject = FSMUtil.adapt(eObject, CDOViewImpl.this); > if (internalCDOObject.cdoView() != CDOViewImpl.this) >@@ -1582,7 +1723,7 @@ > } > > // Notification need to be enable to send correct value to the server >- if (getChangeSubscriptionPolicy() != CDOChangeSubscriptionPolicy.NONE) >+ if (getAdapterDeltaNotificationPolicy() != CDOAdapterPolicy.NONE) > { > request(Collections.singletonList(id), false, true); > } >@@ -1600,7 +1741,7 @@ > subscriptions.remove(id); > > // Notification need to be enable to send correct value to the server >- if (getChangeSubscriptionPolicy() != CDOChangeSubscriptionPolicy.NONE) >+ if (getAdapterDeltaNotificationPolicy() != CDOAdapterPolicy.NONE) > { > request(Collections.singletonList(id), false, false); > } >Index: src/org/eclipse/emf/internal/cdo/CDOXATransactionCommitContext.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOXATransactionCommitContext.java,v >retrieving revision 1.4 >diff -u -r1.4 CDOXATransactionCommitContext.java >--- src/org/eclipse/emf/internal/cdo/CDOXATransactionCommitContext.java 12 Nov 2008 17:41:43 -0000 1.4 >+++ src/org/eclipse/emf/internal/cdo/CDOXATransactionCommitContext.java 4 Dec 2008 03:06:02 -0000 >@@ -38,7 +38,7 @@ > * @author Simon McDuff > * @since 2.0 > */ >-public class CDOXATransactionCommitContext implements Callable<Object>, CDOIDProvider, CDOCommitContext >+public class CDOXATransactionCommitContext implements Callable<Object>, CDOIDProvider, InternalCDOCommitContext > { > private CDOXATransactionImpl transactionManager; > >@@ -48,13 +48,13 @@ > > private CommitTransactionResult result; > >- private CDOCommitContext delegateCommitContext; >+ private InternalCDOCommitContext delegateCommitContext; > > private Map<CDOIDExternalTempImpl, InternalCDOTransaction> requestedIDs = new HashMap<CDOIDExternalTempImpl, InternalCDOTransaction>(); > > private Map<InternalCDOObject, CDOIDExternalTempImpl> objectToID = new HashMap<InternalCDOObject, CDOIDExternalTempImpl>(); > >- public CDOXATransactionCommitContext(CDOXATransactionImpl manager, CDOCommitContext commitContext) >+ public CDOXATransactionCommitContext(CDOXATransactionImpl manager, InternalCDOCommitContext commitContext) > { > transactionManager = manager; > delegateCommitContext = commitContext; >Index: src/org/eclipse/emf/internal/cdo/CDOCommitContext.java >=================================================================== >RCS file: src/org/eclipse/emf/internal/cdo/CDOCommitContext.java >diff -N src/org/eclipse/emf/internal/cdo/CDOCommitContext.java >--- src/org/eclipse/emf/internal/cdo/CDOCommitContext.java 12 Nov 2008 17:41:43 -0000 1.3 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,50 +0,0 @@ >-/*************************************************************************** >- * Copyright (c) 2004 - 2008 Eike Stepper, Germany. >- * 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 >- * Eike Stepper - maintenance >- **************************************************************************/ >-package org.eclipse.emf.internal.cdo; >- >-import org.eclipse.emf.cdo.CDOObject; >-import org.eclipse.emf.cdo.common.id.CDOID; >-import org.eclipse.emf.cdo.common.model.CDOPackage; >-import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta; >-import org.eclipse.emf.cdo.eresource.CDOResource; >- >-import org.eclipse.emf.internal.cdo.protocol.CommitTransactionResult; >- >-import java.util.List; >-import java.util.Map; >- >-/** >- * Provides a context for a commit operation. >- * >- * @author Simon McDuff >- * @since 2.0 >- */ >-public interface CDOCommitContext >-{ >- public InternalCDOTransaction getTransaction(); >- >- public void preCommit(); >- >- public void postCommit(CommitTransactionResult result); >- >- public List<CDOPackage> getNewPackages(); >- >- public Map<CDOID, CDOResource> getNewResources(); >- >- public Map<CDOID, CDOObject> getNewObjects(); >- >- public Map<CDOID, CDOObject> getDirtyObjects(); >- >- public Map<CDOID, CDORevisionDelta> getRevisionDeltas(); >- >- public Map<CDOID, CDOObject> getDetachedObjects(); >-} >Index: src/org/eclipse/emf/internal/cdo/InternalCDOTransaction.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/InternalCDOTransaction.java,v >retrieving revision 1.3 >diff -u -r1.3 InternalCDOTransaction.java >--- src/org/eclipse/emf/internal/cdo/InternalCDOTransaction.java 14 Nov 2008 20:16:06 -0000 1.3 >+++ src/org/eclipse/emf/internal/cdo/InternalCDOTransaction.java 4 Dec 2008 03:06:02 -0000 >@@ -25,7 +25,7 @@ > */ > public interface InternalCDOTransaction extends CDOTransaction, InternalCDOView > { >- public CDOCommitContext createCommitContext(); >+ public InternalCDOCommitContext createCommitContext(); > > public void handleRollback(CDOSavepoint savepoint); > >Index: src/org/eclipse/emf/internal/cdo/CDOXATransactionImpl.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOXATransactionImpl.java,v >retrieving revision 1.9 >diff -u -r1.9 CDOXATransactionImpl.java >--- src/org/eclipse/emf/internal/cdo/CDOXATransactionImpl.java 14 Nov 2008 20:16:06 -0000 1.9 >+++ src/org/eclipse/emf/internal/cdo/CDOXATransactionImpl.java 4 Dec 2008 03:06:02 -0000 >@@ -257,7 +257,7 @@ > > for (InternalCDOTransaction transaction : transactions) > { >- CDOCommitContext context = transaction.createCommitContext(); >+ InternalCDOCommitContext context = transaction.createCommitContext(); > CDOXATransactionCommitContext xaContext = new CDOXATransactionCommitContext(this, context); > xaContext.setState(CDOXAPhase1State.INSTANCE); > activeContext.put(transaction, xaContext); >Index: src/org/eclipse/emf/internal/cdo/InternalCDOView.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/InternalCDOView.java,v >retrieving revision 1.1 >diff -u -r1.1 InternalCDOView.java >--- src/org/eclipse/emf/internal/cdo/InternalCDOView.java 14 Nov 2008 20:16:06 -0000 1.1 >+++ src/org/eclipse/emf/internal/cdo/InternalCDOView.java 4 Dec 2008 03:06:02 -0000 >@@ -78,6 +78,10 @@ > > public boolean isLocked(CDOObject object, RWLockManager.LockType lockType); > >+ public void handleAddAdapter(InternalCDOObject eObject, Adapter adapter); >+ >+ public void handleRemoveAdapter(InternalCDOObject eObject, Adapter adapter); >+ > public void subscribe(EObject eObject, Adapter adapter); > > public void unsubscribe(EObject eObject, Adapter adapter); >Index: src/org/eclipse/emf/internal/cdo/CDOSingleTransactionStrategy.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOSingleTransactionStrategy.java,v >retrieving revision 1.7 >diff -u -r1.7 CDOSingleTransactionStrategy.java >--- src/org/eclipse/emf/internal/cdo/CDOSingleTransactionStrategy.java 14 Nov 2008 20:16:06 -0000 1.7 >+++ src/org/eclipse/emf/internal/cdo/CDOSingleTransactionStrategy.java 4 Dec 2008 03:06:01 -0000 >@@ -39,7 +39,7 @@ > > public void commit(InternalCDOTransaction transaction, IProgressMonitor progressMonitor) throws Exception > { >- CDOCommitContext commitContext = transaction.createCommitContext(); >+ InternalCDOCommitContext commitContext = transaction.createCommitContext(); > if (TRACER.isEnabled()) > { > TRACER.format("CDOCommitContext.preCommit"); >Index: src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java,v >retrieving revision 1.88 >diff -u -r1.88 CDOTransactionImpl.java >--- src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java 14 Nov 2008 20:16:06 -0000 1.88 >+++ src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java 4 Dec 2008 03:06:01 -0000 >@@ -11,9 +11,12 @@ > **************************************************************************/ > package org.eclipse.emf.internal.cdo; > >+import org.eclipse.emf.cdo.CDOAdapterPolicy; >+import org.eclipse.emf.cdo.CDOCommitContext; > import org.eclipse.emf.cdo.CDOObject; > import org.eclipse.emf.cdo.CDOSavepoint; > import org.eclipse.emf.cdo.CDOState; >+import org.eclipse.emf.cdo.CDOTransaction; > import org.eclipse.emf.cdo.CDOTransactionConflictEvent; > import org.eclipse.emf.cdo.CDOTransactionFinishedEvent; > import org.eclipse.emf.cdo.CDOTransactionHandler; >@@ -457,7 +460,7 @@ > /** > * @since 2.0 > */ >- public CDOCommitContext createCommitContext() >+ public InternalCDOCommitContext createCommitContext() > { > return new CDOCommitContextImpl(); > } >@@ -1047,9 +1050,18 @@ > } > > /** >+ * @since 2.0 >+ */ >+ @Override >+ protected ViewAdapterManager createAdapterManager() >+ { >+ return new TransactionAdapterManager(); >+ } >+ >+ /** > * @author Simon McDuff > */ >- private class CDOCommitContextImpl implements CDOCommitContext >+ private class CDOCommitContextImpl implements InternalCDOCommitContext > { > private Map<CDOID, CDOResource> newResources; > >@@ -1120,7 +1132,7 @@ > > for (CDOTransactionHandler handler : getHandlers()) > { >- handler.committingTransaction(getTransaction()); >+ handler.committingTransaction(getTransaction(), this); > } > > try >@@ -1192,6 +1204,12 @@ > session.handleCommitNotification(timeStamp, dirtyIDs, detachedIDs, deltasCopy, getTransaction()); > } > >+ for (CDOTransactionHandler handler : getHandlers()) >+ { >+ handler.committedTransaction(getTransaction(), this); >+ } >+ ((TransactionAdapterManager)getAdapterManager()).committedTransaction(getTransaction(), this); >+ > cleanUp(); > lastCommitTime = timeStamp; > Map<CDOIDTemp, CDOID> idMappings = result.getIDMappings(); >@@ -1329,6 +1347,55 @@ > } > } > >+ private final class TransactionAdapterManager extends ViewAdapterManager implements CDOTransactionHandler >+ { >+ public TransactionAdapterManager() >+ { >+ // Should we register to the handler ?? Since we always need to call it. >+ // addHandler(this); >+ } >+ >+ public void attachingObject(CDOTransaction transaction, CDOObject object) >+ { >+ >+ } >+ >+ public void committedTransaction(CDOTransaction transaction, CDOCommitContext commitContext) >+ { >+ if (getAdapterReferencePolicy() != CDOAdapterPolicy.NONE) >+ { >+ for (CDOObject object : commitContext.getNewObjects().values()) >+ { >+ attachObject(object); >+ } >+ for (CDOObject object : commitContext.getNewResources().values()) >+ { >+ attachObject(object); >+ } >+ for (CDOObject object : commitContext.getDetachedObjects().values()) >+ { >+ detachObject(object); >+ } >+ } >+ } >+ >+ public void committingTransaction(CDOTransaction transaction, CDOCommitContext commitContext) >+ { >+ } >+ >+ public void detachingObject(CDOTransaction transaction, CDOObject object) >+ { >+ } >+ >+ public void modifyingObject(CDOTransaction transaction, CDOObject object, CDOFeatureDelta featureDelta) >+ { >+ } >+ >+ public void rolledBackTransaction(CDOTransaction transaction) >+ { >+ } >+ } >+ > /** > * @author Eike Stepper > */ >Index: src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java,v >retrieving revision 1.84 >diff -u -r1.84 CDOObjectImpl.java >--- src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java 2 Dec 2008 15:20:13 -0000 1.84 >+++ src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java 4 Dec 2008 03:06:01 -0000 >@@ -535,9 +535,9 @@ > protected void didAdd(int index, Adapter newObject) > { > super.didAdd(index, newObject); >- if (!FSMUtil.isTransient(CDOObjectImpl.this) && !FSMUtil.isNew(CDOObjectImpl.this)) >+ if (!FSMUtil.isTransient(CDOObjectImpl.this)) > { >- cdoView().subscribe(CDOObjectImpl.this, newObject); >+ cdoView().handleAddAdapter(CDOObjectImpl.this, newObject); > } > } > >@@ -545,9 +545,10 @@ > protected void didRemove(int index, Adapter oldObject) > { > super.didRemove(index, oldObject); >- if (!FSMUtil.isTransient(CDOObjectImpl.this) && !FSMUtil.isNew(CDOObjectImpl.this)) >+ if (!FSMUtil.isTransient(CDOObjectImpl.this)) > { >- cdoView().unsubscribe(CDOObjectImpl.this, oldObject); >+ cdoView().handleRemoveAdapter(CDOObjectImpl.this, oldObject); >+ > } > } > }; >Index: .settings/.api_filters >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/.settings/.api_filters,v >retrieving revision 1.7 >diff -u -r1.7 .api_filters >--- .settings/.api_filters 14 Oct 2008 20:10:39 -0000 1.7 >+++ .settings/.api_filters 4 Dec 2008 03:06:00 -0000 >@@ -18,47 +18,56 @@ > </message_arguments> > </filter> > </resource> >- <resource path="src/org/eclipse/emf/internal/cdo/CDOXATransactionImpl.java" type="org.eclipse.emf.internal.cdo.CDOXATransactionImpl$CDOXAState"> >+ <resource path="src/org/eclipse/emf/internal/cdo/InternalCDOCommitContext.java" type="org.eclipse.emf.internal.cdo.InternalCDOCommitContext"> > <filter id="643846161"> > <message_arguments> > <message_argument value="CommitTransactionResult"/> >- <message_argument value="CDOXAState"/> >- <message_argument value="check_result(CommitTransactionResult)"/> >+ <message_argument value="InternalCDOCommitContext"/> >+ <message_argument value="postCommit(CommitTransactionResult)"/> > </message_arguments> > </filter> > </resource> >- <resource path="src/org/eclipse/emf/internal/cdo/InternalCDOObject.java" type="org.eclipse.emf.internal.cdo.InternalCDOObject"> >- <filter id="1211105284"> >+ <resource path="src/org/eclipse/emf/internal/cdo/CDOXATransactionCommitContext.java" type="org.eclipse.emf.internal.cdo.CDOXATransactionCommitContext"> >+ <filter id="643846161"> > <message_arguments> >- <message_argument value="cdoInternalCleanup()"/> >+ <message_argument value="CommitTransactionResult"/> >+ <message_argument value="CDOXATransactionCommitContext"/> >+ <message_argument value="setResult(CommitTransactionResult)"/> > </message_arguments> > </filter> >- <filter id="1211105284"> >+ <filter id="643842064"> > <message_arguments> >- <message_argument value="cdoInternalPostLoad(boolean)"/> >+ <message_argument value="CommitTransactionResult"/> >+ <message_argument value="CDOXATransactionCommitContext"/> >+ <message_argument value="getResult()"/> > </message_arguments> > </filter> >- </resource> >- <resource path="src/org/eclipse/emf/internal/cdo/CDOXATransactionCommitContext.java" type="org.eclipse.emf.internal.cdo.CDOXATransactionCommitContext"> > <filter id="643846161"> > <message_arguments> > <message_argument value="CommitTransactionResult"/> > <message_argument value="CDOXATransactionCommitContext"/> >- <message_argument value="setResult(CommitTransactionResult)"/> >+ <message_argument value="postCommit(CommitTransactionResult)"/> > </message_arguments> > </filter> >+ </resource> >+ <resource path="src/org/eclipse/emf/internal/cdo/CDOXATransactionImpl.java" type="org.eclipse.emf.internal.cdo.CDOXATransactionImpl$CDOXAState"> > <filter id="643846161"> > <message_arguments> > <message_argument value="CommitTransactionResult"/> >- <message_argument value="CDOXATransactionCommitContext"/> >- <message_argument value="postCommit(CommitTransactionResult)"/> >+ <message_argument value="CDOXAState"/> >+ <message_argument value="check_result(CommitTransactionResult)"/> > </message_arguments> > </filter> >- <filter id="643842064"> >+ </resource> >+ <resource path="src/org/eclipse/emf/internal/cdo/InternalCDOObject.java" type="org.eclipse.emf.internal.cdo.InternalCDOObject"> >+ <filter id="1211105284"> > <message_arguments> >- <message_argument value="CommitTransactionResult"/> >- <message_argument value="CDOXATransactionCommitContext"/> >- <message_argument value="getResult()"/> >+ <message_argument value="cdoInternalCleanup()"/> >+ </message_arguments> >+ </filter> >+ <filter id="1211105284"> >+ <message_arguments> >+ <message_argument value="cdoInternalPostLoad(boolean)"/> > </message_arguments> > </filter> > </resource> >Index: src/org/eclipse/emf/internal/cdo/protocol/CommitTransactionResult.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CommitTransactionResult.java,v >retrieving revision 1.10 >diff -u -r1.10 CommitTransactionResult.java >--- src/org/eclipse/emf/internal/cdo/protocol/CommitTransactionResult.java 7 Oct 2008 14:39:28 -0000 1.10 >+++ src/org/eclipse/emf/internal/cdo/protocol/CommitTransactionResult.java 4 Dec 2008 03:06:02 -0000 >@@ -15,7 +15,7 @@ > import org.eclipse.emf.cdo.common.revision.CDOReferenceAdjuster; > import org.eclipse.emf.cdo.internal.common.revision.CDOIDMapper; > >-import org.eclipse.emf.internal.cdo.CDOCommitContext; >+import org.eclipse.emf.internal.cdo.InternalCDOCommitContext; > import org.eclipse.emf.internal.cdo.revision.CDOPostCommitReferenceAdjuster; > > import java.util.HashMap; >@@ -35,15 +35,15 @@ > > private CDOReferenceAdjuster referenceAdjuster; > >- private CDOCommitContext commitContext; >+ private InternalCDOCommitContext commitContext; > >- public CommitTransactionResult(CDOCommitContext commitContext, String rollbackMessage) >+ public CommitTransactionResult(InternalCDOCommitContext commitContext, String rollbackMessage) > { > this.rollbackMessage = rollbackMessage; > this.commitContext = commitContext; > } > >- public CommitTransactionResult(CDOCommitContext commitContext, long timeStamp) >+ public CommitTransactionResult(InternalCDOCommitContext commitContext, long timeStamp) > { > this.timeStamp = timeStamp; > this.commitContext = commitContext; >@@ -65,7 +65,7 @@ > this.referenceAdjuster = referenceAdjuster; > } > >- public CDOCommitContext getCommitContext() >+ public InternalCDOCommitContext getCommitContext() > { > return commitContext; > } >Index: src/org/eclipse/emf/internal/cdo/protocol/CommitTransactionRequest.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CommitTransactionRequest.java,v >retrieving revision 1.58 >diff -u -r1.58 CommitTransactionRequest.java >--- src/org/eclipse/emf/internal/cdo/protocol/CommitTransactionRequest.java 14 Nov 2008 20:16:05 -0000 1.58 >+++ src/org/eclipse/emf/internal/cdo/protocol/CommitTransactionRequest.java 4 Dec 2008 03:06:02 -0000 >@@ -37,7 +37,7 @@ > import org.eclipse.emf.cdo.internal.common.CDODataOutputImpl; > import org.eclipse.emf.cdo.spi.common.InternalCDOPackage; > >-import org.eclipse.emf.internal.cdo.CDOCommitContext; >+import org.eclipse.emf.internal.cdo.InternalCDOCommitContext; > import org.eclipse.emf.internal.cdo.InternalCDOSession; > import org.eclipse.emf.internal.cdo.bundle.OM; > import org.eclipse.emf.internal.cdo.revision.CDOListWithElementProxiesImpl; >@@ -61,20 +61,20 @@ > private static final ContextTracer PROTOCOL_TRACER = new ContextTracer(OM.DEBUG_PROTOCOL, > CommitTransactionRequest.class); > >- protected CDOCommitContext commitContext; >+ protected InternalCDOCommitContext commitContext; > >- public CommitTransactionRequest(CDOClientProtocol protocol, CDOCommitContext commitContext) >+ public CommitTransactionRequest(CDOClientProtocol protocol, InternalCDOCommitContext commitContext) > { > this(protocol, CDOProtocolConstants.SIGNAL_COMMIT_TRANSACTION, commitContext); > } > >- public CommitTransactionRequest(CDOClientProtocol protocol, short signalID, CDOCommitContext commitContext) >+ public CommitTransactionRequest(CDOClientProtocol protocol, short signalID, InternalCDOCommitContext commitContext) > { > super(protocol, signalID); > this.commitContext = commitContext; > } > >- protected CDOCommitContext getCommitContext() >+ protected InternalCDOCommitContext getCommitContext() > { > return commitContext; > } >Index: src/org/eclipse/emf/cdo/util/CDODefaultTransactionHandler.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDODefaultTransactionHandler.java,v >retrieving revision 1.1 >diff -u -r1.1 CDODefaultTransactionHandler.java >--- src/org/eclipse/emf/cdo/util/CDODefaultTransactionHandler.java 19 Oct 2008 08:16:21 -0000 1.1 >+++ src/org/eclipse/emf/cdo/util/CDODefaultTransactionHandler.java 4 Dec 2008 03:06:00 -0000 >@@ -10,6 +10,7 @@ > **************************************************************************/ > package org.eclipse.emf.cdo.util; > >+import org.eclipse.emf.cdo.CDOCommitContext; > import org.eclipse.emf.cdo.CDOObject; > import org.eclipse.emf.cdo.CDOTransaction; > import org.eclipse.emf.cdo.CDOTransactionHandler; >@@ -21,6 +22,7 @@ > */ > public abstract class CDODefaultTransactionHandler implements CDOTransactionHandler > { >+ > protected CDODefaultTransactionHandler() > { > } >@@ -52,7 +54,7 @@ > /** > * This implementation does nothing. Clients may override to provide specialized behaviour. > */ >- public void committingTransaction(CDOTransaction transaction) >+ public void committingTransaction(CDOTransaction transaction, CDOCommitContext commitContext) > { > // Do nothing > } >@@ -64,4 +66,12 @@ > { > // Do nothing > } >+ >+ /** >+ * This implementation does nothing. Clients may override to provide specialized behaviour. >+ */ >+ public void committedTransaction(CDOTransaction transaction, CDOCommitContext commitContext) >+ { >+ // Do nothing >+ } > } >Index: src/org/eclipse/emf/internal/cdo/util/CDOPackageRegistryImpl.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/CDOPackageRegistryImpl.java,v >retrieving revision 1.19 >diff -u -r1.19 CDOPackageRegistryImpl.java >--- src/org/eclipse/emf/internal/cdo/util/CDOPackageRegistryImpl.java 21 Nov 2008 17:17:57 -0000 1.19 >+++ src/org/eclipse/emf/internal/cdo/util/CDOPackageRegistryImpl.java 4 Dec 2008 03:06:03 -0000 >@@ -11,6 +11,7 @@ > **************************************************************************/ > package org.eclipse.emf.internal.cdo.util; > >+import org.eclipse.emf.cdo.CDOCommitContext; > import org.eclipse.emf.cdo.CDOObject; > import org.eclipse.emf.cdo.CDOSession; > import org.eclipse.emf.cdo.CDOTransaction; >@@ -368,7 +369,7 @@ > { > } > >- public void committingTransaction(CDOTransaction transaction) >+ public void committingTransaction(CDOTransaction transaction, CDOCommitContext commitContext) > { > } > >@@ -379,6 +380,10 @@ > public void detachingObject(CDOTransaction transaction, CDOObject object) > { > } >+ >+ public void committedTransaction(CDOTransaction transaction, CDOCommitContext commitContext) >+ { >+ } > } > > /** >Index: src/org/eclipse/emf/internal/cdo/InternalCDOCommitContext.java >=================================================================== >RCS file: src/org/eclipse/emf/internal/cdo/InternalCDOCommitContext.java >diff -N src/org/eclipse/emf/internal/cdo/InternalCDOCommitContext.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/emf/internal/cdo/InternalCDOCommitContext.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,32 @@ >+/*************************************************************************** >+ * Copyright (c) 2004 - 2008 Eike Stepper, Germany. >+ * 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 >+ * Eike Stepper - maintenance >+ **************************************************************************/ >+package org.eclipse.emf.internal.cdo; >+ >+import org.eclipse.emf.cdo.CDOCommitContext; >+ >+import org.eclipse.emf.internal.cdo.protocol.CommitTransactionResult; >+ >+/** >+ * Provides a context for a commit operation. >+ * >+ * @author Simon McDuff >+ * @since 2.0 >+ */ >+public interface InternalCDOCommitContext extends CDOCommitContext >+{ >+ public InternalCDOTransaction getTransaction(); >+ >+ public void preCommit(); >+ >+ public void postCommit(CommitTransactionResult result); >+ >+} >Index: src/org/eclipse/emf/cdo/CDOAdapterPolicy.java >=================================================================== >RCS file: src/org/eclipse/emf/cdo/CDOAdapterPolicy.java >diff -N src/org/eclipse/emf/cdo/CDOAdapterPolicy.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/emf/cdo/CDOAdapterPolicy.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,77 @@ >+/*************************************************************************** >+ * Copyright (c) 2004 - 2008 Eike Stepper, Germany. >+ * 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 >+ * Eike Stepper - maintenance >+ **************************************************************************/ >+package org.eclipse.emf.cdo; >+ >+import org.eclipse.emf.common.notify.Adapter; >+import org.eclipse.emf.ecore.EObject; >+ >+/** >+ * Specifies an adapter policy. >+ * <p> >+ * To activate a policy, you must do the following: <br> >+ * <code>view.setChangeSubscriptionPolicy(CDOAdapterPolicy.ALL);</code> >+ * <p> >+ * To register an object, you must add an adapter to the object in which you are interested:<br> >+ * <code>eObject.eAdapters().add(myAdapter);</code> >+ * <p> >+ * By activating this feature, each object having at least one adapter that matches the current policy will be >+ * registered with the server and will be notified for each change occurring in the scope of any other transaction. >+ * <p> >+ * {@link CDOAdapterPolicy#NONE} - Disabled. <br> >+ * {@link CDOAdapterPolicy#ALL} - Enabled for all adapters used.<br> >+ * {@link CDOAdapterPolicy#ONLY_CDO_ADAPTER} - Enabled only for adapters that implement {@link CDOAdapter}. <br> >+ * Any other class that implement {@link CDOAdapterPolicy} will enable for whatever rules defined in that class. <br> >+ * <p> >+ * If <code>myAdapter</code> in the above example matches the current policy, <code>eObject</code> will be registered >+ * with the server and you will receive all changes from other transaction. >+ * <p> >+ * When the policy is changed all objects in the cache will automatically be recalculated. >+ * <p> >+ * You can subscribe to temporary objects. Even if you cannot receive notifications from other {@link CDOTransaction} >+ * for these because they are only local to you, at commit time these objects will be registered automatically. >+ * <p> >+ * <b>Note:</b> It can be used with <code>CDOSession.setPassiveUpdate(false)</code>. In this case, it will receive >+ * changes without having the objects changed. >+ * >+ * @author Simon McDuff >+ * @see CDOSessionInvalidationEvent >+ * @see CDOInvalidationNotification >+ * @since 2.0 >+ */ >+public interface CDOAdapterPolicy >+{ >+ public static final CDOAdapterPolicy NONE = new CDOAdapterPolicy() >+ { >+ public boolean valid(EObject eObject, Adapter adapter) >+ { >+ return false; >+ } >+ }; >+ >+ public static final CDOAdapterPolicy ONLY_CDO_ADAPTER = new CDOAdapterPolicy() >+ { >+ public boolean valid(EObject eObject, Adapter adapter) >+ { >+ return adapter instanceof CDOAdapter; >+ } >+ }; >+ >+ public static final CDOAdapterPolicy ALL = new CDOAdapterPolicy() >+ { >+ public boolean valid(EObject eObject, Adapter adapter) >+ { >+ return true; >+ } >+ }; >+ >+ public boolean valid(EObject eObject, Adapter adapter); >+} >Index: src/org/eclipse/emf/cdo/CDOCommitContext.java >=================================================================== >RCS file: src/org/eclipse/emf/cdo/CDOCommitContext.java >diff -N src/org/eclipse/emf/cdo/CDOCommitContext.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/emf/cdo/CDOCommitContext.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,43 @@ >+/*************************************************************************** >+ * Copyright (c) 2004 - 2008 Eike Stepper, Germany. >+ * 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 >+ * Eike Stepper - maintenance >+ **************************************************************************/ >+package org.eclipse.emf.cdo; >+ >+import org.eclipse.emf.cdo.common.id.CDOID; >+import org.eclipse.emf.cdo.common.model.CDOPackage; >+import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta; >+import org.eclipse.emf.cdo.eresource.CDOResource; >+ >+import java.util.List; >+import java.util.Map; >+ >+/** >+ * Provides a context for a commit operation. >+ * >+ * @author Simon McDuff >+ * @since 2.0 >+ */ >+public interface CDOCommitContext >+{ >+ public CDOTransaction getTransaction(); >+ >+ public List<CDOPackage> getNewPackages(); >+ >+ public Map<CDOID, CDOResource> getNewResources(); >+ >+ public Map<CDOID, CDOObject> getNewObjects(); >+ >+ public Map<CDOID, CDOObject> getDirtyObjects(); >+ >+ public Map<CDOID, CDORevisionDelta> getRevisionDeltas(); >+ >+ public Map<CDOID, CDOObject> getDetachedObjects(); >+}
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 250486
:
119456
|
119621
|
119692