001: /**
002: * Objective Database Abstraction Layer (ODAL)
003: * Copyright (c) 2004, The ODAL Development Group
004: * All rights reserved.
005: * For definition of the ODAL Development Group please refer to LICENCE.txt file
006: *
007: * Distributable under LGPL license.
008: * See terms of license at gnu.org.
009: */package com.completex.objective.components.persistency.transact;
010:
011: import java.sql.SQLException;
012:
013: /**
014: * @author Gennady Krizhevsky
015: */
016: public interface TransactionManager {
017:
018: public static final TransactionManager NULL_TRANSACTION_MANAGER = new NullTransactionManager();
019:
020: /**
021: *
022: * @return new Transaction
023: * @throws SQLException
024: */
025: Transaction begin() throws SQLException;
026:
027: /**
028: * Commit transaction and return it to the pool if needed
029: *
030: * @param transaction
031: * @throws SQLException
032: */
033: void commit(Transaction transaction) throws SQLException;
034:
035: /**
036: * Rollback transaction and return it to the pool if needed
037: *
038: * @param transaction
039: * @throws SQLException
040: */
041: void rollback(Transaction transaction) throws SQLException;
042:
043: /**
044: * Return transaction to the pool if needed.
045: * Necessity of this method is questionable since w/o commit or rollback on update it can
046: * cause dead locks. So it's usage it is not really recommended.
047: *
048: * @param transaction
049: * @throws SQLException
050: */
051: void release(Transaction transaction) throws SQLException;
052:
053: /**
054: *
055: * @return new Transaction
056: * @throws com.completex.objective.components.OdalRuntimeException if database error happens
057: */
058: Transaction beginUnchecked();
059:
060: /**
061: * Commit transaction and return it to the pool if needed
062: *
063: * @param transaction
064: * @throws com.completex.objective.components.OdalRuntimeException if database error happens
065: */
066: void commitUnchecked(Transaction transaction);
067:
068: /**
069: * Rollback transaction and return it to the pool if needed
070: *
071: * @param transaction
072: * @throws com.completex.objective.components.OdalRuntimeException if database error happens
073: */
074: void rollbackUnchecked(Transaction transaction);
075:
076: /**
077: * Return transaction to the pool if needed.
078: * Necessity of this method is questionable since w/o commit or rollback on update it can
079: * cause dead locks. So it's usage it is not really recommended.
080: *
081: * @param transaction
082: * @throws com.completex.objective.components.OdalRuntimeException if database error happens
083: */
084: void releaseUnchecked(Transaction transaction);
085:
086: /**
087: * Frees all the resources associated or allocated by this TransactionManager
088: */
089: void shutdown();
090:
091: /**
092: * At any given moment there can be several transactions running in the thread.
093: * On of possible implemetations can have stack of nested trasactions associated with a thread.
094: * Only one of them is active at any given moment. This one is the current transaction.
095: *
096: * @return current transaction
097: */
098: Transaction getCurrentTransaction();
099:
100: /**
101: * Return true if there is open transaction
102: *
103: * @return true if there is open transaction
104: */
105: boolean hasCurrentTransaction();
106:
107: /**
108: * Rollback transaction and return it to the pool if needed.
109: * If error happens it is not rethrownn - just logged.
110: */
111: void rollbackSilently(Transaction transaction);
112:
113: /**
114: * Null TransactionManager implementation
115: */
116: static class NullTransactionManager implements TransactionManager {
117: public Transaction begin() throws SQLException {
118: return Transaction.NULL_TRANSACTION;
119: }
120:
121: public void commit(Transaction transaction) throws SQLException {
122: }
123:
124: public void rollback(Transaction transaction)
125: throws SQLException {
126: }
127:
128: public void rollbackSilently(Transaction transaction) {
129: }
130:
131: public void shutdown() {
132: }
133:
134: public void release(Transaction transaction)
135: throws SQLException {
136: }
137:
138: public Transaction beginUnchecked() {
139: return Transaction.NULL_TRANSACTION;
140: }
141:
142: public void commitUnchecked(Transaction transaction) {
143: }
144:
145: public void rollbackUnchecked(Transaction transaction) {
146: }
147:
148: public void releaseUnchecked(Transaction transaction) {
149: }
150:
151: public Transaction getCurrentTransaction() {
152: return Transaction.NULL_TRANSACTION;
153: }
154:
155: public boolean hasCurrentTransaction() {
156: return true;
157: }
158: }
159:
160: }
|