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

Chris (JIRA) noreply at atlassian.com
Fri Oct 15 03:19:49 EDT 2010


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

Chris commented on HHH-5599:
----------------------------

Hi Galder,

My webapp is a rather very large and complex one, it's hard to reproduce this issue on my dev computer but not impossible however it's pretty much random. The ramdomness dwindle a lot as soon as you throw some concurrent load on the webapp at startup when the caches are being warmed.

 

Is there some debug I can turn on that would shed some light on what is going on ? Also with your knowledge of Infinispan, could it be usefull to code a little snippet that would output usefull information like the cache and cache key in question when a NPE is about to happen ? I could then insert this code to provide additional informations.

The hard thing is this thing happen really deep on the stack, it cant be really any deeper and it's almost impossible to know what really triggered it, especially if it's a concurrency issue somehow.

I was hoping that you would see in which scenario this would happen from the stacktrace, maybe with the additional information I am talking about above, we will be able to sort it out.

> 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
>            Assignee: Galder Zamarreno
>            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