UserTransaction: The javax.transaction.UserTransaction API allows the application to control the transaction boundaries programmatically. In simple words, this high level API allows to mark the beginning and the end of a global (distributed) transaction.
Transaction Manager: The javax.transaction.TransactionManager API is designed as interface for the application server. The application server is able to specify transaction boundaries in charge of the managed application with this high level API.
XAResource: The javax.transaction.xa.XAResource API is a Java implementation of the industry standard XA Interface based on the X/Open CAE specification. This is the low level API between transaction manager and the database. This interface will allow you to speak 2PC with directly the different databases involved in a distributed transaction.