001: /*
002: * Copyright 2002-2005 the original author or authors.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016:
017: package org.springframework.transaction.annotation;
018:
019: import org.springframework.transaction.TransactionDefinition;
020:
021: /**
022: * Enumeration that represents transaction propagation behaviors
023: * for use with the JDK 1.5+ transaction annotation, corresponding
024: * to the TransactionDefinition interface.
025: *
026: * @author Colin Sampaleanu
027: * @author Juergen Hoeller
028: * @since 1.2
029: * @see org.springframework.transaction.annotation.Transactional
030: * @see org.springframework.transaction.TransactionDefinition
031: */
032: public enum Propagation {
033:
034: /**
035: * Support a current transaction, create a new one if none exists.
036: * Analogous to EJB transaction attribute of the same name.
037: * <p>This is the default setting of a transaction annotation.
038: */
039: REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED),
040:
041: /**
042: * Support a current transaction, execute non-transactionally if none exists.
043: * Analogous to EJB transaction attribute of the same name.
044: * <p>Note: For transaction managers with transaction synchronization,
045: * PROPAGATION_SUPPORTS is slightly different from no transaction at all,
046: * as it defines a transaction scopp that synchronization will apply for.
047: * As a consequence, the same resources (JDBC Connection, Hibernate Session, etc)
048: * will be shared for the entire specified scope. Note that this depends on
049: * the actual synchronization configuration of the transaction manager.
050: * @see org.springframework.transaction.support.AbstractPlatformTransactionManager#setTransactionSynchronization
051: */
052: SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS),
053:
054: /**
055: * Support a current transaction, throw an exception if none exists.
056: * Analogous to EJB transaction attribute of the same name.
057: */
058: MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY),
059:
060: /**
061: * Create a new transaction, suspend the current transaction if one exists.
062: * Analogous to EJB transaction attribute of the same name.
063: * <p>Note: Actual transaction suspension will not work on out-of-the-box
064: * on all transaction managers. This in particular applies to JtaTransactionManager,
065: * which requires the <code>javax.transaction.TransactionManager</code> to be
066: * made available it to it (which is server-specific in standard J2EE).
067: * @see org.springframework.transaction.jta.JtaTransactionManager#setTransactionManager
068: */
069: REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW),
070:
071: /**
072: * Execute non-transactionally, suspend the current transaction if one exists.
073: * Analogous to EJB transaction attribute of the same name.
074: * <p>Note: Actual transaction suspension will not work on out-of-the-box
075: * on all transaction managers. This in particular applies to JtaTransactionManager,
076: * which requires the <code>javax.transaction.TransactionManager</code> to be
077: * made available it to it (which is server-specific in standard J2EE).
078: * @see org.springframework.transaction.jta.JtaTransactionManager#setTransactionManager
079: */
080: NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED),
081:
082: /**
083: * Execute non-transactionally, throw an exception if a transaction exists.
084: * Analogous to EJB transaction attribute of the same name.
085: */
086: NEVER(TransactionDefinition.PROPAGATION_NEVER),
087:
088: /**
089: * Execute within a nested transaction if a current transaction exists,
090: * behave like PROPAGATION_REQUIRED else. There is no analogous feature in EJB.
091: * <p>Note: Actual creation of a nested transaction will only work on specific
092: * transaction managers. Out of the box, this only applies to the JDBC
093: * DataSourceTransactionManager when working on a JDBC 3.0 driver.
094: * Some JTA providers might support nested transactions as well.
095: * @see org.springframework.jdbc.datasource.DataSourceTransactionManager
096: */
097: NESTED(TransactionDefinition.PROPAGATION_NESTED);
098:
099: private final int value;
100:
101: Propagation(int value) {
102: this .value = value;
103: }
104:
105: public int value() {
106: return value;
107: }
108:
109: }
|