Hello,
I am now testing XA recovery in JBossTS (in JTA mode).
I have created a test XA resource that simply logs its actions. I can give the resource a name so that when it logs it identifies itself. I can also choose when (if at all) I want it to crash (Runtime.getRuntime().halt(0)).
I am investigating what happens when a resource fails during prepare. I have three resources, (A,B,C). I enlist them in order and configure resource C to crash at the beginning of its prepare method.
This is the output when no resource crashes
A: start
B: start
C: start
A: end
A: prepare (0)
B: end
B: prepare (0)
C: end
C: prepare (0)
A: serializing
B: serializing
C: serializing
A: commit
B: commit
C: commit
And this is the output when C crashes during the prepare method:
A: start
B: start
C: start
A: end
A: prepare (0)
B: end
B: prepare (0)
C: end
C: CRASH!
So, A and B have prepared whilst C hasn't. The coordinator logs once all the resources have successfully prepared. As this doesn't happen, nothing is written to the log and thus no recovery occurs. I think this is OK so far, as presumed abort is in operation and (A,B) does not need to be told to rollback by the coordinator.
However, this does rely on the resources (A,B) being able to ask the coordinator what the outcome of the transaction was. My question is, without JTS, how can the XA resource query the coordinator in a non-implementation specific manor (I wouldn't expect the resource to know that it was being coordinated by JBossTS)?
Thanks,
Paul.