Maybe this is db deadlock? Is it possible one connection is causing a lock on something the other connection is trying to read or write? I don't know if the dirty read prevents all locking in Sybase. What happens if you try transaction none? If it still deadlocks it's probably the driver. What happens if you use just one pool? Since you are using a fake xa wrapper, you are effectively executing 2 database transactions - if the transaction on the second fails you will have inconsistent results.