Hi folks,

Dasarath Weeratunge wrote:

The reason the coordinator was kept even after completion of the transaction was, the at-specification requires that we respond to late messages from participants. I guess we need to look for a better way to do this. Keeping the coordinator is just an easy but inefficient way of doing it.

This is also true with WS-BA, so I hope we will find a common solution.

With both transaction types, we have to keep all participant GUIDs and the final outcome until all timeouts expired to be sure all participants got the right message.

We could dispose the coordinator object, and only keep those UIDs. I doubt that this would notably decrease the memory usage since the coordinator object is just participant UID lists and states. ;-)


Removing, as Wenbing proposed, the transaction from the callback registry when it finishes seems to be more a workaround than a fix. But she[1] is certainly right that, if the coordinator is never removed from the callback registry "manually", the GC wont' ever be able to find and dispose it.

As far as I known, this never happens with the current implementation: a timeout in Callbackregistry will only call ATCoordinatorImpl.timeout(), which prints out a log message and rolls back if the transaction is undecided. I guess it should suffice to add Callbackregistry.remove(this) there for a specification-compatible fix of this issue and another one in terminate() at the right position (that is, when rolling back after a timeout and either all participants acknownledged or timed out).


Best regards,

        -hannes


1: I hope I googled successfully for the right sex...

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to