[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-6880) Implementations of org.hibernate.type.Type contain references to non-serializable entities
Steve Ebersole (JIRA)
noreply at atlassian.com
Tue Jan 3 12:29:19 EST 2012
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-6880?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=44836#comment-44836 ]
Steve Ebersole commented on HHH-6880:
-------------------------------------
And I totally do not understand:
{quote}
upgrading such a major library to a .0 version is not really an option.
{quote}
The mentioned changed (HHH-6822) will be included in 4.0.1 which is a bug fix release. If you don't upgrade major libraries for point releases god have mercy on your soul...
> Implementations of org.hibernate.type.Type contain references to non-serializable entities
> ------------------------------------------------------------------------------------------
>
> Key: HHH-6880
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6880
> Project: Hibernate Core
> Issue Type: Bug
> Components: core
> Affects Versions: 3.6.7
> Environment: Seen this on MySQL but I believe this is environment-agnostic
> Reporter: Mindaugas Žakšauskas
> Assignee: Steve Ebersole
> Priority: Critical
> Labels: serialization
> Time Spent: 59m
>
> This is a spin-off from
> - https://forum.hibernate.org/viewtopic.php?f=1&t=1013687&sid=e62b8ea711e4986a6ff419e3e641e2e8
> - http://stackoverflow.com/q/8404559/7345
> org.hibernate.cache.CacheKey is an object which is used for L2 cache notifications - e.g. to flush a cache on a different cluster node when a certain object has been updated.
> The problem comes from org.hibernate.cache.CacheKey carrying the type which (sometimes) happens to have a reference to objects like org.hibernate.impl.SessionFactoryImpl.
> This problem is actually not just theoretic but also causes real pain. First, it takes much longer to broadcast cache flush events. Secondly, I get this exception during deserialization of such a CacheKey:
> java.lang.NullPointerException
> at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:768)
> at org.hibernate.impl.SessionFactoryObjectFactory.getNamedInstance(SessionFactoryObjectFactory.java:159)
> at org.hibernate.impl.SessionFactoryImpl.readResolve(SessionFactoryImpl.java:753)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at java.io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:1061)
> at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1762)
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
> at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
> at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
> at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
> at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
> at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
> at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
> at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
> at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
> at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
> at java.io.ObjectInputStream.readUnshared(ObjectInputStream.java:441)
> at my.class.deserializeKey(EhcacheUtils.java:35)
> I have done a quick scan through all the types, and found these problems related to their serializability:
> 1) org.hibernate.type.CollectionType, org.hibernate.type.ComponentType and subclasses of both - they use attribute "typeScope" (of type TypeFactory.TypeScope) which is assigned in the constructor and kept in the but seems to be never used. The typeScope in turn has a reference to the SessionImpl. Can it simply be removed?
> 2) org.hibernate.type.EntityType (and its subclasses) stores typeScope and only uses it in the getter, so I guess it should be safe to remove it, too.
> 3) org.hibernate.type.SortedSetType and org.hibernate.type.SortedMapType keeps a reference to the comparator, but does not enforce its serializability. It should at least throw a runtime exception in org.hibernate.mapping.Collection::getComparator if the comparator is not serializable.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list