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