use of org.apache.openejb.resource.TransactionManagerWrapper in project tomee by apache.
the class PoolDataSourceCreator method poolManagedWithRecovery.
@Override
public DataSource poolManagedWithRecovery(final String name, final XAResourceWrapper xaResourceWrapper, final String driver, final Properties properties) {
final TransactionManager transactionManager = new TransactionManagerWrapper(OpenEJB.getTransactionManager(), name, xaResourceWrapper);
final CommonDataSource ds = pool(name, driver, properties);
if (ds instanceof XADataSource) {
return new ManagedXADataSource(ds, transactionManager, SystemInstance.get().getComponent(TransactionSynchronizationRegistry.class));
}
return new ManagedDataSource(DataSource.class.cast(ds), transactionManager, SystemInstance.get().getComponent(TransactionSynchronizationRegistry.class));
}
use of org.apache.openejb.resource.TransactionManagerWrapper in project tomee by apache.
the class ManagedConnectionBehaviorTest method run.
@Test
public void run() throws Exception {
final GeronimoTransactionManager geronimoTransactionManager = new GeronimoTransactionManager((int) TimeUnit.MINUTES.toMillis(10));
final TransactionManager mgr = new TransactionManagerWrapper(geronimoTransactionManager, "ManagedConnectionBehaviorTest", new GeronimoTransactionManagerFactory.GeronimoXAResourceWrapper());
final MyDs myDs = new MyDs();
final DataSource ds = new ManagedDataSource(myDs, geronimoTransactionManager, geronimoTransactionManager);
{
// no tx
final Connection connection = ds.getConnection();
// not yet needed
assertTrue(myDs.connections.isEmpty());
// just to call something
connection.createBlob();
assertFalse(myDs.connections.iterator().next().closed);
connection.close();
assertTrue(myDs.connections.iterator().next().closed);
myDs.connections.clear();
}
{
// tx
mgr.begin();
final Connection connection = ds.getConnection();
// not yet needed
assertTrue(myDs.connections.isEmpty());
// just to call something
connection.createBlob();
assertFalse(myDs.connections.iterator().next().closed);
mgr.commit();
assertTrue(myDs.connections.iterator().next().closed);
assertTrue(myDs.connections.iterator().next().commit);
assertFalse(myDs.connections.iterator().next().rollback);
myDs.connections.clear();
}
{
// tx already init
mgr.begin();
final Connection connection = ds.getConnection();
// not yet needed
assertTrue(myDs.connections.isEmpty());
// just to call something
connection.createBlob();
assertFalse(myDs.connections.iterator().next().closed);
for (int i = 0; i < 5; i++) {
// here the connection is already created, ensure we dont leak other connections
connection.createBlob();
}
assertEquals(1, myDs.connections.size());
mgr.commit();
assertTrue(myDs.connections.iterator().next().closed);
assertTrue(myDs.connections.iterator().next().commit);
assertFalse(myDs.connections.iterator().next().rollback);
myDs.connections.clear();
}
{
// multiple tx
mgr.begin();
final Connection connection = ds.getConnection();
// not yet needed
assertTrue(myDs.connections.isEmpty());
// just to call something
connection.createBlob();
assertFalse(myDs.connections.iterator().next().closed);
final Transaction previous = mgr.suspend();
mgr.begin();
final Connection connection2 = ds.getConnection();
connection2.createBlob();
assertEquals(2, myDs.connections.size());
mgr.commit();
mgr.resume(previous);
mgr.commit();
final Iterator<MyConn> iterator = myDs.connections.iterator();
final MyConn first = iterator.next();
assertTrue(first.closed);
assertTrue(first.commit);
assertTrue(myDs.connections.iterator().next().commit);
myDs.connections.clear();
}
}
Aggregations