Transactions in Ebean
TxRunnable & TxCallable
TxRunnable & TxCallable are the programmatic equivalent to @Transactional.
You can mix @Transaction with TxRunnable and TxCallable if you like, they
will behave correctly together.
public void myMethod() {
...
System.out.println(" Some code in myMethod...");
// run in Transactional scope...
Ebean.execute(new TxRunnable() {
public void run() {
// code running in "REQUIRED" transactional scope
// ... as "REQUIRED" is the default TxType
System.out.println(Ebean.currentTransaction());
// find stuff...
User user = Ebean.find(User.class, 1);
...
// save and delete stuff...
Ebean.save(user);
Ebean.delete(order);
...
}
});
System.out.println(" more code in myMethod...");
}
Generally you will use TxRunnable like the above as anonymous inner classes.
The code inside the run() will execute inside a transactional scope with Ebean
handling the transaction propagation for you (just like @Transactional).
// programmatic control over the scope such as
// ... isolation level
// ... and to rollback or not for specific exceptions
TxScope txScope = TxScope
.requiresNew()
.setIsolation(TxIsolation.SERIALIZABLE)
.setNoRollbackFor(IOException.class);
Ebean.execute(txScope, new TxRunnable() {
public void run() {
...
}