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
                // find stuff...
                User user = Ebean.find(User.class, 1);
                // save and delete stuff...

  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
Ebean.execute(txScope, new TxRunnable() {
        public void run() {
Introduction User Guide (pdf) Install/Configure Public JavaDoc Whitepapers
General Database Specific Byte Code Deployment Annotations Features
Top Bugs Top Enhancements