Hi!
Me and Hannes just analyzed the code and found the following code in
TransactionManagerImpl:
|01 public void commit() throws RemoteException {
02 TransactionImpl tx = getTransaction();
03 if (tx == null)
04 throw new IllegalStateException();
05 forget();
06 tx.commit();
07 }
|
and the commit method in TransactionImpl looks like:
|01 public void commit() throws RemoteException {
02 TransactionManagerImpl tm = TransactionManagerImpl.getInstance();
03 TransactionImpl tx = tm.suspend();
04
05 if (!canInitiateCompletion)
06 register();
07
08 try {
09 synchronized (callback) {
10 if (!committed) {
11 if (aborted)
12 throw new IllegalStateException();
13 getCompletionCoordinatorStub().commitOperation(null);
14 callback.wait();
15 }
16 }
17 if (timedOut)
18 throw new TimedOutException();
19 if (!committed)
20 throw new RollbackException();
21 } catch (RemoteException e) {
22 throw e;
23 } catch (Exception e) {
24 e.printStackTrace();
25 throw new RuntimeException(e);
26 } finally {
27 tm.resume(tx);
28 }
29 }
|
We wondered why the call for forget, where the TransactionImpl is
removed from the local variable threadInfo is called twice. If it is
called as shown above in line 05 of commit in the
TransactionManagerImpl, then tm.suspend() in line 03 of commit in
TransactionImpl can never return a TransactionImpl, because this one has
already been removed through calling forget(). Moreover line 27 of TI
can never resume any TI since it is always null.
Is this your aim? If so why this way?
I tried to remove line 05 of TMI but this brought
java.lang.IllegalStateException in some TestSuite1-test cases.
Best regards,
Georg
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]