Perhaps the jms-sender code needs to be transaction-aware, and postpone the send until the tx commits? Is this possible?
If you include the message sending functionality as part of the same transaction which saves the Person, then the "send" will only happen on a successful commit of the transaction.
jaikiran, i think your statement is incorrect: even though i am using @Resource(mappedName="java:/JmsXA"), my messages still get processed before the data is actually visible in the database.
When i add logging, it's a matter of 100 ms.
So my explanation for this is: 2 phase commit guarantees that all resources will commit (end of phase 1), but it does not guarantee any timing about it, therefore the thread handling the message may read the db sooner than the db makes its changes visible. I'm not sure if this reasoning is correct, please give me your thoughts on it.