Open Source Repository

Home /spring/spring-transaction-3.0.5 | Repository Home



org/springframework/transaction/interceptor/DefaultTransactionAttribute.java
/*
 * Copyright 2002-2010 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.transaction.interceptor;

import org.springframework.transaction.support.DefaultTransactionDefinition;

/**
 * Transaction attribute that takes the EJB approach to rolling
 * back on runtime, but not checked, exceptions.
 *
 @author Rod Johnson
 @since 16.03.2003
 */
public class DefaultTransactionAttribute extends DefaultTransactionDefinition implements TransactionAttribute {

  private String qualifier;


  /**
   * Create a new DefaultTransactionAttribute, with default settings.
   * Can be modified through bean property setters.
   @see #setPropagationBehavior
   @see #setIsolationLevel
   @see #setTimeout
   @see #setReadOnly
   @see #setName
   */
  public DefaultTransactionAttribute() {
    super();
  }

  /**
   * Copy constructor. Definition can be modified through bean property setters.
   @see #setPropagationBehavior
   @see #setIsolationLevel
   @see #setTimeout
   @see #setReadOnly
   @see #setName
   */
  public DefaultTransactionAttribute(TransactionAttribute other) {
    super(other);
  }

  /**
   * Create a new DefaultTransactionAttribute with the the given
   * propagation behavior. Can be modified through bean property setters.
   @param propagationBehavior one of the propagation constants in the
   * TransactionDefinition interface
   @see #setIsolationLevel
   @see #setTimeout
   @see #setReadOnly
   */
  public DefaultTransactionAttribute(int propagationBehavior) {
    super(propagationBehavior);
  }


  /**
   * Associate a qualifier value with this transaction attribute.
   <p>This may be used for choosing a corresponding transaction manager
   * to process this specific transaction.
   */
  public void setQualifier(String qualifier) {
    this.qualifier = qualifier;
  }

  /**
   * Return a qualifier value associated with this transaction attribute.
   */
  public String getQualifier() {
    return this.qualifier;
  }

  /**
   * The default behavior is as with EJB: rollback on unchecked exception.
   * Additionally attempt to rollback on Error.
   <p>This is consistent with TransactionTemplate's default behavior.
   */
  public boolean rollbackOn(Throwable ex) {
    return (ex instanceof RuntimeException || ex instanceof Error);
  }


  /**
   * Return an identifying description for this transaction attribute.
   <p>Available to subclasses, for inclusion in their <code>toString()</code> result.
   */
  protected final StringBuilder getAttributeDescription() {
    StringBuilder result = getDefinitionDescription();
    if (this.qualifier != null) {
      result.append("; '").append(this.qualifier).append("'");
    }
    return result;
  }

}