Hello,
I have written a little application
( compute surface and store in database) to test jonas performance. a
session statefull bean handles two others beans:
[Regis Le Brettevillois] Which JOnAS release do you
use?
[Mohamed Boutkhil]I'm using both 2.2.2 and 2.2.7 version with
rmi. I observe the same behavior.
- a stateless which
computes surface
- and entitybean which
saves the result.
the client call statefull bean
method in loop. it works fine. but when two clients carry out it in
the same time, the server stops to execute client request from
the second or third loop.
[Regis Le
Brettevillois] Could you give more information about
the behavior? Are the both clients working on the same
entity bean? Do you have traces where the server is
stopped?
[Mohamed Boutkhil] Here are more explaination
about the behavior:
-each client calls the
statefull bean to have the circle (or sphere) surface with a variable
radius.
- then the statefull bean
checks in database (by using the findByPrimaryKeys() method
of entityhome object) if the surface was already
computed.
- if yes, the result is
return to the client.
- if no,
the statefull bean computes the surface with the stateless bean
help, stores the result in database (by using the create method of
entityhome object) and gives the result to the
client.
Note: I have tried to
modify the transaction attribute without changing.
Here is two different
logs.
Server crashing with
inconsistency error:
************************************************************************************************************************
RMI TCP
Connection(9)-192.168.1.7 : 0:30:36:421
ConnectionImpl.prepareStatement(String select reference from
SurfaceTable where reference=?)
RMI TCP
Connection(9)-192.168.1.7 select reference from SurfaceTable where
reference = sphere21
RMI TCP
Connection(9)-192.168.1.7 : 0:30:36:423 Object not found in database
(findByPrimaryKey)
RMI TCP
Connection(9)-192.168.1.7 : 0:30:36:423
ConnectionImpl.close()
RMI TCP
Connection(9)-192.168.1.7 : 0:30:36:423
XAConnectionImpl.notifyClose()
RMI TCP
Connection(9)-192.168.1.7 : 0:30:36:423
ConnectionManager.connectionClosed(ConnectionEvent)
RMI TCP
Connection(9)-192.168.1.7 : 0:30:36:423 Pool: keep the Connection for
this tx
RMI TCP
Connection(9)-192.168.1.7 : 0:30:36:423 ------------ ConnectionPool
-----------------
RMI TCP
Connection(9)-192.168.1.7 : 0:30:36:423 Nb of item not associated with
tx = 0
RMI TCP
Connection(9)-192.168.1.7 : 0:30:36:423 +++ Hashtable XAC ->
item:
RMI TCP
Connection(9)-192.168.1.7 : 0:30:36:423 1 open=0
tx=1003863896488044
RMI TCP
Connection(9)-192.168.1.7 : 0:30:36:423 0 open=0
tx=1003863896421481
RMI TCP
Connection(9)-192.168.1.7 : 0:30:36:465 +++ FreeList:
RMI TCP
Connection(9)-192.168.1.7 : 0:30:36:465 +++ Associated with
tx:
RMI TCP
Connection(9)-192.168.1.7 : 0:30:36:465 0 open=0
tx=1003863896421481
RMI TCP
Connection(9)-192.168.1.7 : 0:30:36:465 Pool: Inconsistency
detected !
*******************************************************************************************************************************
Server stops:
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:347 EntityContextImpl.storeIfModified
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:347 JOnASStoreSurfaceContBean.ejbStore()
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:348 JOnASStoreSurfaceContBean.isModifiedData() -->
true
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:348 StoreSurfaceBean ejbStore
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:348 EntityContextImpl.getEJBObject
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:348 JEntityHome.getDataSource
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:348 ConnectionManager.getConnection()
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:348 ConnectionManager.getConnection()
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:348 Tx = 1003863964798987
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:348 Pool: reuse a Connection for Tx =
1003863964798987
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:348 ------------ ConnectionPool -----------------
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:348 Nb of item not associated with tx = 0
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:348 +++ Hashtable XAC -> item:
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:348 1 open=1 tx=1003863965005837
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:348 0 open=1 tx=1003863964798987
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:348 +++ FreeList:
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:348 +++ Associated with tx:
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:348 1 open=1 tx=1003863965005837
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:348 0 open=1 tx=1003863964798987
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:348 ---------------------------------------------
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:349 ConnectionManager: Reuse an XAConnection from the
pool
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:349 XAConnectionImpl.getConnection()
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:349 ConnectionImpl.setAutoCommit(boolean false)
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:349 XAConnectionImpl.getXAResource()
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:349 TransactionImpl.enlistResource(XAResource
xares)
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:349 SubCoordinator.addResource(XAResource xares)
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:349 XAResource ---> isSameRM = true
org.objectweb.jonas.jdbc_xa.XAResourceImpl@bf072
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:349 XAResource ---> START
org.objectweb.jonas.jdbc_xa.XAResourceImpl@bf072
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:349 Xid = 1003863964798987
RMI TCP Connection(6)-192.168.1.7 :
0:31:43:349 ConnectionImpl.prepareStatement(String update SurfaceTable
set rayon=?, digits=?, surface=? where reference=?)
RMI TCP Connection(6)-192.168.1.7 update
SurfaceTable set rayon = 2 , digits = 10 , surface = 50.2654824576
where reference = sphere2
PoolKeeper : 0:32:27:91 ------------
ConnectionPool -----------------
PoolKeeper : 0:32:27:91 Nb of item not
associated with tx = 0
PoolKeeper : 0:32:27:91 +++ Hashtable
XAC -> item:
PoolKeeper : 0:32:27:91 1 open=1
tx=1003863965005837
PoolKeeper : 0:32:27:91 0 open=1
tx=1003863964798987
PoolKeeper : 0:32:27:91 +++
FreeList:
PoolKeeper : 0:32:27:92 +++ Associated
with tx:
PoolKeeper : 0:32:27:92 1 open=1
tx=1003863965005837
PoolKeeper : 0:32:27:92 0 open=1
tx=1003863964798987
PoolKeeper : 0:32:27:92
---------------------------------------------
******************************************************End of
log**************************************************************
-
When the server stops, I
have tried to launch another client and the server stops again. And
the poolkeeper contain another tx open. I have set transaction timeout
to 1 second (in jonas.properties) but nothing change. It seems the
stop occurs after the ejbStore method call
I hope there is not too
much log.
Mohamed.Boutkhil
If I remove entity bean from the
execution process, it works fine. therefore my entity bean management
seems not correct. the session bean which uses entity bean never
removes it. it just call findByPrimaryKeys() and create() methods. I
don't know how handle that.
[Regis Le
Brettevillois] You don't need to manage the entity bean life
cycle, it's the container's
responsability.
Thanks for help..
Mohamed
Boukthil