From: Andreas Müller Date: Wed, 4 Mar 2009 17:45:48 +0000 (+0000) Subject: Bug fix for HibernateProxyHelper (2.1) X-Git-Tag: 3.0.3~2627 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/commitdiff_plain/ab5846c67653e28f575510632a74b1a43a8fe088 Bug fix for HibernateProxyHelper (2.1) --- diff --git a/.gitattributes b/.gitattributes index 377565a1a9..ad781472ca 100644 --- a/.gitattributes +++ b/.gitattributes @@ -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 diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ProxyHelperHibernateImpl.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/hibernate/HibernateProxyHelper.java 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 ad557ac3c1..30153d8c47 100644 --- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ProxyHelperHibernateImpl.java +++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/hibernate/HibernateProxyHelper.java @@ -7,7 +7,7 @@ * See LICENSE.TXT at the top of this package for the full license terms. */ -package eu.etaxonomy.cdm.model.common; +package eu.etaxonomy.cdm.hibernate; import org.apache.log4j.Logger; import org.hibernate.proxy.HibernateProxy; @@ -17,16 +17,16 @@ import org.hibernate.proxy.HibernateProxy; * @created 03.03.2009 * @version 1.0 */ -public class ProxyHelperHibernateImpl implements IProxyHelper { +public class HibernateProxyHelper { @SuppressWarnings("unused") - private static final Logger logger = Logger.getLogger(ProxyHelperHibernateImpl.class); + private static final Logger logger = Logger.getLogger(HibernateProxyHelper.class); // ************************** Hibernate proxies *******************/ /* (non-Javadoc) * @see eu.etaxonomy.cdm.model.common.IProxyHelper#deproxy(java.lang.Object, java.lang.Class) */ - public T deproxy(Object object, Class clazz) throws ClassCastException { + public static T deproxy(Object object, Class clazz) throws ClassCastException { if (object instanceof HibernateProxy) { return clazz.cast(((HibernateProxy) object).getHibernateLazyInitializer().getImplementation()); } else { @@ -37,7 +37,7 @@ public class ProxyHelperHibernateImpl implements IProxyHelper { /* (non-Javadoc) * @see eu.etaxonomy.cdm.model.common.IProxyHelper#isInstanceOf(java.lang.Object, java.lang.Class) */ - public boolean isInstanceOf(Object object, Class clazz) throws ClassCastException { + public static boolean isInstanceOf(Object object, Class clazz) throws ClassCastException { if (clazz == null){ return false; } diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/CdmBase.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/CdmBase.java index c275da1fab..ff355ebe6a 100644 --- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/CdmBase.java +++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/CdmBase.java @@ -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 deproxy(Class 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 deproxy(Object object, Class clazz) throws ClassCastException { + return HibernateProxyHelper.deproxy(object, clazz); } public boolean isInstanceOf(Class 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 index ba44f7e1e3..0000000000 --- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IProxyHelper.java +++ /dev/null @@ -1,27 +0,0 @@ -package eu.etaxonomy.cdm.model.common; - -public interface IProxyHelper { - - // ************************** Hibernate proxies *******************/ - /** - * These methods are present due to HHH-1517 - that in a one-to-many - * relationship with a superclass at the "one" end, the proxy created - * by hibernate is the superclass, and not the subclass, resulting in - * a classcastexception when you try to cast it. - * - * Hopefully this will be resolved through improvements with the creation of - * proxy objects by hibernate and the following methods will become redundant, - * but for the time being . . . - * @param - * @param object - * @param clazz - * @return - * @throws ClassCastException - */ - public T deproxy(Object object, Class clazz) - throws ClassCastException; - - public boolean isInstanceOf(Object object, Class clazz) - throws ClassCastException; - -} \ No newline at end of file