Download spring-boot-referenc..

Transcript
Spring Boot Reference Guide
of the machine on which Bitronix is running. To ensure uniqueness in production, you should
configure the spring.jta.transaction-manager-id property with a different value for each
instance of your application.
35.3 Using a Java EE managed transaction manager
If you are packaging your Spring Boot application as a war or ear file and deploying it to a Java
EE application server, you can use your application servers built-in transaction manager. Spring
Boot will attempt to auto-configure a transaction manager by looking at common JNDI locations
(java:comp/UserTransaction, java:comp/TransactionManager etc). If you are using a
transaction service provided by your application server, you will generally also want to ensure
that all resources are managed by the server and exposed over JNDI. Spring Boot will attempt
to auto-configure JMS by looking for a ConnectionFactory at the JNDI path java:/JmsXA or
java:/XAConnectionFactory and you can use the spring.datasource.jndi-name property
to configure your DataSource.
35.4 Mixing XA and non-XA JMS connections
When using JTA, the primary JMS ConnectionFactory bean will be XA aware and participate in
distributed transactions. In some situations you might want to process certain JMS messages using a
non-XA ConnectionFactory. For example, your JMS processing logic might take longer than the
XA timeout.
If you want to use a non-XA ConnectionFactory you can inject the nonXaJmsConnectionFactory
bean rather than the @Primary jmsConnectionFactory bean. For consistency the
jmsConnectionFactory bean is also provided using the bean alias xaJmsConnectionFactory.
For example:
// Inject the primary (XA aware) ConnectionFactory
@Autowired
private ConnectionFactory defaultConnectionFactory;
// Inject the XA aware ConnectionFactory (uses the alias and injects the same as above)
@Autowired
@Qualifier("xaJmsConnectionFactory")
private ConnectionFactory xaConnectionFactory;
// Inject the non-XA aware ConnectionFactory
@Autowired
@Qualifier("nonXaJmsConnectionFactory")
private ConnectionFactory nonXaConnectionFactory;
35.5 Supporting an alternative embedded transaction manager
The XAConnectionFactoryWrapper and XADataSourceWrapper interfaces can be used
to support alternative embedded transaction managers. The interfaces are responsible for
wrapping XAConnectionFactory and XADataSource beans and exposing them as regular
ConnectionFactory and DataSource beans which will transparently enroll in the distributed
transaction. DataSource and JMS auto-configuration will use JTA variants as long as you have
a JtaTransactionManager bean and appropriate XA wrapper beans registered within your
ApplicationContext.
The BitronixXAConnectionFactoryWrapper and BitronixXADataSourceWrapper provide good examples
of how to write XA wrappers.
1.3.1.BUILD-SNAPSHOT
Spring Boot
111