mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
78 lines
1.7 KiB
Java
78 lines
1.7 KiB
Java
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.EBasic;
|
|
import org.tests.model.basic.Product;
|
|
import org.junit.Test;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
public class TestNestedBeginRequiredWithFailure extends BaseTestCase {
|
|
|
|
Logger logger = LoggerFactory.getLogger(TestNestedBeginRequiredWithFailure.class);
|
|
|
|
EbeanServer server = Ebean.getServer(null);
|
|
|
|
@Test
|
|
public void test() {
|
|
|
|
someOuterMethod();
|
|
}
|
|
|
|
private void someOuterMethod() {
|
|
|
|
Transaction txn = server.beginTransaction(TxScope.required());
|
|
try {
|
|
|
|
server.find(Country.class).findCount();
|
|
|
|
try {
|
|
someInnerMethodWithFailure();
|
|
|
|
server.find(Product.class).findCount();
|
|
txn.commit();
|
|
|
|
} catch (RuntimeException e) {
|
|
logger.info("Inner method failed with " + e);
|
|
}
|
|
|
|
} finally {
|
|
// For REQUIRED ... the transaction can already been
|
|
// rolled back (by inner method) so that case is expected
|
|
// (and that is the case here - txn is already rolled back)
|
|
txn.end();
|
|
}
|
|
|
|
}
|
|
|
|
private void someInnerMethodWithFailure() {
|
|
|
|
logger.debug("someInnerMethod() ...");
|
|
Transaction txn = server.beginTransaction(TxScope.required());
|
|
try {
|
|
|
|
server.find(Customer.class).findCount();
|
|
|
|
EBasic basic = new EBasic();
|
|
basic.setName("ignore");
|
|
server.save(basic);
|
|
|
|
if (server != null) {
|
|
throw new RuntimeException("barf");
|
|
}
|
|
|
|
txn.commit();
|
|
|
|
} finally {
|
|
txn.end();
|
|
logger.debug("someInnerMethod() ... done");
|
|
}
|
|
}
|
|
}
|