package org.tests.transaction; import io.ebean.BaseTestCase; import io.ebean.Ebean; import io.ebean.EbeanServer; import io.ebean.Transaction; import io.ebean.TxScope; import org.tests.model.basic.Country; import org.tests.model.basic.Customer; import org.tests.model.basic.Product; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TestNestedBeginRequiresNewWithFailure extends BaseTestCase { Logger logger = LoggerFactory.getLogger(TestNestedBeginRequiresNewWithFailure.class); EbeanServer server = Ebean.getServer(null); @Test public void test() { someOuterMethod(); } private void someOuterMethod() { Transaction txn = server.beginTransaction(TxScope.requiresNew()); try { server.find(Country.class).findCount(); try { someInnerMethodWithFailure(); } catch (RuntimeException e) { logger.info("Inner method failed with " + e.getMessage()); } server.find(Product.class).findCount(); txn.commit(); } finally { txn.end(); } } private void someInnerMethodWithFailure() { logger.debug("someInnerMethod() ..."); Transaction txn = server.beginTransaction(TxScope.requiresNew()); try { server.find(Customer.class).findCount(); if (server != null) { throw new RuntimeException("barf"); } txn.commit(); } finally { txn.end(); } logger.debug("someInnerMethod() ... done"); } }