public void test() throws CommitException { { CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOResource resource = transaction.createResource(getResourcePath("test")); Category category1 = getModel1Factory().createCategory(); resource.getContents().add(category1); category1.getCategories().add(getModel1Factory().createCategory()); Category category2 = getModel1Factory().createCategory(); resource.getContents().add(category2); transaction.commit(); session.close(); } { CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); final CDOObject[] attachedObject = new CDOObject[1]; transaction.addTransactionHandler( new CDOTransactionHandler1() { public void modifyingObject( CDOTransaction transaction, CDOObject object, CDOFeatureDelta featureDelta) {} public void detachingObject(CDOTransaction transaction, CDOObject object) {} public void attachingObject(CDOTransaction transaction, CDOObject object) { attachedObject[0] = object; } }); CDOResource resource = transaction.getResource(getResourcePath("test")); Category c1 = (Category) resource.getContents().get(0); Category nestedCategory = c1.getCategories().get(0); CDOObject cdoCategory = CDOUtil.getCDOObject(nestedCategory); // Detach EcoreUtil.remove(nestedCategory); // Re-attach attachedObject[0] = null; ((Category) resource.getContents().get(1)).getCategories().add(nestedCategory); assertNotNull("CDOTransactionHandler1.attachingObject was not called", attachedObject[0]); assertEquals( MessageFormat.format("Re-attached object was not the expected object {0}", cdoCategory), cdoCategory, attachedObject[0]); } }
@Override protected void hookTransaction(CDOTransaction transaction) { transaction.addTransactionHandler(handler); adapter = new CDOChangeSubscriptionAdapter(getTransaction()); transaction.addListener(collector); }