This is regarding
https://jira.jboss.org/jira/browse/JBMESSAGING-1298
Currently we make all calls as blocking when we wouldn't need to if we cached some of
the state on the client side. I've gone through the methods to see which ones we can
make non blocking as follows:
Blocking
void commit(javax.transaction.xa.Xid xid, boolean b)
void rollback(javax.transaction.xa.Xid xid) throws javax.transaction.xa.XAException;
int prepare(javax.transaction.xa.Xid xid) throws javax.transaction.xa.XAException;
for obvoius reasons all these need to be blocking.
int getTransactionTimeout() throws javax.transaction.xa.XAException;
needs to be blocking as we return the timeout.
javax.transaction.xa.Xid[] recover(int i) throws javax.transaction.xa.XAException;
again we're returning values so needs to be blocking
non blocking
void start(javax.transaction.xa.Xid xid, int i) throws javax.transaction.xa.XAException;
this can be non blocking. It never throws an exception and it doesn't matter what
flags are passed.
void end(javax.transaction.xa.Xid xid, int i) throws javax.transaction.xa.XAException;
If the xid passed in is *not* the xid of the tx currently associated with the session then
we need to do this non blocking as we need to throw an exception if it doesn't exist
or is not suspended.
If the xid is the xid of the currently associated tx and is being called with success or
fail flags then we only throw an exception if the tx is in a suspended state. Since we can
check this state on the client side we can do this non blocking. If the suspend flag is
passed then again we only throw an exception if the tx is already suspended which again we
can check on the cliet side.
void forget(javax.transaction.xa.Xid xid) throws javax.transaction.xa.XAException;
currently forget doesn't actually do anything apart from set the state so this can be
non blocking.
boolean setTransactionTimeout(int i) throws javax.transaction.xa.XAException;
this always returns false so can be done non blocking.
boolean isSameRM(javax.transaction.xa.XAResource xaResource) throws
javax.transaction.xa.XAException;
this is already client side.
Code change will basically just holding state on the client side and moving some of the
error handling to the client.
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4206881#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...