_transactionManager.begin();
_isTransactionActive = true;
boolean isOkay = false;
try {
TransactionImpl xa = (TransactionImpl) _transactionManager.getTransaction();
xa.setUserTransaction(this);
_poolItems.clear();
// enlist "cached" connections
int length = _resources.size();
for (int i = 0; i < length; i++) {
UserPoolItem userPoolItem = _resources.get(i);
for (int j = _poolItems.size() - 1; j >= 0; j--) {
ManagedPoolItem poolItem = _poolItems.get(j);
if (poolItem.share(userPoolItem)) {
break;
}
}
ManagedPoolItem xaPoolItem = userPoolItem.getXAPoolItem();
if (! _poolItems.contains(xaPoolItem))
_poolItems.add(xaPoolItem);
}
for (int i = 0; i < _poolItems.size(); i++) {
ManagedPoolItem poolItem = _poolItems.get(i);
poolItem.enableLocalTransactionOptimization(_poolItems.size() == 1);
try {
xa.enlistResource(poolItem);
} catch (Exception e) {
String message = L.l("Failed to begin UserTransaction due to: {0}", e);
log.log(Level.SEVERE, message, e);
throw new SystemException(message);