All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.avaje.ebean.annotation.Transactional Maven / Gradle / Ivy

package com.avaje.ebean.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.avaje.ebean.TxIsolation;
import com.avaje.ebean.TxType;
import com.avaje.ebean.config.PersistBatch;

/**
 * Specify transaction scoping for a method.
 * 

* This is only supported if "Enhancement" is used via javaagent, ANT * task or IDE enhancement plugin etc. *

*

* Note: Currently there are 3 known annotations that perform this role. *

    *
  • EJB's javax.ejb.TransactionAttribute
  • *
  • Spring's org.springframework.transaction.annotation.Transactional
  • *
  • and this one, Ebean's own com.avaje.ebean.annotation.Transactional
  • *
* Spring created their one because the EJB annotation does not support features * such as isolation level and specifying rollbackOn, noRollbackOn exceptions. * This one exists for Ebean because I agree that the standard one is * insufficient and don't want to include a dependency on Spring. *

*

* The default behaviour of EJB (and hence Spring) is to NOT ROLLBACK on checked * exceptions. I find this very counter-intuitive. Ebean will provide a property * to set the default behaviour to rollback on any exception and optionally * change the setting to be consistent with EJB/Spring if people wish to do so. *

* *
{@code
 *
 *  // a normal class
 *  public class MySimpleUserService {
 * 
 *    // this method is transactional automatically handling
 *    // transaction begin, commit and rollback etc
 *    @Transactional
 *    public void runInTrans() throws IOException {
 * 
 *      // tasks performed within the transaction
 *      ...
 *      // find some objects
 *      Customer cust = ebeanServer.find(Customer.class, 42);
 *    
 *      Order order = ...;
 *      ...
 *      // save some objects
 *      ebeanServer.save(customer);
 *      ebeanServer.save(order);
 *    }
 *
 * }
*/ @Target({ ElementType.METHOD, ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) public @interface Transactional { /** * The type of transaction scoping. Defaults to REQUIRED. */ TxType type() default TxType.REQUIRED; /** * Persist batch mode for the transaction. */ PersistBatch batch() default PersistBatch.INHERIT; /** * Persist batch mode for the request if not set on the transaction. *

* If batch is set to NONE then batchOnCascade can be set to INSERT or ALL * and then each save(), delete(), insert(), update() request that cascades * to child beans can use JDBC batch. *

*/ PersistBatch batchOnCascade() default PersistBatch.INHERIT; /** * The batch size to use when using JDBC batch mode. *

* If unset this defaults to the value set in ServerConfig. *

*/ int batchSize() default 0; /** * Set to false when we want to skip getting generatedKeys. *

* This is typically used in the case of large batch inserts where we get a * performance benefit from not calling getGeneratedKeys (as we are going to * insert a lot of rows and have no need for the Id values after the insert). *

*/ boolean getGeneratedKeys() default true; /** * The transaction isolation level this transaction should have. *

* This will only be used if this scope creates the transaction. If the * transaction has already started then this will currently be ignored (you * could argue that it should throw an exception). *

*/ TxIsolation isolation() default TxIsolation.DEFAULT; /** * Set this to true if the transaction should be only contain queries. */ boolean readOnly() default false; /** * The name of the server that you want the transaction to be created from. *

* If left blank the 'default' server is used. *

*/ String serverName() default ""; // int timeout() default 0; /** * The Throwable's that will explicitly cause a rollback to occur. */ Class[] rollbackFor() default {}; /** * The Throwable's that will explicitly NOT cause a rollback to occur. */ Class[] noRollbackFor() default {}; }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy