Hey Sebastien,
> Hi,
>
> In org.jboss.util.LRUCachePolicy$LRUList.demote(), the code reads
>
> remove(entry);
> ageOut(entry);
>
> The problem is that ageOut causes remove to be called a second time
> (stack trace below), and NPE. Simone, which remove is the good one?
> (if I comment out the first one, everything is ok).
the remove(entry) in org.jboss.util.LRUCachePolicy$LRUList.demote() should
be *moved* to
org.jboss.util.LRUCachePolicy.ageOut
This will allow people that reuse the LRUCachePolicy to not have an always
growing map.
The LRU for EnterpriseContexts overrides ageOut and the problem should be
solved.
BTW, the line that throws NPE should not do it (but maybe you modified the
source so it refers to another part of the code).
Let me know if it seems reasonable to you this solution.
HTH,
Simon
>
> Regards,
>
> Sebastien
>
>
> [nextgen.EnterpriseEntity] TRANSACTION ROLLBACK EXCEPTION:null; nested
> exception is:
> java.lang.NullPointerException
> [nextgen.EnterpriseEntity] java.lang.NullPointerException
> [nextgen.EnterpriseEntity] at
> org.jboss.util.LRUCachePolicy$LRUList.remove(LRUCachePolicy.java:345)
> [nextgen.EnterpriseEntity] at
> org.jboss.util.LRUCachePolicy.remove(LRUCachePolicy.java:172)
> [nextgen.EnterpriseEntity] at
> org.jboss.ejb.plugins.EnterpriseInstanceCache.remove(Enterpris
> eInstanceCache.java:138)
> [nextgen.EnterpriseEntity] at
> org.jboss.ejb.plugins.EntityInstanceCache.remove(EntityInstanc
> eCache.java:64)
> [nextgen.EnterpriseEntity] at
> org.jboss.ejb.plugins.EnterpriseInstanceCache.release(Enterpri
> seInstanceCache.java:125)
> [nextgen.EnterpriseEntity] at
> org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy.ageOut(L
RUEnterpriseContextCachePolicy.java:161)
> [nextgen.EnterpriseEntity] at
> org.jboss.util.LRUCachePolicy$LRUList.demote(LRUCachePolicy.java:323)
> [nextgen.EnterpriseEntity] at
> org.jboss.util.LRUCachePolicy.insert(LRUCachePolicy.java:157)
> [nextgen.EnterpriseEntity] at
> org.jboss.ejb.plugins.EnterpriseInstanceCache.insert(Enterpris
> eInstanceCache.java:112)
> [nextgen.EnterpriseEntity] at
> org.jboss.ejb.plugins.EnterpriseInstanceCache.get(EnterpriseIn
> stanceCache.java:96)
> [nextgen.EnterpriseEntity] at
> org.jboss.ejb.plugins.EntityInstanceCache.get(EntityInstanceCa
> che.java:56)
> [nextgen.EnterpriseEntity] at
> org.jboss.ejb.plugins.EntityInstanceInterceptor.invoke(EntityI
> nstanceInterceptor.java:126)
> [nextgen.EnterpriseEntity] at
> org.jboss.ejb.plugins.TxInterceptorCMT.invokeNext(TxIntercepto
> rCMT.java:133)
> [nextgen.EnterpriseEntity] at
> org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxI
> nterceptorCMT.java:263)
> [nextgen.EnterpriseEntity] at
> org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT
> .java:99)
> [nextgen.EnterpriseEntity] at
> org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInter
> ceptor.java:144)
> [nextgen.EnterpriseEntity] at
> org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:185)
> [nextgen.EnterpriseEntity] at
> org.jboss.ejb.EntityContainer.invoke(EntityContainer.java:316)
> [nextgen.EnterpriseEntity] at
> org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invoke(
> JRMPContainerInvoker.java:222)
> [nextgen.EnterpriseEntity] at
> org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invoke(
> JRMPContainerInvoker.java:187)
> [nextgen.EnterpriseEntity] at
> java.lang.reflect.Method.invoke(Native
> Method)
> [nextgen.EnterpriseEntity] at
> sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:241)
> [nextgen.EnterpriseEntity] at
> sun.rmi.transport.Transport$1.run(Transport.java:142)
> [nextgen.EnterpriseEntity] at
> java.security.AccessController.doPrivileged(Native Method)
> [nextgen.EnterpriseEntity] at
> sun.rmi.transport.Transport.serviceCall(Transport.java:139)
> [nextgen.EnterpriseEntity] at
> sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport
> .java:443)
> [nextgen.EnterpriseEntity] at
> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTr
> ansport.java:643)
> [nextgen.EnterpriseEntity] at java.lang.Thread.run(Thread.java:484)
>