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