This is a very frustrating problem:
I deploy a stateless session bean A with required tx attribute on one
instance of weblogic. In another instance (on a different machine), I
deploy a stateful session bean B, also with required tx attribute
that
implements SessionSynchronization. Bean A has a simple business
method doA
() which simply finds bean B and call one of B's method.
When I run a test client that finds bean A and calls doA(). The
transaction
created when A is called will propagates to B. And when B returns, doA
()
simply ends. This complete the transaction across the two beans on
different servers.
Now. Since B implements SessionSynchronization, weblogic should
invoke the
callbacks e.g., afterBegin(), beforeCompletion() and
afterCompletion(boolean committed). That's good. It does that.
(Actually, only afterBegin() and afterCompletion() is called.) But
it's
calling afterCompletion(false). That is. Even though the transaction
was
committed successfully, weblogic still invoke afterCompletion() with
a
false flag indicating the transaction was NOT completed. This is a
serious
error.
However, if A and B is deployed in one single server, everything
works
fine.
I suspect this is a bug with weblogic - as if one instance "forgets"
to tell the
other instance the transaction completed successfully.
I also found this in the weblogic log when bean A in one machine
calls bean B in another machine:
<Oct 22, 2001 6:12:17 PM PDT> <Error> <ConnectionManager>
<Closing: 'weblogic.rj
vm.t3.T3JVMConnection@551f11' because of: 'Server received a message
over an uni
nitialized connection: 'JVMMessage from: 'null' to: '-
4155626721612201556S:167.1
16.91.251:[7001,7001,7002,7002,7001,7002,-1]:mydomain:myserver'
cmd: 'CMD_REQUES
T', QOS: '101', responseId: '1', invokableId: '9', flags: 'JVMIDs Not
Sent, TX C
ontext Not Sent', abbrev offset: '248'''>
Does anyone have a hint on what's going on?