The new interceptors were specifically designed so that other components such as CMP do not know whether or not or how a bean is cached. What we can do is peek into the cache. If the object is already there and is the same exact object (obj1 == obj2), then don't try to reinsert it. I'll put this fix in.
Bill > -----Original Message----- > From: Peter Levart [mailto:[EMAIL PROTECTED]] > Sent: Friday, October 19, 2001 12:02 PM > To: Peter Levart; Bill Burke; Ole Husgaard; > [EMAIL PROTECTED] > Subject: Re: [JBoss-dev] Bug in cache > > > When investigating this further I found out the following: > > This is a normal call stack (as printed from the > AbstractInstanceCache.insert > method) when creating new instance of entity bean (CustomerBean) > with empty > ejbPostCreate() method. As you can see the insertion into cache > happens after > the ejbPostCreate method returns... > > [16:16:32,939,Default] TRACE: CustomerBean.ejbCreate... id=peter > [16:16:33,035,Default] TRACE: CustomerBean.ejbPostCreate... id=peter > [16:16:33,085,Default] java.lang.Exception: JUST DUMPING STACK, > key = peter > [16:16:33,086,Default] at > org.jboss.ejb.plugins.AbstractInstanceCache.insert(AbstractInstanc > eCache.java:242) > [16:16:33,087,Default] at > org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(EntityI > nstanceInterceptor.java:164) > [16:16:33,088,Default] at > org.jboss.ejb.plugins.EntityLockInterceptor.invokeHome(EntityLockI > nterceptor.java:104) > [16:16:33,089,Default] at > org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxI > nterceptor.java:100) > [16:16:33,090,Default] at > org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInter > ceptorCMT.java:156) > [16:16:33,091,Default] at > org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT > .java:56) > [16:16:33,091,Default] at > org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInter > ceptor.java:106) > [16:16:33,092,Default] at > org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:109) > [16:16:33,093,Default] at > org.jboss.ejb.EntityContainer.invokeHome(EntityContainer.java:441) > [16:16:33,094,Default] at > org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invokeHome( > JRMPContainerInvoker.java:421) > [16:16:33,099,Default] at > org.jboss.ejb.plugins.jrmp.interfaces.HomeProxy.invokeHome(HomePro > xy.java:237) > [16:16:33,100,Default] at > org.jboss.ejb.plugins.jrmp.interfaces.HomeProxy.invoke(HomeProxy.java:182) > [16:16:33,101,Default] at $Proxy9.create(Unknown Source) > [16:16:33,102,Default] at > _0002fcreateCustomer_0002ejspcreateCustomer_jsp_0._jspService(_000 > 2fcreateCustomer_0002ejspcreateCustomer_jsp_0.java:90) > > > ...and these are two call stacks of the same situation when > creating a new > instance of entity bean (AddressBean) which in it's > ejbPostCreate() method > calls related entity's (CustomerBean) bussiness method that in > turn adds the > just created instance (of AddressBean) to the -to-many side of the > one-to-many relation. As you can see the 1st insert happens as a > result of > the calling of the bussines method in the ejbPostCreate()... > > > [16:21:34,218,Default] TRACE: AddressBean.ejbCreate... cid=peter, > id=peter_home > [16:21:34,263,Default] TRACE: AddressBean.ejbPostCreate... begin > cid=peter, > id=peter_home > [16:21:34,305,Default] java.lang.Exception: JUST DUMPING STACK, key = > peter_home > [16:21:34,306,Default] at > org.jboss.ejb.plugins.AbstractInstanceCache.insert(AbstractInstanc > eCache.java:242) > [16:21:34,307,Default] at > org.jboss.ejb.plugins.AbstractInstanceCache.get(AbstractInstanceCa > che.java:208) > [16:21:34,308,Default] at > org.jboss.ejb.plugins.EntityInstanceCache.get(EntityInstanceCache.java:60) > [16:21:34,309,Default] at > org.jboss.ejb.plugins.EntityInstanceInterceptor.invoke(EntityInsta > nceInterceptor.java:185) > [16:21:34,310,Default] at > org.jboss.ejb.plugins.EntityLockInterceptor.invoke(EntityLockInter > ceptor.java:132) > [16:21:34,311,Default] at > org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxI > nterceptor.java:98) > [16:21:34,312,Default] at > org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInter > ceptorCMT.java:156) > [16:21:34,313,Default] at > org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:65) > [16:21:34,313,Default] at > org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityIntercept > or.java:131) > [16:21:34,314,Default] at > org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:166) > [16:21:34,315,Default] at > org.jboss.ejb.EntityContainer.invoke(EntityContainer.java:447) > [16:21:34,316,Default] at > org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMRFieldBridge.invokeGet > RelatedId(JDBCCMRFieldBridge.java:471) > [16:21:34,317,Default] at > org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMRFieldBridge.createRel > ationLinks(JDBCCMRFieldBridge.java:430) > [16:21:34,318,Default] at > org.jboss.ejb.plugins.cmp.jdbc.bridge.RelationSet.add(RelationSet.java:82) > [16:21:34,318,Default] at > customer.CustomerBean.addAddress(CustomerBean.java:109) > [16:21:34,319,Default] at java.lang.reflect.Method.invoke(Native Method) > [16:21:34,321,Default] at > org.jboss.ejb.EntityContainer$ContainerInterceptor.invoke(EntityCo > ntainer.java:1002) > [16:21:34,322,Default] at > org.jboss.ejb.plugins.cmp.jdbc.JDBCReadAheadInterceptor.invoke(JDB > CReadAheadInterceptor.java:100) > [16:21:34,323,Default] at > org.jboss.ejb.plugins.cmp.jdbc.JDBCRelationInterceptor.invoke(JDBC > RelationInterceptor.java:134) > [16:21:34,324,Default] at > org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invoke(Enti > tySynchronizationInterceptor.java:308) > [16:21:34,325,Default] at > org.jboss.ejb.plugins.EntityInstanceInterceptor.invoke(EntityInsta > nceInterceptor.java:201) > [16:21:34,325,Default] at > org.jboss.ejb.plugins.EntityLockInterceptor.invoke(EntityLockInter > ceptor.java:132) > [16:21:34,326,Default] at > org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxI > nterceptor.java:98) > [16:21:34,327,Default] at > org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInter > ceptorCMT.java:156) > [16:21:34,328,Default] at > org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:65) > [16:21:34,329,Default] at > org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityIntercept > or.java:131) > [16:21:34,330,Default] at > org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:166) > [16:21:34,331,Default] at > org.jboss.ejb.EntityContainer.invoke(EntityContainer.java:447) > [16:21:34,331,Default] at > org.jboss.ejb.plugins.local.BaseLocalContainerInvoker.invoke(BaseL > ocalContainerInvoker.java:320) > [16:21:34,332,Default] at > org.jboss.ejb.plugins.local.BaseLocalContainerInvoker$EntityProxy. > invoke(BaseLocalContainerInvoker.java:449) > [16:21:34,333,Default] at $Proxy11.addAddress(Unknown Source) > [16:21:34,334,Default] at > customer.AddressBean.postCreate(AddressBean.java:112) > [16:21:34,335,Default] at > customer.AddressBean.ejbPostCreate(AddressBean.java:101) > [16:21:34,336,Default] at java.lang.reflect.Method.invoke(Native Method) > [16:21:34,336,Default] at > org.jboss.ejb.plugins.CMPPersistenceManager.createEntity(CMPPersis > tenceManager.java:239) > [16:21:34,337,Default] at > org.jboss.ejb.EntityContainer.createHome(EntityContainer.java:673) > [16:21:34,338,Default] at java.lang.reflect.Method.invoke(Native Method) > [16:21:34,339,Default] at > org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome(Enti > tyContainer.java:926) > [16:21:34,340,Default] at > org.jboss.ejb.plugins.AbstractInterceptor.invokeHome(AbstractInter > ceptor.java:74) > [16:21:34,341,Default] at > org.jboss.ejb.plugins.AbstractInterceptor.invokeHome(AbstractInter > ceptor.java:74) > [16:21:34,342,Default] at > org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invokeHome( > EntitySynchronizationInterceptor.java:234) > [16:21:34,343,Default] at > org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(EntityI > nstanceInterceptor.java:151) > [16:21:34,343,Default] at > org.jboss.ejb.plugins.EntityLockInterceptor.invokeHome(EntityLockI > nterceptor.java:104) > [16:21:34,344,Default] at > org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxI > nterceptor.java:100) > [16:21:34,345,Default] at > org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInter > ceptorCMT.java:156) > [16:21:34,346,Default] at > org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT > .java:56) > [16:21:34,347,Default] at > org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInter > ceptor.java:106) > [16:21:34,348,Default] at > org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:109) > [16:21:34,348,Default] at > org.jboss.ejb.EntityContainer.invokeHome(EntityContainer.java:441) > [16:21:34,349,Default] at > org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invokeHome( > JRMPContainerInvoker.java:421) > [16:21:34,352,Default] at > org.jboss.ejb.plugins.jrmp.interfaces.HomeProxy.invokeHome(HomePro > xy.java:237) > [16:21:34,353,Default] at > org.jboss.ejb.plugins.jrmp.interfaces.HomeProxy.invoke(HomeProxy.java:182) > [16:21:34,354,Default] at $Proxy13.create(Unknown Source) > [16:21:34,355,Default] at > _0002feditCustomer_0002ejspeditCustomer_jsp_0._jspService(_0002fed > itCustomer_0002ejspeditCustomer_jsp_0.java:141) > > > ... and the 2nd attempt to insert the same context into cache is > after the > return from the ejbPostCreate()... > > > [16:21:34,405,Default] TRACE: AddressBean.ejbPostCreate... end cid=peter, > id=peter_home > [16:21:34,406,Default] java.lang.Exception: JUST DUMPING STACK, key = > peter_home > [16:21:34,407,Default] at > org.jboss.ejb.plugins.AbstractInstanceCache.insert(AbstractInstanc > eCache.java:242) > [16:21:34,408,Default] at > org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(EntityI > nstanceInterceptor.java:164) > [16:21:34,409,Default] at > org.jboss.ejb.plugins.EntityLockInterceptor.invokeHome(EntityLockI > nterceptor.java:104) > [16:21:34,410,Default] at > org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxI > nterceptor.java:100) > [16:21:34,411,Default] at > org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInter > ceptorCMT.java:156) > [16:21:34,412,Default] at > org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT > .java:56) > [16:21:34,412,Default] at > org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInter > ceptor.java:106) > [16:21:34,413,Default] at > org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:109) > [16:21:34,414,Default] at > org.jboss.ejb.EntityContainer.invokeHome(EntityContainer.java:441) > [16:21:34,415,Default] at > org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invokeHome( > JRMPContainerInvoker.java:421) > [16:21:34,416,Default] at > org.jboss.ejb.plugins.jrmp.interfaces.HomeProxy.invokeHome(HomePro > xy.java:237) > [16:21:34,417,Default] at > org.jboss.ejb.plugins.jrmp.interfaces.HomeProxy.invoke(HomeProxy.java:182) > [16:21:34,417,Default] at $Proxy13.create(Unknown Source) > [16:21:34,418,Default] at > _0002feditCustomer_0002ejspeditCustomer_jsp_0._jspService(_0002fed > itCustomer_0002ejspeditCustomer_jsp_0.java:141) > > > My feeling is that the context should be inserted into cache between the > return from the ejbCreate() and the call to ejbPostCreate() > method. As soon > as the identity of the instance is established. This way the calls to > business methods in ejbPostCreate() will get an already cached > context via > AbstractInstanceCache.get() and this method (AbstractInstanceCache.get()) > will not blindly acquireContext(), set it's id, activate it and > so on... only > to later, when time has come to insert the created context, find out that > some other context with same id has already been inserted... > > This is my ignorant understanding of the matter (I have just > downloaded the > sources and began to study the EJB specs a few days ago)... > > Peter > _______________________________________________ Jboss-development mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-development
