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.
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 in Deploying into the Container.
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();
}








