You can use transaction in application two way first through Declarative which we declare & container hanle it as we will declare it second way is programatical in which programmer have total contole for it & programmer implement sessionsynchronisation interface with bean class & also declare command such as commit abort after commit,beforecommit etc
Per se there is not need to enable XA Transaction in your J2EE application but what you need to do is to make sure that the connection factories (JDBC data sources, JMS connection factories etc) are XA enabled and configured that way. Then you have to decide if you use CMT (declarative) or BMT (managed by the bean) transaction handling but that does not influence if XA is used or not. Also make sure that you use the right connection factories. For example JBoss has XA Connection Factories for JMS even though they do not participate in the XA trasnaction management of JBoss (make sure you use JmsXA found on the 'java:' namespace).