On 17 Sep, Bill Burke wrote:
ejbRemove is called only when the bean is being removed from the datastore.
This is never invoked by the container. You're thinking of ejbPassivate.
No I am not, since I talk about Stateless session beans and
MessageDriven beans-
The contract here is:
1. When bean goes from not exists to be added to the method ready pool:
ejbCreate is called.
2. Methods are invoked on beans in method ready pool (removed from pool
during invokation, returned to pool afterwards).
3. Bean is removed from method ready pool-ejbRemove is called and the
bean instance is ready for GC.
The way it works now is that each time a method has been invoked a new
bean (from does not exist state) is added to the pool, but the old bean
is never removed/discarded, i.e ejbRemove is never called.
Take a look at the lifecykle diagrams of the two bean types to see if
this is not the correct interpretation.
From StatelessSessionEnterpriseContext (looks the same for MDB):
public void discard()
throws RemoteException
{
((SessionBean)instance).ejbRemove();
}
This should be called whenever an instance of a bean is not more
referencable (i.e is no longer in the pool) which in the new code will
happen after every method call.
//Peter
Instances are not returned to the pool because we determined that there were
a few unfound bugs in the code. It may be reinstated later.
Bill
-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of Peter
Antman
Sent: Monday, September 17, 2001 9:01 AM
To: [EMAIL PROTECTED]
Subject: [JBoss-dev] 2.4.1 instance pool and ejbCreate/Remove
Hi,
I have to admit I am a little lost here. In the messaging forum a user
have wondered why ejbCreate is called every time the bean is accessed,
but never ejbRemove.
In one of his examples sending 1000 messages he gets this:
1) 1001 calls to ejbCreate()
2) 1000 calls to onMessage()
3) Zero calls to ejbRemove()
With an instence pool of 100 this does not seem reasonably. I checked
with a somewhat old 2.4.(1) CVS version, but could not verrify the
error. Then I downloaded the 2.4.1 binary, and yes, there it was.
Looking into the code I found the following new stuff in
AbstractInstancePool.free():
if (pool.size() maxSize)
{
// We do not reuse but create a brand new instance
simplifies the design
try {
pool.push(create(container.createBeanClassInstance()));
} catch (Exception ignored) {}
//pool.push(ctx);
} else
{
discard(ctx);
}
To me this does not look ok. If we look at the examples statistics I
would guess he have serial behaviour. One actual object in the pool, but
will have ejbCreate called in free (1000 times), which calles create,
which created a new MDB container (same is vallid for Stateless
Session), which calles ejbCreate().
I don't know if there might be some other error somewhere, but this cind
of behaviour does not seem to be spec compliant. We basically get this:
* Bean instance does not exists
|
|
-newInstance().
-setSessionContext()
-ejbCreate
|
* Pool of ready instances -- onMethod() ---|
^ |
`--- ejbCreate() -´
It does not seems like correct behaviour that ejbCreate is called when
the instance is returned to the pool.
Or is it something I have missunderstood?
//Peter
--
Jobba hos oss: http://www.tim.se/weblab
Peter Antman Technology in Media, Box 34105 100 26 Stockholm
Systems Architect WWW: http://www.tim.se
Email: [EMAIL PROTECTED] WWW: http://www.backsource.org
Phone: +46-(0)8-506 381 11 Mobile: 070-675 3942
___
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development
___
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development
--
Jobba hos oss: http://www.tim.se/weblab
Peter Antman Technology in Media, Box 34105 100 26 Stockholm
Systems ArchitectWWW: http://www.tim.se
Email: [EMAIL PROTECTED]WWW: http://www.backsource.org
Phone: +46-(0)8-506 381 11 Mobile: 070-675 3942
___
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development