Files
ebean/src/test/java/org/tests/transaction/TestTransactionalRequiresNew.java
T

71 lines
1.7 KiB
Java

package org.tests.transaction;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.Transaction;
import io.ebean.annotation.Transactional;
import io.ebean.annotation.TxType;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.Connection;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
public class TestTransactionalRequiresNew extends BaseTestCase {
private static final Logger log = LoggerFactory.getLogger(TestTransactionalRequiresNew.class);
private Connection outerConn;
private Transaction outerTxn;
@Test
public void basic() {
outerTxn = null;
assertNull(Ebean.currentTransaction());
new OuterTransactionalWithRequired().doOuter();
assertNull(Ebean.currentTransaction());
assertNotNull(outerTxn);
}
class OuterTransactionalWithRequired {
@Transactional
void doOuter() {
outerTxn = Ebean.currentTransaction();
log.info("outer before ...{}", outerTxn);
outerConn = outerTxn.getConnection();
new InTransactionalWithRequiresNew().doInner();
// restore the outerTxn
Transaction current = Ebean.currentTransaction();
log.info("outer after ...{}", current);
assertSame(outerConn, current.getConnection());
}
}
class InTransactionalWithRequiresNew {
@Transactional(type = TxType.REQUIRES_NEW)
void doInner() {
Transaction innerTxn = Ebean.currentTransaction();
log.info("inner ...{} {}", innerTxn);
Connection connection = innerTxn.getConnection();
assertNotSame(connection, outerConn);
}
}
}