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

Emmanuel Bernard (JIRA) noreply at atlassian.com
Mon Aug 28 19:25:24 EDT 2006


    [ http://opensource.atlassian.com/projects/hibernate/browse/EJB-192?page=comments#action_24188 ] 

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

Really looks like a JDK bug for me. Not sure what I can do here.

> Serialization exception with hashCode() and eager-eager
> -------------------------------------------------------
>
>          Key: EJB-192
>          URL: http://opensource.atlassian.com/projects/hibernate/browse/EJB-192
>      Project: Hibernate Entity Manager
>         Type: Bug

>   Components: EntityManager
>     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