1 /* 2 * Copyright 2002-2005 the original author or authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package org.springframework.transaction; 18 19 /** 20 * Interface that specifies an API to programmatically manage transaction 21 * savepoints in a generic fashion. Extended by TransactionStatus to 22 * expose savepoint management functionality for a specific transaction. 23 * 24 * <p>Note that savepoints can only work within an active transaction. 25 * Just use this programmatic savepoint handling for advanced needs; 26 * else, a subtransaction with PROPAGATION_NESTED is preferable. 27 * 28 * <p>This interface is inspired by JDBC 3.0's Savepoint mechanism 29 * but is independent from any specific persistence technology. 30 * 31 * @author Juergen Hoeller 32 * @since 1.1 33 * @see TransactionStatus 34 * @see TransactionDefinition#PROPAGATION_NESTED 35 * @see java.sql.Savepoint 36 */ 37 public interface SavepointManager { 38 39 /** 40 * Create a new savepoint. You can roll back to a specific savepoint 41 * via <code>rollbackToSavepoint</code>, and explicitly release a 42 * savepoint that you don't need anymore via <code>releaseSavepoint</code>. 43 * <p>Note that most transaction managers will automatically release 44 * savepoints at transaction completion. 45 * @return a savepoint object, to be passed into rollbackToSavepoint 46 * or releaseSavepoint 47 * @throws NestedTransactionNotSupportedException if the underlying 48 * transaction does not support savepoints 49 * @throws TransactionException if the savepoint could not be created, 50 * for example because the transaction is not in an appropriate state 51 * @see java.sql.Connection#setSavepoint 52 */ 53 Object createSavepoint() throws TransactionException; 54 55 /** 56 * Roll back to the given savepoint. The savepoint will be 57 * automatically released afterwards. 58 * @param savepoint the savepoint to roll back to 59 * @throws NestedTransactionNotSupportedException if the underlying 60 * transaction does not support savepoints 61 * @throws TransactionException if the rollback failed 62 * @see java.sql.Connection#rollback(java.sql.Savepoint) 63 */ 64 void rollbackToSavepoint(Object savepoint) throws TransactionException; 65 66 /** 67 * Explicitly release the given savepoint. 68 * <p>Note that most transaction managers will automatically release 69 * savepoints at transaction completion. 70 * <p>Implementations should fail as silently as possible if 71 * proper resource cleanup will still happen at transaction completion. 72 * @param savepoint the savepoint to release 73 * @throws NestedTransactionNotSupportedException if the underlying 74 * transaction does not support savepoints 75 * @throws TransactionException if the release failed 76 * @see java.sql.Connection#releaseSavepoint 77 */ 78 void releaseSavepoint(Object savepoint) throws TransactionException; 79 80 } 81