over time, quite a lot of data accumulated in our CDO repository. We are using an integrated CDO server within our application, and everything was running smoothly so far.
Now, we need access every element of the repository recursively to do some batch changes. We experience, that a lot of memory is required once the data was accessed. Even if a separate session is used and closed after the operation, the memory is not freed.
So I guess the caching is done on server side somehow. Is there any way to trigger some cache cleanup for the server?
Sorry for the late reply. There was a problem with the RSS feed of the forum and your question wasn't shown earlier.
By default caching is done on both server and client side. The server caches CDORevisions and the client caches CDORevisions and CDOObjects. By default CDORevisions and CDOObjects are cached softly. See AbstractCDORevisionCache.createReference(CDORevision) and AbstractCDOView.initObjectsMap(ReferenceType). In both cases cached memory can be reused for other data as soon as your application stops using (referencing) them.
You say you're using an "integrated" server. That could mean that you're duplicating some caches (namely the revision caches and branch trees) for server and client. The new EmbeddedRepository is more optimized for this use case. See org.eclipse.emf.cdo.examples.embedded.EmbeddedRepositoryExample.