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.
Modifier and Type | Class and Description |
---|---|
private class |
PGXAConnection.ConnectionHandler |
private static class |
PGXAConnection.State |
Modifier and Type | Field and Description |
---|---|
private boolean |
committedOrRolledBack |
private BaseConnection |
conn
Underlying physical database connection.
|
private javax.transaction.xa.Xid |
currentXid |
private boolean |
localAutoCommitMode |
private static java.util.logging.Logger |
LOGGER |
private javax.transaction.xa.Xid |
preparedXid |
private PGXAConnection.State |
state |
Constructor and Description |
---|
PGXAConnection(BaseConnection conn) |
Modifier and Type | Method and Description |
---|---|
void |
commit(javax.transaction.xa.Xid xid,
boolean onePhase) |
private void |
commitOnePhase(javax.transaction.xa.Xid xid)
Preconditions:
|
private void |
commitPrepared(javax.transaction.xa.Xid xid)
Commits prepared transaction.
|
private void |
debug(java.lang.String s) |
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() |
private boolean |
isPostgreSQLIntegrityConstraintViolation(java.sql.SQLException sqlException) |
boolean |
isSameRM(javax.transaction.xa.XAResource xares) |
private int |
mapSQLStateToXAErrorCode(java.sql.SQLException sqlException) |
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:
|
addConnectionEventListener, addStatementEventListener, close, createConnectionEvent, removeConnectionEventListener, removeStatementEventListener
private static final java.util.logging.Logger LOGGER
private final BaseConnection conn
private javax.transaction.xa.Xid currentXid
private PGXAConnection.State state
private javax.transaction.xa.Xid preparedXid
private boolean committedOrRolledBack
private boolean localAutoCommitMode
public PGXAConnection(BaseConnection conn) throws java.sql.SQLException
java.sql.SQLException
private void debug(java.lang.String s)
public java.sql.Connection getConnection() throws java.sql.SQLException
getConnection
in interface javax.sql.PooledConnection
getConnection
in class PGPooledConnection
java.sql.SQLException
public javax.transaction.xa.XAResource getXAResource()
getXAResource
in interface javax.sql.XAConnection
public void start(javax.transaction.xa.Xid xid, int flags) throws javax.transaction.xa.XAException
Preconditions:
Implementation deficiency preconditions:
Postconditions:
start
in interface javax.transaction.xa.XAResource
javax.transaction.xa.XAException
public void end(javax.transaction.xa.Xid xid, int flags) throws javax.transaction.xa.XAException
Preconditions:
Implementation deficiency preconditions:
Postconditions:
end
in interface javax.transaction.xa.XAResource
javax.transaction.xa.XAException
public int prepare(javax.transaction.xa.Xid xid) throws javax.transaction.xa.XAException
Prepares transaction. Preconditions:
Implementation deficiency preconditions:
Postconditions:
prepare
in interface javax.transaction.xa.XAResource
javax.transaction.xa.XAException
public javax.transaction.xa.Xid[] recover(int flag) throws javax.transaction.xa.XAException
Recovers transaction. Preconditions:
Postconditions:
recover
in interface javax.transaction.xa.XAResource
javax.transaction.xa.XAException
public void rollback(javax.transaction.xa.Xid xid) throws javax.transaction.xa.XAException
Preconditions:
Implementation deficiency preconditions:
Postconditions:
rollback
in interface javax.transaction.xa.XAResource
javax.transaction.xa.XAException
public void commit(javax.transaction.xa.Xid xid, boolean onePhase) throws javax.transaction.xa.XAException
commit
in interface javax.transaction.xa.XAResource
javax.transaction.xa.XAException
private void commitOnePhase(javax.transaction.xa.Xid xid) throws javax.transaction.xa.XAException
Preconditions:
Implementation deficiency preconditions:
Postconditions:
javax.transaction.xa.XAException
private void commitPrepared(javax.transaction.xa.Xid xid) throws javax.transaction.xa.XAException
Commits prepared transaction. Preconditions:
Implementation deficiency preconditions:
Postconditions:
javax.transaction.xa.XAException
public boolean isSameRM(javax.transaction.xa.XAResource xares) throws javax.transaction.xa.XAException
isSameRM
in interface javax.transaction.xa.XAResource
javax.transaction.xa.XAException
public void forget(javax.transaction.xa.Xid xid) throws javax.transaction.xa.XAException
forget
in interface javax.transaction.xa.XAResource
javax.transaction.xa.XAException
public int getTransactionTimeout()
getTransactionTimeout
in interface javax.transaction.xa.XAResource
public boolean setTransactionTimeout(int seconds)
setTransactionTimeout
in interface javax.transaction.xa.XAResource
private int mapSQLStateToXAErrorCode(java.sql.SQLException sqlException)
private boolean isPostgreSQLIntegrityConstraintViolation(java.sql.SQLException sqlException)