Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Taal2008-07-15 14:22:15 +0000
committerMartin Taal2008-07-15 14:22:15 +0000
commitdd9cedec1d3f597efdd210aa649f058178a45061 (patch)
tree66eccfc65fc6ddaad255e7994d064423df5d78fe
parent2f0d5a80531becb64eb0d8eeefc5bbf535b970a6 (diff)
downloadcdo-dd9cedec1d3f597efdd210aa649f058178a45061.tar.gz
cdo-dd9cedec1d3f597efdd210aa649f058178a45061.tar.xz
cdo-dd9cedec1d3f597efdd210aa649f058178a45061.zip
Updated api definition
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/TeneoHibernateMappingProvider.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/.settings/.api_filters337
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/META-INF/MANIFEST.MF8
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/mappings/resource.hbm.xml2
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java126
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreReader.java37
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreWriter.java26
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateThreadContext.java44
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java29
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceSetter.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java10
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVirtualPropertyGetter.java95
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVirtualPropertySetter.java74
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/MoveableListWrapper.java217
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/PersistableListHolder.java8
17 files changed, 928 insertions, 101 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/TeneoHibernateMappingProvider.java b/plugins/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/TeneoHibernateMappingProvider.java
index 8c8b2b70dd..f5bf6bc835 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/TeneoHibernateMappingProvider.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/TeneoHibernateMappingProvider.java
@@ -59,6 +59,8 @@ public class TeneoHibernateMappingProvider implements IHibernateMappingProvider
TRACER.trace(mapping);
}
+ System.err.println(mapping);
+
configuration.addXML(mapping);
if (TRACER.isEnabled())
{
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/.settings/.api_filters b/plugins/org.eclipse.emf.cdo.server.hibernate/.settings/.api_filters
new file mode 100644
index 0000000000..99960de35c
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/.settings/.api_filters
@@ -0,0 +1,337 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component id="org.eclipse.emf.cdo.server.hibernate" version="2">
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertySetter.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDPropertySetter">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDPropertySetter"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionInstantiator.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionInstantiator">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionInstantiator"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticVersionPropertyHandler.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOSyntheticVersionPropertyHandler">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOSyntheticVersionPropertyHandler"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyHandler.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOPropertyHandler">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOPropertyHandler"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/HibernatePackageHandler.java" type="org.eclipse.emf.cdo.server.internal.hibernate.HibernatePackageHandler">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.HibernatePackageHandler"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceGetter.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOReferenceGetter">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOReferenceGetter"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertyGetter.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOVersionPropertyGetter">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOVersionPropertyGetter"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/info/FeatureServerInfo.java" type="org.eclipse.emf.cdo.server.internal.hibernate.info.FeatureServerInfo">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.info.FeatureServerInfo"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/PersistableListHolder.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.PersistableListHolder">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.PersistableListHolder"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyFactory.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionProxyFactory">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionProxyFactory"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertyGetter.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDPropertyGetter">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDPropertyGetter"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreChunkReader.java" type="org.eclipse.emf.cdo.server.internal.hibernate.HibernateStoreChunkReader">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.HibernateStoreChunkReader"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOInterceptor.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOInterceptor">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOInterceptor"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateFileMappingProvider.java" type="org.eclipse.emf.cdo.server.internal.hibernate.HibernateFileMappingProvider">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.HibernateFileMappingProvider"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOTypeUserType.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOTypeUserType">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOTypeUserType"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateCommitContext.java" type="org.eclipse.emf.cdo.server.internal.hibernate.HibernateCommitContext">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.HibernateCommitContext"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticIdPropertyHandler.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOSyntheticIdPropertyHandler">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOSyntheticIdPropertyHandler"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/info/ServerInfo.java" type="org.eclipse.emf.cdo.server.internal.hibernate.info.ServerInfo">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.info.ServerInfo"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOManyReferenceGetter">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOManyReferenceGetter"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreFactory.java" type="org.eclipse.emf.cdo.server.internal.hibernate.HibernateStoreFactory">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.HibernateStoreFactory"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/HibernateMoveableListWrapper.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.HibernateMoveableListWrapper">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.HibernateMoveableListWrapper"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionPropertyAccessor">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionPropertyAccessor"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionLazyInitializer.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionLazyInitializer">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionLazyInitializer"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java" type="org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateThreadContext.java" type="org.eclipse.emf.cdo.server.internal.hibernate.HibernateThreadContext">
+ <filter id="338792546">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.HibernateThreadContext"/>
+ <message_argument value="setSession(Session)"/>
+ </message_arguments>
+ </filter>
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.HibernateThreadContext"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore.java" type="org.eclipse.emf.cdo.server.internal.hibernate.HibernateStore">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.HibernateStore"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/info/PackageServerInfo.java" type="org.eclipse.emf.cdo.server.internal.hibernate.info.PackageServerInfo">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.info.PackageServerInfo"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDMetaRangeUserType.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDMetaRangeUserType">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDMetaRangeUserType"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceSetter.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOReferenceSetter">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOReferenceSetter"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceSetter.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOManyReferenceSetter">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOManyReferenceSetter"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertySetter.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOVersionPropertySetter">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOVersionPropertySetter"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/info/ClassServerInfo.java" type="org.eclipse.emf.cdo.server.internal.hibernate.info.ClassServerInfo">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.info.ClassServerInfo"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxy.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionProxy">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionProxy"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreReader.java" type="org.eclipse.emf.cdo.server.internal.hibernate.HibernateStoreReader">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.HibernateStoreReader"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyGetter.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOPropertyGetter">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOPropertyGetter"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java" type="org.eclipse.emf.cdo.server.internal.hibernate.HibernateStoreAccessor">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.HibernateStoreAccessor"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDUserType">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDUserType"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertySetter.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOPropertySetter">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOPropertySetter"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreWriter.java" type="org.eclipse.emf.cdo.server.internal.hibernate.HibernateStoreWriter">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.HibernateStoreWriter"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/bundle/OM.java" type="org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM">
+ <filter id="305365105">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM"/>
+ <message_argument value="org.eclipse.emf.cdo.server.hibernate_1.0.1"/>
+ </message_arguments>
+ </filter>
+ </resource>
+</component>
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.server.hibernate/META-INF/MANIFEST.MF
index d719f27756..d78930b114 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/META-INF/MANIFEST.MF
@@ -13,10 +13,10 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
org.eclipse.emf.cdo.server;bundle-version="[1.0.0,2.0.0)";visibility:=reexport,
org.eclipse.emf.cdo.server.hibernate.id;bundle-version="[1.0.0,2.0.0)";visibility:=reexport
Export-Package: org.eclipse.emf.cdo.server.hibernate;version="1.0.0",
- org.eclipse.emf.cdo.server.internal.hibernate;version="1.0.0",
- org.eclipse.emf.cdo.server.internal.hibernate.bundle;version="1.0.0",
- org.eclipse.emf.cdo.server.internal.hibernate.info;version="1.0.0",
- org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;version="1.0.0"
+ org.eclipse.emf.cdo.server.internal.hibernate;version="1.0.0";x-internal:=true,
+ org.eclipse.emf.cdo.server.internal.hibernate.bundle;version="1.0.0";x-internal:=true,
+ org.eclipse.emf.cdo.server.internal.hibernate.info;version="1.0.0";x-internal:=true,
+ org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;version="1.0.0";x-internal:=true
Import-Package: org.hibernate;version="[3.2.0,4.0.0)",
org.hibernate.cfg;version="[3.2.0,4.0.0)",
org.hibernate.collection;version="[3.2.0,4.0.0)",
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/mappings/resource.hbm.xml b/plugins/org.eclipse.emf.cdo.server.hibernate/mappings/resource.hbm.xml
index f369963959..168b456ce9 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/mappings/resource.hbm.xml
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/mappings/resource.hbm.xml
@@ -15,7 +15,7 @@
<meta attribute="syntheticVersion">true</meta>
</version>
<property name="path" type="string" not-null="true" length="255" />
- <list name="contents" lazy="true" cascade="all,delete-orphan">
+ <list name="contents" lazy="false" cascade="all,delete-orphan">
<key/>
<list-index/>
<element type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDUserType">
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java
index e01d838c31..624f4eef48 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java
@@ -13,12 +13,16 @@ package org.eclipse.emf.cdo.server.internal.hibernate;
import org.eclipse.emf.cdo.internal.server.StoreAccessor;
import org.eclipse.emf.cdo.server.ISession;
+import org.eclipse.emf.cdo.server.IStoreReader;
import org.eclipse.emf.cdo.server.IView;
+import org.eclipse.emf.cdo.server.StoreUtil;
import org.eclipse.emf.cdo.server.hibernate.IHibernateStoreAccessor;
import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.PersistableListHolder;
import org.eclipse.net4j.util.om.trace.ContextTracer;
+import org.hibernate.FlushMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
@@ -32,6 +36,8 @@ public class HibernateStoreAccessor extends StoreAccessor implements IHibernateS
private Session hibernateSession;
+ private boolean errorOccured = false;
+
protected HibernateStoreAccessor(HibernateStore store, ISession session)
{
super(store, session);
@@ -50,36 +56,34 @@ public class HibernateStoreAccessor extends StoreAccessor implements IHibernateS
}
}
- protected Session createHibernateSession()
- {
- if (TRACER.isEnabled())
- {
- TRACER.trace("Creating hibernate session and setting it in threadlocal HibernateThreadContext");
- }
-
- SessionFactory sessionFactory = getStore().getHibernateSessionFactory();
- Session session = sessionFactory.openSession();
- HibernateThreadContext.setSession(session);
- return session;
- }
-
@Override
protected void doRelease()
{
if (TRACER.isEnabled())
{
- TRACER.trace("Releasing hibernate session");
+ TRACER.trace("Committing/rollback and closing hibernate session");
}
- HibernateThreadContext.setSession(null);
- clearHibernateSession();
+ // this try/catch can disappear when in transaction commit the release
+ // of the accessor is done after the
+ try
+ {
+ // ugly cast
+ StoreUtil.setReader((IStoreReader)this);
+ endHibernateSession();
+ PersistableListHolder.getInstance().clearListMapping();
+ }
+ finally
+ {
+ StoreUtil.setReader(null);
+ }
}
/** Clears the current hibernate session and sets a new one in the thread context */
public void resetHibernateSession()
{
- clearHibernateSession();
- getHibernateSession();
+ endHibernateSession();
+ beginHibernateSession();
}
@Override
@@ -88,23 +92,77 @@ public class HibernateStoreAccessor extends StoreAccessor implements IHibernateS
return (HibernateStore)super.getStore();
}
- public void clearHibernateSession()
+ /**
+ * @since 1.0 - 6 July 2008
+ */
+ public Session createHibernateSession() {
+ beginHibernateSession();
+ return getHibernateSession();
+ }
+
+ /**
+ * @since 1.0 - 6 July 2008
+ */
+ public void clearHibernateSession() {
+ endHibernateSession();
+ }
+
+ /**
+ * starts a hibernate session and begins a transaction
+ *
+ * @since 1.0 - 6 July 2008
+ */
+ public void beginHibernateSession()
{
if (TRACER.isEnabled())
{
- TRACER.trace("Removing hibernate session");
+ TRACER.trace("Creating hibernate session and transaction");
+ }
+ assert hibernateSession == null;
+ final SessionFactory sessionFactory = getStore().getHibernateSessionFactory();
+ hibernateSession = sessionFactory.openSession();
+ hibernateSession.beginTransaction();
+ hibernateSession.setFlushMode(FlushMode.COMMIT);
+ }
+
+ /**
+ * commits/rollbacks and closes the session
+ *
+ * @since 1.0 - 6 July 2008
+ */
+ public void endHibernateSession()
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Closing hibernate session");
}
if (hibernateSession != null && hibernateSession.isOpen())
{
- if (TRACER.isEnabled())
+ try
{
- TRACER.trace("Closing hibernate session");
+ if (isErrorOccured())
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Rolling back hb transaction");
+ }
+ hibernateSession.getTransaction().rollback();
+ }
+ else
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.trace("Committing hb transaction");
+ }
+ hibernateSession.getTransaction().commit();
+ }
+ }
+ finally
+ {
+ hibernateSession.close();
}
-
- hibernateSession.close();
}
-
hibernateSession = null;
}
@@ -112,9 +170,25 @@ public class HibernateStoreAccessor extends StoreAccessor implements IHibernateS
{
if (hibernateSession == null)
{
- hibernateSession = createHibernateSession();
+ beginHibernateSession();
}
return hibernateSession;
}
+
+ /**
+ * @since 1.0 - 6 July 2008
+ */
+ public boolean isErrorOccured()
+ {
+ return errorOccured;
+ }
+
+ /**
+ * @since 1.0
+ */
+ public void setErrorOccured(boolean errorOccured)
+ {
+ this.errorOccured = errorOccured;
+ }
}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreReader.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreReader.java
index 2424eaf0cb..405c82dbe5 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreReader.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreReader.java
@@ -12,6 +12,7 @@
package org.eclipse.emf.cdo.server.internal.hibernate;
import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDTemp;
import org.eclipse.emf.cdo.common.model.CDOClassRef;
import org.eclipse.emf.cdo.common.model.CDOFeature;
import org.eclipse.emf.cdo.common.model.CDOPackage;
@@ -20,9 +21,11 @@ import org.eclipse.emf.cdo.common.model.resource.CDOResourceClass;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.server.ISession;
import org.eclipse.emf.cdo.server.IView;
+import org.eclipse.emf.cdo.server.StoreUtil;
import org.eclipse.emf.cdo.server.hibernate.IHibernateStoreReader;
import org.eclipse.emf.cdo.server.hibernate.id.CDOIDHibernate;
import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM;
+import org.eclipse.emf.cdo.spi.common.CDOIDLongImpl;
import org.eclipse.net4j.util.collection.CloseableIterator;
import org.eclipse.net4j.util.om.trace.ContextTracer;
@@ -32,6 +35,7 @@ import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;
+import java.io.Serializable;
import java.util.Collection;
import java.util.List;
@@ -46,11 +50,13 @@ public class HibernateStoreReader extends HibernateStoreAccessor implements IHib
public HibernateStoreReader(HibernateStore store, ISession session)
{
super(store, session);
+ StoreUtil.setReader(this);
}
protected HibernateStoreReader(HibernateStore store, IView view)
{
super(store, view);
+ StoreUtil.setReader(this);
}
public HibernateStoreChunkReader createChunkReader(CDORevision revision, CDOFeature feature)
@@ -63,6 +69,25 @@ public class HibernateStoreReader extends HibernateStoreAccessor implements IHib
throw new UnsupportedOperationException();
}
+ @Override
+ // this method can disappear when in transaction commit the release
+ // of the accessor is done before the StoreUtil.setReader(null),
+ // see the Transaction
+ protected void doRelease()
+ {
+ try
+ {
+ // ugly cast
+ StoreUtil.setReader(this);
+ super.doRelease();
+ }
+ finally
+ {
+ StoreUtil.setReader(null);
+ HibernateThreadContext.setCommitContext(null);
+ }
+ }
+
public CDOClassRef readObjectType(CDOID id)
{
CDORevision cdoRevision = readRevision(id, -1);
@@ -113,8 +138,14 @@ public class HibernateStoreReader extends HibernateStoreAccessor implements IHib
throw new IllegalArgumentException("ID must be not null");
}
- if (!(id instanceof CDOIDHibernate))
- {
+ Serializable idValue;
+ if (id instanceof CDOIDLongImpl) {
+ idValue = ((CDOIDLongImpl)id).getLongValue();
+ } else if (id instanceof CDOIDTemp) {
+ idValue = new Long(((CDOIDTemp)id).getIntValue());
+ } else if (id instanceof CDOIDHibernate) {
+ idValue = ((CDOIDHibernate)id).getId();
+ } else {
throw new IllegalArgumentException("ID type " + id.getClass().getName() + " not supported by hibernate reader");
}
@@ -126,7 +157,7 @@ public class HibernateStoreReader extends HibernateStoreAccessor implements IHib
Session session = getHibernateSession();
Query qry = session.createQuery("select path from " + CDOResourceClass.NAME + " where id=:id");
CDOIDHibernate idHibernate = (CDOIDHibernate)id;
- qry.setParameter("id", idHibernate.getId());
+ qry.setParameter("id", idValue);
final List<?> result = qry.list();
if (result.size() == 0)
{
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreWriter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreWriter.java
index e8b84118a6..23134f5591 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreWriter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreWriter.java
@@ -11,6 +11,8 @@
**************************************************************************/
package org.eclipse.emf.cdo.server.internal.hibernate;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDTemp;
import org.eclipse.emf.cdo.common.model.CDOClassProxy;
import org.eclipse.emf.cdo.common.model.CDOFeature;
import org.eclipse.emf.cdo.common.model.CDOPackage;
@@ -54,12 +56,11 @@ public class HibernateStoreWriter extends HibernateStoreReader implements IHiber
try
{
// start with fresh hibernate session
- Session session = getHibernateSession();
+ final Session session = getHibernateSession();
session.setFlushMode(FlushMode.COMMIT);
- session.beginTransaction();
for (Object o : context.getNewObjects())
{
- CDORevision cdoRevision = (CDORevision)o;
+ final CDORevision cdoRevision = (CDORevision)o;
session.save(HibernateUtil.getInstance().getEntityName(cdoRevision), o);
if (TRACER.isEnabled())
{
@@ -72,7 +73,7 @@ public class HibernateStoreWriter extends HibernateStoreReader implements IHiber
{
try
{
- CDORevision cdoRevision = (CDORevision)o;
+ final CDORevision cdoRevision = (CDORevision)o;
if (cdoRevision instanceof InternalCDORevision)
{
((InternalCDORevision)cdoRevision).setVersion(cdoRevision.getVersion() - 1);
@@ -91,29 +92,18 @@ public class HibernateStoreWriter extends HibernateStoreReader implements IHiber
}
}
- if (TRACER.isEnabled())
- {
- TRACER.trace("Commit hibernate transaction");
- }
-
- session.getTransaction().commit();
+ // does the commit
+ endHibernateSession();
+ context.applyIDMappings();
}
finally
{
- if (TRACER.isEnabled())
- {
- TRACER.trace("Clearing used hibernate session");
- }
-
- HibernateThreadContext.setCommitContext(null);
}
if (TRACER.isEnabled())
{
TRACER.trace("Applying id mappings");
}
-
- context.applyIDMappings();
}
@Override
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateThreadContext.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateThreadContext.java
index 9cca7a24ef..942ffb0aea 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateThreadContext.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateThreadContext.java
@@ -10,6 +10,7 @@
**************************************************************************/
package org.eclipse.emf.cdo.server.internal.hibernate;
+import org.eclipse.emf.cdo.server.StoreUtil;
import org.eclipse.emf.cdo.server.IStoreWriter.CommitContext;
import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM;
@@ -19,48 +20,13 @@ import org.hibernate.Session;
/**
* @author Martin Taal
- */
+ */
public class HibernateThreadContext
{
private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, HibernateThreadContext.class);
private static ThreadLocal<HibernateCommitContext> commitContext = new ThreadLocal<HibernateCommitContext>();
- private static ThreadLocal<Session> session = new ThreadLocal<Session>();
-
- public static Session getSession()
- {
- Session result = session.get();
- if (result == null)
- {
- throw new IllegalStateException("Session not set");
- }
-
- return result;
- }
-
- public static void setSession(Session newSession)
- {
- if (newSession != null && session.get() != null)
- {
- throw new IllegalStateException("Session already set");
- }
-
- if (TRACER.isEnabled())
- {
- if (newSession == null)
- {
- TRACER.trace("Clearing session in threadlocal");
- }
- else
- {
- TRACER.trace("Setting session in threadlocal");
- }
- }
-
- session.set(newSession);
- }
-
public static HibernateCommitContext getHibernateCommitContext()
{
HibernateCommitContext result = commitContext.get();
@@ -76,7 +42,7 @@ public class HibernateThreadContext
{
return commitContext.get() != null;
}
-
+
public static void setCommitContext(CommitContext newCommitContext)
{
if (newCommitContext != null && commitContext.get() != null)
@@ -108,4 +74,8 @@ public class HibernateThreadContext
commitContext.set(hcc);
}
}
+
+ public static Session getSession() {
+ return ((HibernateStoreReader)StoreUtil.getReader()).getHibernateSession();
+ }
}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java
index 37d5de5b41..7ac5cf336f 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java
@@ -14,6 +14,7 @@ import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDTemp;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.server.IStore;
+import org.eclipse.emf.cdo.server.StoreUtil;
import org.eclipse.emf.cdo.server.hibernate.id.CDOIDHibernate;
import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
@@ -46,11 +47,20 @@ public class HibernateUtil
HibernateUtil.instance = instance;
}
+ /**
+ * @since 1.0 - 6 July 2008
+ */
+ public Session getHibernateSession()
+ {
+ final HibernateStoreReader storeReader = (HibernateStoreReader)StoreUtil.getReader();
+ return storeReader.getHibernateSession();
+ }
+
/** Converts from a Map<String, String> to a Properties */
public Properties getPropertiesFromStore(IStore store)
{
- Properties props = new Properties();
- Map<String, String> storeProps = store.getRepository().getProperties();
+ final Properties props = new Properties();
+ final Map<String, String> storeProps = store.getRepository().getProperties();
for (String key : storeProps.keySet())
{
props.setProperty(key, storeProps.get(key));
@@ -71,13 +81,13 @@ public class HibernateUtil
*/
public CDOIDHibernate getCDOIDHibernate(CDOID cdoID)
{
- CDORevision cdoRevision = getCDORevision(cdoID);
+ final CDORevision cdoRevision = getCDORevision(cdoID);
if (cdoRevision.getID() instanceof CDOIDHibernate)
{
return (CDOIDHibernate)cdoRevision.getID();
}
- Session session = HibernateThreadContext.getSession();
+ final Session session = getHibernateSession();
session.saveOrUpdate(cdoRevision);
if (!(cdoRevision.getID() instanceof CDOIDHibernate))
{
@@ -113,7 +123,7 @@ public class HibernateUtil
if (HibernateThreadContext.isHibernateCommitContextSet())
{
- HibernateCommitContext hcc = HibernateThreadContext.getHibernateCommitContext();
+ final HibernateCommitContext hcc = HibernateThreadContext.getHibernateCommitContext();
CDORevision revision;
if ((revision = hcc.getDirtyObject(id)) != null)
{
@@ -127,7 +137,7 @@ public class HibernateUtil
// maybe the temp was already translated
if (id instanceof CDOIDTemp)
{
- CDOID newID = hcc.getCommitContext().getIDMappings().get(id);
+ final CDOID newID = hcc.getCommitContext().getIDMappings().get(id);
if (newID != null)
{
return getCDORevision(newID);
@@ -141,8 +151,11 @@ public class HibernateUtil
+ id.getClass().getName() + ": " + id);
}
- CDOIDHibernate cdoIDHibernate = (CDOIDHibernate)id;
- Session session = HibernateThreadContext.getSession();
+ final CDOIDHibernate cdoIDHibernate = (CDOIDHibernate)id;
+ final Session session = getHibernateSession();
return (CDORevision)session.get(cdoIDHibernate.getEntityName(), cdoIDHibernate.getId());
}
+
+ // get the revision from the context
+
}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.java
index e03ec49bed..68c70f772c 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.java
@@ -15,6 +15,8 @@ import org.eclipse.emf.cdo.common.id.CDOIDTemp;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.server.hibernate.id.CDOIDHibernate;
import org.eclipse.emf.cdo.server.hibernate.internal.id.CDOIDHibernateFactoryImpl;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateCommitContext;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateThreadContext;
import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
import org.eclipse.net4j.util.WrappedException;
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.java
index 6987480051..6a14f30312 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.java
@@ -10,6 +10,10 @@
**************************************************************************/
package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDTemp;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateCommitContext;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateThreadContext;
import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
import org.eclipse.net4j.util.collection.MoveableArrayList;
@@ -65,7 +69,7 @@ public class CDOManyReferenceGetter extends CDOPropertyGetter
InternalCDORevision revision = (InternalCDORevision)target;
revision.setValue(getCDOFeature(), list);
}
-
+
// Wrap the moveablearraylist
HibernateMoveableListWrapper wrapper = new HibernateMoveableListWrapper();
wrapper.setDelegate(list);
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceSetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceSetter.java
index 6e4f178a24..388594924c 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceSetter.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceSetter.java
@@ -15,6 +15,8 @@ import org.hibernate.collection.PersistentCollection;
import org.hibernate.collection.PersistentList;
import org.hibernate.engine.SessionFactoryImplementor;
+import java.util.List;
+
/**
* @author Martin Taal
*/
@@ -35,7 +37,9 @@ public class CDOManyReferenceSetter extends CDOPropertySetter
{
throw new IllegalArgumentException("Value is not a persistentlist but a " + value.getClass().getName());
}
-
+
+ super.set(target, new MoveableListWrapper((List)value), factory);
+
// Only set it in the listholder
PersistableListHolder.getInstance().putListMapping(target, getCDOFeature(), (PersistentCollection)value);
}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java
index aaafdc0aa7..306d3a1cba 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java
@@ -203,7 +203,10 @@ public class CDORevisionTuplizer extends AbstractEntityTuplizer
}
CDOFeature cdoFeature = getCDOClass().lookupFeature(mappedProperty.getName());
- if (cdoFeature.isReference() && cdoFeature.isMany())
+ if (cdoFeature == null) {
+ return new CDOVirtualPropertyGetter(this, mappedProperty.getName());
+ }
+ else if (cdoFeature.isReference() && cdoFeature.isMany())
{
return new CDOManyReferenceGetter(this, mappedProperty.getName());
}
@@ -238,7 +241,10 @@ public class CDORevisionTuplizer extends AbstractEntityTuplizer
}
CDOFeature cdoFeature = getCDOClass().lookupFeature(mappedProperty.getName());
- if (cdoFeature.isReference() && cdoFeature.isMany())
+ if (cdoFeature == null) {
+ return new CDOVirtualPropertySetter(this, mappedProperty.getName());
+ }
+ else if (cdoFeature.isReference() && cdoFeature.isMany())
{
return new CDOManyReferenceSetter(this, mappedProperty.getName());
}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVirtualPropertyGetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVirtualPropertyGetter.java
new file mode 100644
index 0000000000..24214512ab
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVirtualPropertyGetter.java
@@ -0,0 +1,95 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2008 Martin Taal
+ * 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:
+ * Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ **************************************************************************/
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDTemp;
+import org.eclipse.emf.cdo.server.hibernate.id.CDOIDHibernate;
+import org.eclipse.emf.cdo.server.hibernate.internal.id.CDOIDHibernateFactoryImpl;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateThreadContext;
+import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.property.Getter;
+
+import java.lang.reflect.Method;
+import java.util.Map;
+
+/**
+ * Gets resourceId, containedId and containingFeatureId
+ *
+ * @author Martin Taal
+ */
+public class CDOVirtualPropertyGetter implements Getter
+{
+ private static final long serialVersionUID = 1L;
+ private final boolean isResourceIdProperty;
+ private final boolean isContainerIdProperty;
+ private final boolean isContainingFeatureIdProperty;
+ private final String propertyName;
+
+ public CDOVirtualPropertyGetter(CDORevisionTuplizer tuplizer, String propertyName)
+ {
+ isResourceIdProperty = propertyName.compareTo("resourceID") == 0;
+ isContainerIdProperty = propertyName.compareTo("containerID") == 0;
+ isContainingFeatureIdProperty = propertyName.compareTo("containingFeatureID") == 0;
+ this.propertyName = propertyName;
+ if (!isResourceIdProperty && !isContainerIdProperty && !isContainingFeatureIdProperty) {
+ throw new IllegalArgumentException("Propertyname " + propertyName + " not supported must be one of resourceID, containerID, containingFeatureID");
+ }
+ }
+
+ public Object get(Object target) throws HibernateException
+ {
+ InternalCDORevision revision = (InternalCDORevision)target;
+ if (isResourceIdProperty) {
+ final CDOID cdoID = revision.getResourceID();
+ if (cdoID instanceof CDOIDTemp) {
+ // TODO: externalize entityname
+ final CDOIDHibernate hibernateID = CDOIDHibernateFactoryImpl.getInstance().createCDOID(((CDOIDTemp)cdoID).getIntValue(), "CDOResource");
+ revision.setResourceID(hibernateID);
+ if (HibernateThreadContext.isHibernateCommitContextSet()) {
+ HibernateThreadContext.getHibernateCommitContext().setNewID(cdoID, hibernateID);
+ }
+ }
+
+ return revision.getResourceID();
+ } else if (isContainerIdProperty) {
+ return revision.getContainerID();
+ } else if (isContainingFeatureIdProperty) {
+ return revision.getContainingFeatureID();
+ }
+ throw new IllegalArgumentException("Propertyname " + propertyName + " not supported must be one of resourceID, containerID, containingFeatureID");
+ }
+
+ @SuppressWarnings("unchecked")
+ public Object getForInsert(Object target, Map mergeMap, SessionImplementor session) throws HibernateException
+ {
+ return get(target);
+ }
+
+ public Method getMethod()
+ {
+ return null;
+ }
+
+ public String getMethodName()
+ {
+ return null;
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class getReturnType()
+ {
+ return Object.class;
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVirtualPropertySetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVirtualPropertySetter.java
new file mode 100644
index 0000000000..0c945b120e
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVirtualPropertySetter.java
@@ -0,0 +1,74 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2008 Martin Taal
+ * 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:
+ * Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ **************************************************************************/
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.property.Getter;
+import org.hibernate.property.Setter;
+
+import java.lang.reflect.Method;
+import java.util.Map;
+
+/**
+ * Gets resourceId, containedId and containingFeatureId
+ *
+ * @author Martin Taal
+ */
+public class CDOVirtualPropertySetter implements Setter
+{
+ private static final long serialVersionUID = 1L;
+ private final boolean isResourceIdProperty;
+ private final boolean isContainerIdProperty;
+ private final boolean isContainingFeatureIdProperty;
+ private final String propertyName;
+
+ public CDOVirtualPropertySetter(CDORevisionTuplizer tuplizer, String propertyName)
+ {
+ isResourceIdProperty = propertyName.compareTo("resourceID") == 0;
+ isContainerIdProperty = propertyName.compareTo("containerID") == 0;
+ isContainingFeatureIdProperty = propertyName.compareTo("containingFeatureID") == 0;
+ this.propertyName = propertyName;
+ if (!isResourceIdProperty && !isContainerIdProperty && !isContainingFeatureIdProperty) {
+ throw new IllegalArgumentException("Propertyname " + propertyName + " not supported must be one of resourceID, containerID, containingFeatureID");
+ }
+ }
+
+ public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException
+ {
+ InternalCDORevision revision = (InternalCDORevision)target;
+ if (isResourceIdProperty) {
+ revision.setResourceID((CDOID)value);
+ return;
+ } else if (isContainerIdProperty) {
+ revision.setContainerID((CDOID)value);
+ return;
+ } else if (isContainingFeatureIdProperty) {
+ revision.setContainingFeatureID((Integer)value);
+ return;
+ }
+ throw new IllegalArgumentException("Propertyname " + propertyName + " not supported must be one of resourceID, containerID, containingFeatureID");
+ }
+
+ public Method getMethod()
+ {
+ return null;
+ }
+
+ public String getMethodName()
+ {
+ return null;
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/MoveableListWrapper.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/MoveableListWrapper.java
new file mode 100644
index 0000000000..5c24eb7bf2
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/MoveableListWrapper.java
@@ -0,0 +1,217 @@
+/***************************************************************************
+ * Copyright (c) 2008 - 2008 Martin Taal 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:
+ * Martin Taal - initial api
+ **************************************************************************/
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.net4j.util.collection.MoveableList;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+/**
+ * Wraps a list and adds the move operation. The delegate should normally be a persistentlist.
+ *
+ * @author Martin Taal
+ */
+public class MoveableListWrapper implements MoveableList<Object>
+{
+ private List<Object> delegate;
+
+ public MoveableListWrapper(List<Object> delegate)
+ {
+ this.delegate = delegate;
+ }
+
+ /**
+ * @return the delegate
+ */
+ public List<Object> getDelegate()
+ {
+ return delegate;
+ }
+
+ public Object move(int targetIndex, int sourceIndex)
+ {
+ int size = size();
+ if (sourceIndex >= size)
+ {
+ throw new IndexOutOfBoundsException("sourceIndex=" + sourceIndex + ", size=" + size);
+ }
+
+ if (targetIndex >= size)
+ {
+ throw new IndexOutOfBoundsException("targetIndex=" + targetIndex + ", size=" + size);
+ }
+
+ Object object = get(sourceIndex);
+ if (targetIndex == sourceIndex)
+ {
+ return object;
+ }
+
+ if (targetIndex < sourceIndex)
+ {
+ moveUp1(targetIndex, sourceIndex - targetIndex);
+ }
+ else
+ {
+ moveDown1(targetIndex, targetIndex - sourceIndex);
+ }
+
+ set(targetIndex, object);
+ return object;
+ }
+
+ private void moveUp1(int index, int count)
+ {
+ for (int i = count; i > 0; i--)
+ {
+ set(index + i, get(index + i - 1));
+ }
+ }
+
+ private void moveDown1(int index, int count)
+ {
+ for (int i = count; i > 0; i--)
+ {
+ set(index - i, get(index - i + 1));
+ }
+ }
+
+ public void add(int index, Object element)
+ {
+ delegate.add(index, element);
+ }
+
+ public boolean add(Object e)
+ {
+ return delegate.add(e);
+ }
+
+ public boolean addAll(Collection<? extends Object> c)
+ {
+ return delegate.addAll(c);
+ }
+
+ public boolean addAll(int index, Collection<? extends Object> c)
+ {
+ return delegate.addAll(index, c);
+ }
+
+ public void clear()
+ {
+ delegate.clear();
+ }
+
+ public boolean contains(Object o)
+ {
+ return delegate.contains(o);
+ }
+
+ public boolean containsAll(Collection<?> c)
+ {
+ return delegate.containsAll(c);
+ }
+
+ @Override
+ public boolean equals(Object o)
+ {
+ return delegate.equals(o);
+ }
+
+ public Object get(int index)
+ {
+ return delegate.get(index);
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return delegate.hashCode();
+ }
+
+ public int indexOf(Object o)
+ {
+ return delegate.indexOf(o);
+ }
+
+ public boolean isEmpty()
+ {
+ return delegate.isEmpty();
+ }
+
+ public Iterator<Object> iterator()
+ {
+ return delegate.iterator();
+ }
+
+ public int lastIndexOf(Object o)
+ {
+ return delegate.lastIndexOf(o);
+ }
+
+ public ListIterator<Object> listIterator()
+ {
+ return delegate.listIterator();
+ }
+
+ public ListIterator<Object> listIterator(int index)
+ {
+ return delegate.listIterator(index);
+ }
+
+ public Object remove(int index)
+ {
+ return delegate.remove(index);
+ }
+
+ public boolean remove(Object o)
+ {
+ return delegate.remove(o);
+ }
+
+ public boolean removeAll(Collection<?> c)
+ {
+ return delegate.removeAll(c);
+ }
+
+ public boolean retainAll(Collection<?> c)
+ {
+ return delegate.retainAll(c);
+ }
+
+ public Object set(int index, Object element)
+ {
+ return delegate.set(index, element);
+ }
+
+ public int size()
+ {
+ return delegate.size();
+ }
+
+ public List<Object> subList(int fromIndex, int toIndex)
+ {
+ return delegate.subList(fromIndex, toIndex);
+ }
+
+ public Object[] toArray()
+ {
+ return delegate.toArray();
+ }
+
+ public <T> T[] toArray(T[] a)
+ {
+ return delegate.toArray(a);
+ }
+
+}
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/PersistableListHolder.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/PersistableListHolder.java
index 108747dca9..0c94082495 100644
--- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/PersistableListHolder.java
+++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/PersistableListHolder.java
@@ -66,6 +66,14 @@ public class PersistableListHolder
return listMapping.get();
}
+ /**
+ * @since 1.0 - 6 July 2008
+ */
+ public void clearListMapping()
+ {
+ listMapping.set(null);
+ }
+
public static PersistableListHolder getInstance()
{
return instance;

Back to the top