Package org.postgresql.xa
Class PGXAConnection
- java.lang.Object
-
- org.postgresql.ds.PGPooledConnection
-
- org.postgresql.xa.PGXAConnection
-
- All Implemented Interfaces:
javax.sql.PooledConnection,javax.sql.XAConnection,javax.transaction.xa.XAResource
public class PGXAConnection extends PGPooledConnection implements javax.sql.XAConnection, javax.transaction.xa.XAResource
The PostgreSQL implementation ofXAResource.This implementation doesn't support transaction interleaving (see JTA specification, section 3.4.4) and suspend/resume.
Two-phase commit requires PostgreSQL server version 8.1 or higher.
- Author:
- Heikki Linnakangas (heikki.linnakangas@iki.fi)
-
-
Constructor Summary
Constructors Constructor Description PGXAConnection(BaseConnection conn)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcommit(javax.transaction.xa.Xid xid, boolean onePhase)voidend(javax.transaction.xa.Xid xid, int flags)Preconditions: Flags is one of TMSUCCESS, TMFAIL, TMSUSPEND xid != null Connection is associated with transaction xidvoidforget(javax.transaction.xa.Xid xid)Does nothing, since we don't do heuristics.java.sql.ConnectiongetConnection()XAConnection interface.intgetTransactionTimeout()We don't do transaction timeouts.javax.transaction.xa.XAResourcegetXAResource()booleanisSameRM(javax.transaction.xa.XAResource xares)intprepare(javax.transaction.xa.Xid xid)Prepares transaction.javax.transaction.xa.Xid[]recover(int flag)Recovers transaction.voidrollback(javax.transaction.xa.Xid xid)Preconditions: xid is known to the RM or it's in prepared statebooleansetTransactionTimeout(int seconds)We don't do transaction timeouts.voidstart(javax.transaction.xa.Xid xid, int flags)Preconditions: Flags must be one of TMNOFLAGS, TMRESUME or TMJOIN xid != null Connection must not be associated with a transaction The TM hasn't seen the xid before-
Methods inherited from class org.postgresql.ds.PGPooledConnection
addConnectionEventListener, addStatementEventListener, close, createConnectionEvent, removeConnectionEventListener, removeStatementEventListener
-
-
-
-
Constructor Detail
-
PGXAConnection
public PGXAConnection(BaseConnection conn) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
-
Method Detail
-
getConnection
public java.sql.Connection getConnection() throws java.sql.SQLExceptionXAConnection interface.- Specified by:
getConnectionin interfacejavax.sql.PooledConnection- Overrides:
getConnectionin classPGPooledConnection- Throws:
java.sql.SQLException
-
getXAResource
public javax.transaction.xa.XAResource getXAResource()
- Specified by:
getXAResourcein interfacejavax.sql.XAConnection
-
start
public void start(javax.transaction.xa.Xid xid, int flags) throws javax.transaction.xa.XAExceptionPreconditions:- Flags must be one of TMNOFLAGS, TMRESUME or TMJOIN
- xid != null
- Connection must not be associated with a transaction
- The TM hasn't seen the xid before
Implementation deficiency preconditions:
- TMRESUME not supported.
- If flags is TMJOIN, we must be in ended state, and xid must be the current transaction
- Unless flags is TMJOIN, previous transaction using the connection must be committed or prepared or rolled back
Postconditions:
- Connection is associated with the transaction
- Specified by:
startin interfacejavax.transaction.xa.XAResource- Throws:
javax.transaction.xa.XAException
-
end
public void end(javax.transaction.xa.Xid xid, int flags) throws javax.transaction.xa.XAExceptionPreconditions:- Flags is one of TMSUCCESS, TMFAIL, TMSUSPEND
- xid != null
- Connection is associated with transaction xid
Implementation deficiency preconditions:
- Flags is not TMSUSPEND
Postconditions:
- Connection is disassociated from the transaction.
- Specified by:
endin interfacejavax.transaction.xa.XAResource- Throws:
javax.transaction.xa.XAException
-
prepare
public int prepare(javax.transaction.xa.Xid xid) throws javax.transaction.xa.XAExceptionPrepares transaction. Preconditions:- xid != null
- xid is in ended state
Implementation deficiency preconditions:
- xid was associated with this connection
Postconditions:
- Transaction is prepared
- Specified by:
preparein interfacejavax.transaction.xa.XAResource- Throws:
javax.transaction.xa.XAException
-
recover
public javax.transaction.xa.Xid[] recover(int flag) throws javax.transaction.xa.XAExceptionRecovers transaction. Preconditions:- flag must be one of TMSTARTRSCAN, TMENDRSCAN, TMNOFLAGS or TMSTARTTRSCAN | TMENDRSCAN
- If flag isn't TMSTARTRSCAN or TMSTARTRSCAN | TMENDRSCAN, a recovery scan must be in progress
Postconditions:
- list of prepared xids is returned
- Specified by:
recoverin interfacejavax.transaction.xa.XAResource- Throws:
javax.transaction.xa.XAException
-
rollback
public void rollback(javax.transaction.xa.Xid xid) throws javax.transaction.xa.XAExceptionPreconditions:- xid is known to the RM or it's in prepared state
Implementation deficiency preconditions:
- xid must be associated with this connection if it's not in prepared state.
Postconditions:
- Transaction is rolled back and disassociated from connection
- Specified by:
rollbackin interfacejavax.transaction.xa.XAResource- Throws:
javax.transaction.xa.XAException
-
commit
public void commit(javax.transaction.xa.Xid xid, boolean onePhase) throws javax.transaction.xa.XAException- Specified by:
commitin interfacejavax.transaction.xa.XAResource- Throws:
javax.transaction.xa.XAException
-
isSameRM
public boolean isSameRM(javax.transaction.xa.XAResource xares) throws javax.transaction.xa.XAException- Specified by:
isSameRMin interfacejavax.transaction.xa.XAResource- Throws:
javax.transaction.xa.XAException
-
forget
public void forget(javax.transaction.xa.Xid xid) throws javax.transaction.xa.XAExceptionDoes nothing, since we don't do heuristics.- Specified by:
forgetin interfacejavax.transaction.xa.XAResource- Throws:
javax.transaction.xa.XAException
-
getTransactionTimeout
public int getTransactionTimeout()
We don't do transaction timeouts. Just returns 0.- Specified by:
getTransactionTimeoutin interfacejavax.transaction.xa.XAResource
-
setTransactionTimeout
public boolean setTransactionTimeout(int seconds)
We don't do transaction timeouts. Returns false.- Specified by:
setTransactionTimeoutin interfacejavax.transaction.xa.XAResource
-
-