Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
FAQ for CDO and Net4j
Contents
General
How can I enable tracing?
If running as Eclipse launch config it's easy: just turn on tracing on the tracing page of the launch config (plus all net4j and cdo plugins in the list).
If running standalone:
OMPlatform.INSTANCE.addLogHandler(PrintLogHandler.CONSOLE); OMPlatform.INSTANCE.addTraceHandler(PrintTraceHandler.CONSOLE); OMPlatform.INSTANCE.setDebugging(true);
CDO
Why does CDO complain that my objects can't be cast to InternalCDOObject?
Looks as if you are not generating your model for CDO. Have you already read Preparing EMF Models for CDO?
How can I modify the behaviour of generated getters and setters?
If you want to modify the behaviour of generated getters and setters (or have already done so in existing models) you might want to try dynamic feature delegation (introduced in EMF 2.5). With this pattern, the reflective methods like eGet still call your generated method like getX() and then that calls the dymamic reflective method like eDynamicGet. It effectively produces the same behavior as "Refective" delegating but does so by delegating through your generated accessors allowing you to specialize those as you could when you used "None"...
What's the best way to convert an XMIResource to a CDOResource?
You just need to copy/move the root objects over to the CDOResource. There's a good example in ImportResourceAction.doRun():
@Override protected void doRun() throws Exception { CDOTransaction transaction = getTransaction(); // Source ResourceSet ResourceSet sourceSet = new ResourceSetImpl(); Map<String, Object> map = sourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap(); map.put("*", new XMIResourceFactoryImpl()); sourceSet.setPackageRegistry(transaction.getSession().getPackageRegistry()); // Source Resource Resource source = sourceSet.getResource(sourceURI, true); List<EObject> sourceContents = new ArrayList<EObject>(source.getContents()); // Target Resource Resource target = transaction.createResource(targetPath); EList<EObject> targetContents = target.getContents(); // Move contents over for (EObject root : sourceContents) { targetContents.add(root); } }