It is very important subject but quite often overlooked by many developers. Some do not have complete understanding and develop software that "works" for years until the issue is finally triggered by some non-trivial scenario. At times issues are silent and when found it is quite difficult (if possible) to fix data as traces of the transactions been lost over time or damage is great...
I would like to recommend following articles for all developers. I've personally found below articles quite useful when was working on application deployed in Websphere EJB container which was using combinations of Container transactions (started by MDB) and as well Local transactions on DB using HibernateTransactionManager. So two separate transaction managers used without XA support and no coordination. At one specific scenario Container managed transaction was rolled back while Local transaction committed - it caused in duplication of data processed...
This article discusses support for distributed transactions using Spring with or without XA
Some more reading on XA transaction support using Spring.
And this article explains on Using Spring and Hibernate with WebSphere Application Server.
All three articles provide a complete coverage on Spring, Hibernate, Websphere and XA, non-XA transactions scenarios.
Happy reading! :)
PS. Here is another article on understanding of JMS re-delivery/transactions which is good to read understand for completeness.