I agree that the question of exception mapping is very relevant. I just want to point out that we are not planning on exposing a remote interface sort of view for TransactionManager. It's actually happening over the wire. So implementation-wise we'll probably ship over a one-byte code or something which corresponds to the exception thrown. Then on the client side we'd map the code to the XAResource exception. Since the XAResource side is the lossy side we'd ship over the maximally detailed error code from the server and then pare it down on the client, to future-proof against future, better client APIs.
In other words, the try/catch blocks you illustrate won't actually literally exist anywhere.