[hibernate-issues] [Hibernate-JIRA] Commented: (EJB-192) Serialization exception with hashCode() and eager-eager

Emmanuel Bernard (JIRA) noreply at atlassian.com
Mon Apr 16 15:11:04 EDT 2007


    [ http://opensource.atlassian.com/projects/hibernate/browse/EJB-192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_26737 ] 

Emmanuel Bernard commented on EJB-192:
--------------------------------------

I am contemplating closing this one since it's a Sun's JVM bug.

> Serialization exception with hashCode() and eager-eager
> -------------------------------------------------------
>
>                 Key: EJB-192
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/EJB-192
>             Project: Hibernate Entity Manager
>          Issue Type: Bug
>          Components: EntityManager
>    Affects Versions: 3.2.0.cr1
>         Environment: JBoss 4.0.4.GA-patch1  and SUN JDK 1.5.0_07 on Windows XP
>            Reporter: Stefan Norberg
>         Attachments: eager-eager.jar
>
>
> I have a problem with some weird stuff going on when I implement the equals()/hashCode() methods in my entites. The short version is that I get a NullPointerException on deserialization on the client side after a remote server request when I am using eager fetching in both Team and Player. If I set the player-> team to lazy it works.
> More details are on the Hibernate forum:
> http://forum.hibernate.org/viewtopic.php?p=2308640#2308640
> I'm going to post the test case here tomorrow when I get the code from work.
> All the fields in the entity are null when the the object hits the deserialization code and hence the exception... But the name is of course initialized when shown in my test case app later. What gives? Seems to me the deserialization is broken. Perhaps this is a bug in JBoss remoting, but since I can only get this with the Entity Manager I posted here. 
> This workaround works fine I think, but something seems terribly broken in either Hibernate or Jboss (remoting?).
> public boolean equals(Object obj) {
> if (name == null) return super.equals(obj);
> if (obj instanceof Team) {
> Team other = (Team) obj;
> return other.getName().equals(this.getName());
> }
> return false;
> }
> public int hashCode() {
> if (name == null) return super.hashCode(obj);
> return name.hashCode();
> }
> Full stack trace of any exception that occurs:
> javax.ejb.EJBException: java.lang.NullPointerException
>    at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:69)
>    at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83)
>    at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:197)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:225)
>    at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
>    at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
>    at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:828)
>    at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:681)
>    at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:358)
>    at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:412)
>    at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:239)
> Caused by: java.lang.NullPointerException
>    at com.weirdstuff.Player.hashCode(Player.java:83)
>    at java.util.HashMap.hash(HashMap.java:264)
>    at java.util.HashMap.put(HashMap.java:382)
>    at java.util.HashSet.add(HashSet.java:194)
>    at java.util.AbstractCollection.addAll(AbstractCollection.java:318)
>    at org.hibernate.collection.PersistentSet.endRead(PersistentSet.java:273)
>    at org.hibernate.engine.CollectionLoadContext.endLoadingCollection(CollectionLoadContext.java:183)
>    at org.hibernate.engine.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:268)
>    at org.hibernate.engine.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:249)
>    at org.hibernate.loader.Loader.endCollectionLoad(Loader.java:866)
>    at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:853)
>    at org.hibernate.loader.Loader.doQuery(Loader.java:717)
>    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
>    at org.hibernate.loader.Loader.loadEntity(Loader.java:1785)
>    at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
>    at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
>    at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:2821)
>    at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:370)
>    at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:351)
>    at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:122)
>    at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:178)
>    at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:86)
>    at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:871)
>    at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:839)
>    at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:266)
>    at org.hibernate.type.EntityType.resolve(EntityType.java:303)
>    at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:116)
>    at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842)
>    at org.hibernate.loader.Loader.doQuery(Loader.java:717)
>    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
>    at org.hibernate.loader.Loader.doList(Loader.java:2145)
>    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
>    at org.hibernate.loader.Loader.list(Loader.java:2024)
>    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:392)
>    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:333)
>    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
>    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1114)
>    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
>    at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:53)
>    at com.weirdstuff.FacadeBean.getPlayers(FacadeBean.java:17)
>    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:585)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
>    at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
>    at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
>    at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:197)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:225)
>    at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
>    at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
>    at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:828)
>    at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:681)
>    at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:358)
>    at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:412)
>    at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:239)
>    at org.jboss.remoting.RemoteClientInvoker.invoke(RemoteClientInvoker.java:190)
>    at org.jboss.remoting.Client.invoke(Client.java:525)
>    at org.jboss.remoting.Client.invoke(Client.java:488)
>    at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:55)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:55)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:65)
>    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
>    at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:102)
>    at $Proxy0.getPlayers(Unknown Source)
>    at com.weirdstuff.TestHashCodeClient.testGetPlayer(TestHashCodeClient.java:51)
>    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:585)
>    at junit.framework.TestCase.runTest(TestCase.java:154)
>    at junit.framework.TestCase.runBare(TestCase.java:127)
>    at junit.framework.TestResult$1.protect(TestResult.java:106)
>    at junit.framework.TestResult.runProtected(TestResult.java:124)
>    at junit.framework.TestResult.run(TestResult.java:109)
>    at junit.framework.TestCase.run(TestCase.java:118)
>    at junit.framework.TestSuite.runTest(TestSuite.java:208)
>    at junit.framework.TestSuite.run(TestSuite.java:203)
>    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
>    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
>    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the hibernate-issues mailing list