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 of
XAResource
.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 void
commit(javax.transaction.xa.Xid xid, boolean onePhase)
void
end(javax.transaction.xa.Xid xid, int flags)
Preconditions:void
forget(javax.transaction.xa.Xid xid)
Does nothing, since we don't do heuristics.java.sql.Connection
getConnection()
XAConnection interface.int
getTransactionTimeout()
We don't do transaction timeouts.javax.transaction.xa.XAResource
getXAResource()
boolean
isSameRM(javax.transaction.xa.XAResource xares)
int
prepare(javax.transaction.xa.Xid xid)
Prepares transaction.javax.transaction.xa.Xid[]
recover(int flag)
Recovers transaction.void
rollback(javax.transaction.xa.Xid xid)
Preconditions:boolean
setTransactionTimeout(int seconds)
We don't do transaction timeouts.void
start(javax.transaction.xa.Xid xid, int flags)
Preconditions:-
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.SQLException
XAConnection interface.- Specified by:
getConnection
in interfacejavax.sql.PooledConnection
- Overrides:
getConnection
in classPGPooledConnection
- Throws:
java.sql.SQLException
-
getXAResource
public javax.transaction.xa.XAResource getXAResource()
- Specified by:
getXAResource
in interfacejavax.sql.XAConnection
-
start
public void start(javax.transaction.xa.Xid xid, int flags) throws javax.transaction.xa.XAException
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
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:
start
in interfacejavax.transaction.xa.XAResource
- Throws:
javax.transaction.xa.XAException
-
end
public void end(javax.transaction.xa.Xid xid, int flags) throws javax.transaction.xa.XAException
Preconditions:
- 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:
end
in interfacejavax.transaction.xa.XAResource
- Throws:
javax.transaction.xa.XAException
-
prepare
public int prepare(javax.transaction.xa.Xid xid) throws javax.transaction.xa.XAException
Prepares transaction. Preconditions:
- xid != null
- xid is in ended state
Implementation deficiency preconditions:
- xid was associated with this connection
Postconditions:
- Transaction is prepared
- Specified by:
prepare
in interfacejavax.transaction.xa.XAResource
- Throws:
javax.transaction.xa.XAException
-
recover
public javax.transaction.xa.Xid[] recover(int flag) throws javax.transaction.xa.XAException
Recovers 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:
recover
in interfacejavax.transaction.xa.XAResource
- Throws:
javax.transaction.xa.XAException
-
rollback
public void rollback(javax.transaction.xa.Xid xid) throws javax.transaction.xa.XAException
Preconditions:
- 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:
rollback
in 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:
commit
in 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:
isSameRM
in interfacejavax.transaction.xa.XAResource
- Throws:
javax.transaction.xa.XAException
-
forget
public void forget(javax.transaction.xa.Xid xid) throws javax.transaction.xa.XAException
Does nothing, since we don't do heuristics.- Specified by:
forget
in interfacejavax.transaction.xa.XAResource
- Throws:
javax.transaction.xa.XAException
-
getTransactionTimeout
public int getTransactionTimeout()
We don't do transaction timeouts. Just returns 0.- Specified by:
getTransactionTimeout
in interfacejavax.transaction.xa.XAResource
-
setTransactionTimeout
public boolean setTransactionTimeout(int seconds)
We don't do transaction timeouts. Returns false.- Specified by:
setTransactionTimeout
in interfacejavax.transaction.xa.XAResource
-
-