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

Reply via email to