I was trying out an example of stateful session bean (from book Mastering Enterprise
JavaBeans) and ran into the a weblogic exception during ejbPassivate of a stateful
session bean.
I set the max-beans-in-cache to 5 and was trying to create stateful session beans
from the client using Home.create 10 times and call a method on the stateful bean
in a loop. What I observered is during the creation of 8th stateful session bean
weblogic is passivating existing beans (due to max beans in cache reached) and
hit into an exception.
I have 2 questions.
1. My understanding is that when we set max-beans-in-cache to 5 I would expect
weblogic to call ejbPassivate on the 6th bean creation. Is this a correct behavior
?
2. Why is weblogic failed to passivate the bean ??
Any help would be greatly appreciated
thanks
-sheshi
Here is the trace on the weblogic console
setSessionContext()
ejbCreate()
count()
setSessionContext()
ejbCreate()
count()
setSessionContext()
ejbCreate()
count()
setSessionContext()
ejbCreate()
count()
setSessionContext()
ejbCreate()
count()
setSessionContext()
ejbCreate()
count()
setSessionContext()
ejbCreate()
count()
setSessionContext()
ejbCreate()
count()
setSessionContext()
ejbCreate()
ejbPassivate()
<May 25, 2004 9:57:19 PM PDT> <Error> <EJB> <BEA-010024> <Error occurred during
passivation: java.io.NotSerializableException: javax.naming.InitialContext
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java
:1330)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:13
02)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.jav
a:1245)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
at weblogic.ejb20.swap.PassivationUtils.write(PassivationUtils.java:94)
at weblogic.ejb20.swap.DiskSwap.write(DiskSwap.java:214)
at weblogic.ejb20.manager.StatefulSessionManager.swapOut(StatefulSession
Manager.java:1051)
at weblogic.ejb20.cache.NRUCache.moveInActiveToFree(NRUCache.java:550)
at weblogic.ejb20.cache.NRUCache.reclaimNodes(NRUCache.java:578)
at weblogic.ejb20.cache.NRUCache.getFreeNode(NRUCache.java:238)
at weblogic.ejb20.cache.NRUCache.put(NRUCache.java:318)
at weblogic.ejb20.manager.StatefulSessionManager.create(StatefulSessionM
anager.java:844)
at weblogic.ejb20.manager.StatefulSessionManager.remoteCreate(StatefulSe
ssionManager.java:880)
at weblogic.ejb20.internal.StatefulEJBHome.create(StatefulEJBHome.java:1
33)
at examples.Count_zecfu8_HomeImpl.create(Count_zecfu8_HomeImpl.java:110)
at examples.Count_zecfu8_HomeImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:477)
at weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(ReplicaAwareServerR
ef.java:108)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:420)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
dSubject.java:353)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
144)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.jav
a:415)
at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest
.java:30)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
-thorick