此内容没有您所选择的语言版本。
9.3. Demarcation by UserTransaction
Overview
It is possible to demarcate a transaction by accessing the
UserTransaction
service directly and calling its begin()
, commit()
and rollback()
methods. But you should be careful to call these methods only when it is really necessary. Usually, in a Apache Camel application, a transaction would be started either by a transactional endpoint or by the transacted()
marker in a route, so that explicit invocations of UserTransaction
methods are not required.
Accessing UserTransaction from Apache Camel
In the case of Apache Camel applications deployed in an OSGi container, you can easily obtain a reference to the
UserTransaction
OSGi service by looking it up in the CamelContext
registry. For example, given the CamelContext
instance, camelContext
, you could obtain a UserTransaction
reference as follows:
// Java import javax.transaction.UserTransaction; ... UserTransaction ut = (UserTransaction) camelContext.getRegistry().lookup(UserTransaction.class.getName());
For more details of how the registry is integrated with OSGi, see Integration with Apache Camel.
Example with UserTransaction
The following example shows how to access a
UserTransaction
object and use it to demarcate a transaction, where it is assumed that this code is part of a Apache Camel application deployed inside an OSGi container.
// Java import javax.transaction.UserTransaction; ... UserTransaction ut = (UserTransaction) camelContext.getRegistry().lookup(UserTransaction.class.getName()); try { ut.begin(); ... // invoke transactional methods or endpoints ... ut.commit(); } catch (Exception e) { ut.rollback(); }