From 25dadc85140b1f688a4cf0c2de8b961a07b10f11 Mon Sep 17 00:00:00 2001 From: Peter Mount Date: Mon, 17 Apr 2000 20:07:56 +0000 Subject: Another attempt at 7.0 --- .../jdbc/org/postgresql/xa/TwoPhaseConnection.java | 116 +++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 src/interfaces/jdbc/org/postgresql/xa/TwoPhaseConnection.java (limited to 'src/interfaces/jdbc/org/postgresql/xa/TwoPhaseConnection.java') diff --git a/src/interfaces/jdbc/org/postgresql/xa/TwoPhaseConnection.java b/src/interfaces/jdbc/org/postgresql/xa/TwoPhaseConnection.java new file mode 100644 index 0000000000..f80da15ed0 --- /dev/null +++ b/src/interfaces/jdbc/org/postgresql/xa/TwoPhaseConnection.java @@ -0,0 +1,116 @@ +/** + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided + * that the following conditions are met: + * + * 1. Redistributions of source code must retain copyright + * statements and notices. Redistributions must also contain a + * copy of this document. + * + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. The name "Exolab" must not be used to endorse or promote + * products derived from this Software without prior written + * permission of Exoffice Technologies. For written permission, + * please contact info@exolab.org. + * + * 4. Products derived from this Software may not be called "Exolab" + * nor may "Exolab" appear in their names without prior written + * permission of Exoffice Technologies. Exolab is a registered + * trademark of Exoffice Technologies. + * + * 5. Due credit should be given to the Exolab Project + * (http://www.exolab.org/). + * + * THIS SOFTWARE IS PROVIDED BY EXOFFICE TECHNOLOGIES AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * EXOFFICE TECHNOLOGIES OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Copyright 1999 (C) Exoffice Technologies Inc. All Rights Reserved. + * + * $Id: TwoPhaseConnection.java,v 1.1 2000/04/17 20:07:55 peter Exp $ + */ + + +package org.postgresql.xa; + + +import java.sql.SQLException; + + +/** + * Defines two-phase commit support for a JDBC connection used by + * {@link XAConnection}. A JDBC connection that can implement any of + * these features should extend this interface and attempt to + * implement as much as it can. + *

+ * {@link #prepare} is used as part of the two phase commit protocol + * to determine whether the transaction can commit or must rollback. + * Failure to implement this method will cause all connections to vote + * for commit, whether or not they can actually commit, leading to + * mixed heuristics. + *

+ * {@link #enableSQLTransactions} allows the SQL begin/commit/rollback + * commands to be disabled for the duration of a transaction managed + * through an {@link javax.transaction.xaXAResource}, preventing the + * application from demarcating transactions directly. + *

+ * {@link #isCriticalError} is used to tell if an exception thrown by + * the connection is fatal and the connection should not be returned + * to the pool. + * + * + * @author Assaf Arkin + * @version 1.0 + */ +public interface TwoPhaseConnection +{ + + + /** + * Enables or disables transaction demarcation through SQL commit + * and rollback. When the connection falls under control of + * {@link XAConnection}, SQL commit/rollback commands will be + * disabled to prevent direct transaction demarcation. + * + * @param flag True to enable SQL transactions (the default) + */ + public void enableSQLTransactions( boolean flag ); + + + /** + * Called to prepare the transaction for commit. Returns true if + * the transaction is prepared, false if the transaction is + * read-only. If the transaction has been marked for rollback, + * throws a {@link RollbackException}. + * + * @return True if can commit, false if read-only + * @throws SQLException If transaction has been marked for + * rollback or cannot commit for any other reason + */ + public boolean prepare() + throws SQLException; + + + /** + * Returns true if the error issued by this connection is a + * critical error and the connection should be terminated. + * + * @param except The exception thrown by this connection + */ + public boolean isCriticalError( SQLException except ); + + +} -- cgit v1.2.1