[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-5599) NPE occurs when using Infinispan as L2 Cache

Galder Zamarreno (JIRA) noreply at atlassian.com
Mon Oct 11 06:21:57 EDT 2010


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-5599?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=38688#action_38688 ] 

Galder Zamarreno commented on HHH-5599:
---------------------------------------

Chris, thanks for reporting this. Had a quick look to this and not sure if you're workaround is valid or not. I'd be very interested of getting hold of your test or Hibernate app and how to replicate this issue cos I haven't seen it before. Any chance you could do so?

> NPE occurs when using Infinispan as L2 Cache
> --------------------------------------------
>
>                 Key: HHH-5599
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5599
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: caching (L2)
>    Affects Versions: 3.5.5, 3.5.6
>         Environment: Hib 3.5.6
> Infinispan 4.2.0.ALPHA2
> (same thing happen with Hib 3.5.5 and IS 4.1.0.FINAL)
>            Reporter: Chris
>            Priority: Critical
>
> Pretty much randomly or so it seems, infinispan hibernate layer will throw a NPE. It occurs a lot when the j2EE server is started and overtime (once caches are warmer?) diminish.
> The issue comes from the PutFromLoadValidator.Java(565).The cleaned element is null and the map.put(cleaned) fails since the key is coming from the cleaned element (cleaned.owner).
> Complete stacktraces, the first on entity loading and the later on collection loading:
> Cause: java.lang.NullPointerException
>     at org.hibernate.cache.infinispan.access.PutFromLoadValidator$PendingPut.access$700(PutFromLoadValidator.java:674)
>     at org.hibernate.cache.infinispan.access.PutFromLoadValidator$PendingPutMap.put(PutFromLoadValidator.java:627)
>     at org.hibernate.cache.infinispan.access.PutFromLoadValidator.cleanOutdatedPendingPuts(PutFromLoadValidator.java:565)
>     at org.hibernate.cache.infinispan.access.PutFromLoadValidator.preventOutdatedPendingPuts(PutFromLoadValidator.java:493)
>     at org.hibernate.cache.infinispan.access.PutFromLoadValidator.registerPendingPut(PutFromLoadValidator.java:438)
>     at org.hibernate.cache.infinispan.access.TransactionalAccessDelegate.get(TransactionalAccessDelegate.java:66)
>     at org.hibernate.cache.infinispan.entity.TransactionalAccess.get(TransactionalAccess.java:36)
>     at org.hibernate.engine.BatchFetchQueue.isCached(BatchFetchQueue.java:278)
>     at org.hibernate.engine.BatchFetchQueue.getEntityBatch(BatchFetchQueue.java:253)
>     at org.hibernate.loader.entity.BatchingEntityLoader.load(BatchingEntityLoader.java:90)
>     at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3270)
>     at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:496)
>     at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:477)
>     at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:227)
>     at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:285)
>     at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:152)
>     at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:1080)
>     at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:1028)
>     at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:623)
>     at org.hibernate.type.EntityType.resolve(EntityType.java:431)
>     at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:140)
>     at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:898)
>     at org.hibernate.loader.Loader.doQuery(Loader.java:773)
>     at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)
>     at org.hibernate.loader.Loader.loadEntityBatch(Loader.java:2047)
>     at org.hibernate.loader.entity.BatchingEntityLoader.load(BatchingEntityLoader.java:99)
>     at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3270)
>     at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:496)
>     at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:477)
>     at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:227)
>     at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:285)
>     at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:152)
>     at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:1080)
>     at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:1028)
>     at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:623)
>     at org.hibernate.type.EntityType.resolve(EntityType.java:431)
>     at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:140)
>     at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:898)
>     at org.hibernate.loader.Loader.doQuery(Loader.java:773)
>     at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)
>     at org.hibernate.loader.Loader.doList(Loader.java:2449)
>     at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2192)
>     at org.hibernate.loader.Loader.list(Loader.java:2187)
>     at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452)
>     at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
>     at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
>     at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1258)
>     at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
> Cause: java.lang.NullPointerException
>     at org.hibernate.cache.infinispan.access.PutFromLoadValidator$PendingPut.access$700(PutFromLoadValidator.java:674)
>     at org.hibernate.cache.infinispan.access.PutFromLoadValidator$PendingPutMap.put(PutFromLoadValidator.java:627)
>     at org.hibernate.cache.infinispan.access.PutFromLoadValidator.cleanOutdatedPendingPuts(PutFromLoadValidator.java:565)
>     at org.hibernate.cache.infinispan.access.PutFromLoadValidator.preventOutdatedPendingPuts(PutFromLoadValidator.java:493)
>     at org.hibernate.cache.infinispan.access.PutFromLoadValidator.registerPendingPut(PutFromLoadValidator.java:438)
>     at org.hibernate.cache.infinispan.access.TransactionalAccessDelegate.get(TransactionalAccessDelegate.java:66)
>     at org.hibernate.cache.infinispan.collection.TransactionalAccess.get(TransactionalAccess.java:36)
>     at org.hibernate.engine.BatchFetchQueue.isCached(BatchFetchQueue.java:295)
>     at org.hibernate.engine.BatchFetchQueue.getCollectionBatch(BatchFetchQueue.java:203)
>     at org.hibernate.loader.collection.BatchingCollectionInitializer.initialize(BatchingCollectionInitializer.java:73)
>     at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:628)
>     at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:83)
>     at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1853)
>     at org.hibernate.collection.AbstractPersistentCollection.forceInitialization(AbstractPersistentCollection.java:479)
>     at org.hibernate.engine.StatefulPersistenceContext.initializeNonLazyCollections(StatefulPersistenceContext.java:899)
>     at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:275)
>     at org.hibernate.loader.Loader.doList(Loader.java:2449)
>     at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2192)
>     at org.hibernate.loader.Loader.list(Loader.java:2187)
>     at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452)
>     at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
>     at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
>     at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1258)
>     at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
> For now I am masking this class with my own which essentially is a copy and paste but added a null check before trying to put back the element.
> How the big question is : Is it normal that the element can be null and it's a simple null check that has been forgotten or the element should never be null and something bigger is going on ?

-- 
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