summaryrefslogtreecommitdiff
path: root/src/interfaces/jdbc/org/postgresql/xa/TwoPhaseConnection.java
diff options
context:
space:
mode:
authorPeter Mount <peter@retep.org.uk>2000-04-17 20:07:56 +0000
committerPeter Mount <peter@retep.org.uk>2000-04-17 20:07:56 +0000
commit25dadc85140b1f688a4cf0c2de8b961a07b10f11 (patch)
tree14c91b7e37ca13fba1a4880687cf02bd2dad2de2 /src/interfaces/jdbc/org/postgresql/xa/TwoPhaseConnection.java
parentaafff4af162dcf2be91fcd67db6881d6cf166565 (diff)
downloadpostgresql-25dadc85140b1f688a4cf0c2de8b961a07b10f11.tar.gz
Another attempt at 7.0
Diffstat (limited to 'src/interfaces/jdbc/org/postgresql/xa/TwoPhaseConnection.java')
-rw-r--r--src/interfaces/jdbc/org/postgresql/xa/TwoPhaseConnection.java116
1 files changed, 116 insertions, 0 deletions
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.
+ * <p>
+ * {@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.
+ * <p>
+ * {@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.
+ * <p>
+ * {@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 <a href="arkin@exoffice.com">Assaf Arkin</a>
+ * @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 );
+
+
+}