Bug fix for HibernateProxyHelper (2.1)
authorAndreas Müller <a.mueller@bgbm.org>
Wed, 4 Mar 2009 17:45:48 +0000 (17:45 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Wed, 4 Mar 2009 17:45:48 +0000 (17:45 +0000)
.gitattributes
cdmlib-model/src/main/java/eu/etaxonomy/cdm/hibernate/HibernateProxyHelper.java [moved from cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ProxyHelperHibernateImpl.java with 76% similarity]
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/CdmBase.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IProxyHelper.java [deleted file]

index 377565a1a95f36574ef64611feeb6426a38e0176..ad781472cabc844781daa8b4b689e23a2e4ad69a 100644 (file)
@@ -820,6 +820,7 @@ cdmlib-model/README.TXT -text
 cdmlib-model/pom.xml -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/aspectj/PropertyChangeAspect.aj -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/datagenerator/TaxonGenerator.java -text
+cdmlib-model/src/main/java/eu/etaxonomy/cdm/hibernate/HibernateProxyHelper.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/jaxb/CdmNamespacePrefixMapper.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/jaxb/DateTimeAdapter.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/jaxb/FormattedText.java -text
@@ -861,7 +862,6 @@ cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IIdentifiableEntity.jav
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ILoadableTerm.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IMultiLanguageText.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IParsable.java -text
-cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IProxyHelper.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IReferencedEntity.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IRelated.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ISourceable.java -text
@@ -884,7 +884,6 @@ cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/OriginalSource.java -te
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/PartialUserType.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/PersistentMultiLanguageText.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/PersistentMultiLanguageTextType.java -text
-cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ProxyHelperHibernateImpl.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ReferencedEntityBase.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/RelationshipBase.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/RelationshipTermBase.java -text
similarity index 76%
rename from cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ProxyHelperHibernateImpl.java
rename to cdmlib-model/src/main/java/eu/etaxonomy/cdm/hibernate/HibernateProxyHelper.java
index ad557ac3c1ce9609e53c12e4460ad663d301d1c6..30153d8c47037e6e96f5ace7c46a1eb4c4af13f8 100644 (file)
@@ -7,7 +7,7 @@
 * See LICENSE.TXT at the top of this package for the full license terms.\r
 */\r
 \r
-package eu.etaxonomy.cdm.model.common;\r
+package eu.etaxonomy.cdm.hibernate;\r
 \r
 import org.apache.log4j.Logger;\r
 import org.hibernate.proxy.HibernateProxy;\r
@@ -17,16 +17,16 @@ import org.hibernate.proxy.HibernateProxy;
  * @created 03.03.2009\r
  * @version 1.0\r
  */\r
-public class ProxyHelperHibernateImpl implements IProxyHelper {\r
+public class HibernateProxyHelper {\r
        @SuppressWarnings("unused")\r
-       private static final Logger logger = Logger.getLogger(ProxyHelperHibernateImpl.class);\r
+       private static final Logger logger = Logger.getLogger(HibernateProxyHelper.class);\r
        \r
        \r
        // ************************** Hibernate proxies *******************/\r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.model.common.IProxyHelper#deproxy(java.lang.Object, java.lang.Class)\r
         */\r
-        public <T> T deproxy(Object object, Class<T> clazz) throws ClassCastException {\r
+        public static <T> T deproxy(Object object, Class<T> clazz) throws ClassCastException {\r
             if (object instanceof HibernateProxy) {\r
                 return clazz.cast(((HibernateProxy) object).getHibernateLazyInitializer().getImplementation());\r
             } else {\r
@@ -37,7 +37,7 @@ public class ProxyHelperHibernateImpl implements IProxyHelper {
         /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.model.common.IProxyHelper#isInstanceOf(java.lang.Object, java.lang.Class)\r
         */\r
-       public boolean isInstanceOf(Object object, Class clazz) throws ClassCastException {\r
+       public static boolean isInstanceOf(Object object, Class clazz) throws ClassCastException {\r
             if (clazz == null){\r
                 return false;\r
             }\r
index c275da1fabfed3a21037fc96bdca8c880ccc5d86..ff355ebe6a6b9d18579f10f313aef551b612f94e 100644 (file)
@@ -32,6 +32,7 @@ import org.hibernate.annotations.Type;
 import org.hibernate.search.annotations.DocumentId;
 import org.joda.time.DateTime;
 
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.jaxb.DateTimeAdapter;
 import eu.etaxonomy.cdm.jaxb.UUIDAdapter;
 import eu.etaxonomy.cdm.model.agent.Person;
@@ -63,8 +64,6 @@ public abstract class CdmBase implements Serializable, ICdmBase{
        @SuppressWarnings("unused")
        private static final Logger logger = Logger.getLogger(CdmBase.class);
 
-       private static IProxyHelper proxyHelper = new ProxyHelperHibernateImpl();
-       
        @Transient
        @XmlTransient
        private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
@@ -229,12 +228,13 @@ public abstract class CdmBase implements Serializable, ICdmBase{
         * @return
         * @throws ClassCastException
         */
-        public <T extends CdmBase> T deproxy(Class<T> clazz) throws ClassCastException {
-                return proxyHelper.deproxy(this, clazz);
+       //non-static does not work because javassist already unwrapps the proxy before calling the method
+        public static <T extends CdmBase> T deproxy(Object object, Class<T> clazz) throws ClassCastException {
+                return HibernateProxyHelper.deproxy(object, clazz);
         }
                
         public boolean isInstanceOf(Class<? extends CdmBase> clazz) throws ClassCastException {
-            return proxyHelper.isInstanceOf(this, clazz);
+            return HibernateProxyHelper.isInstanceOf(this, clazz);
         }
 
 // ************* Object overrides *************************/ 
diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IProxyHelper.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IProxyHelper.java
deleted file mode 100644 (file)
index ba44f7e..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-package eu.etaxonomy.cdm.model.common;\r
-\r
-public interface IProxyHelper {\r
-\r
-       // ************************** Hibernate proxies *******************/\r
-       /**\r
-        * These methods are present due to HHH-1517 - that in a one-to-many\r
-        * relationship with a superclass at the "one" end, the proxy created\r
-        * by hibernate is the superclass, and not the subclass, resulting in\r
-        * a classcastexception when you try to cast it.\r
-        *\r
-        * Hopefully this will be resolved through improvements with the creation of\r
-        * proxy objects by hibernate and the following methods will become redundant,\r
-        * but for the time being . . .\r
-        * @param <T>\r
-        * @param object\r
-        * @param clazz\r
-        * @return\r
-        * @throws ClassCastException\r
-        */\r
-       public <T> T deproxy(Object object, Class<T> clazz)\r
-                       throws ClassCastException;\r
-\r
-       public boolean isInstanceOf(Object object, Class clazz)\r
-                       throws ClassCastException;\r
-\r
-}
\ No newline at end of file