Open Source Repository

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



org/springframework/transaction/TransactionStatus.java
/*
 * Copyright 2002-2009 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;

/**
 * Representation of the status of a transaction.
 *
 <p>Transactional code can use this to retrieve status information,
 * and to programmatically request a rollback (instead of throwing
 * an exception that causes an implicit rollback).
 *
 <p>Derives from the SavepointManager interface to provide access
 * to savepoint management facilities. Note that savepoint management
 * is only available if supported by the underlying transaction manager.
 *
 @author Juergen Hoeller
 @since 27.03.2003
 @see #setRollbackOnly()
 @see PlatformTransactionManager#getTransaction
 @see org.springframework.transaction.support.TransactionCallback#doInTransaction
 @see org.springframework.transaction.interceptor.TransactionInterceptor#currentTransactionStatus()
 */
public interface TransactionStatus extends SavepointManager {

  /**
   * Return whether the present transaction is new (else participating
   * in an existing transaction, or potentially not running in an
   * actual transaction in the first place).
   */
  boolean isNewTransaction();

  /**
   * Return whether this transaction internally carries a savepoint,
   * that is, has been created as nested transaction based on a savepoint.
   <p>This method is mainly here for diagnostic purposes, alongside
   {@link #isNewTransaction()}. For programmatic handling of custom
   * savepoints, use SavepointManager's operations.
   @see #isNewTransaction()
   @see #createSavepoint
   @see #rollbackToSavepoint(Object)
   @see #releaseSavepoint(Object)
   */
  boolean hasSavepoint();

  /**
   * Set the transaction rollback-only. This instructs the transaction manager
   * that the only possible outcome of the transaction may be a rollback, as
   * alternative to throwing an exception which would in turn trigger a rollback.
   <p>This is mainly intended for transactions managed by
   {@link org.springframework.transaction.support.TransactionTemplate} or
   {@link org.springframework.transaction.interceptor.TransactionInterceptor},
   * where the actual commit/rollback decision is made by the container.
   @see org.springframework.transaction.support.TransactionCallback#doInTransaction
   @see org.springframework.transaction.interceptor.TransactionAttribute#rollbackOn
   */
  void setRollbackOnly();

  /**
   * Return whether the transaction has been marked as rollback-only
   * (either by the application or by the transaction infrastructure).
   */
  boolean isRollbackOnly();

  /**
   * Flush the underlying session to the datastore, if applicable:
   * for example, all affected Hibernate/JPA sessions.
   */
  void flush();

  /**
   * Return whether this transaction is completed, that is,
   * whether it has already been committed or rolled back.
   @see PlatformTransactionManager#commit
   @see PlatformTransactionManager#rollback
   */
  boolean isCompleted();

}