In the PGXAConnection.GetConnection() [1], we can see the below code:
@Override public Connection getConnection() throws SQLException {
// the first time ConnectionHandler has been created. Connection conn = super.getConnection();
// When we're outside an XA transaction, autocommit // is supposed to be true, per usual JDBC convention. // When an XA transaction is in progress, it should be // false. if (state == State.IDLE) { conn.setAutoCommit(true); }
/* * Wrap the connection in a proxy to forbid application from fiddling with transaction state * directly during an XA transaction */
// ConnectionHandler is created again here. ConnectionHandler handler = new ConnectionHandler(conn); return (Connection) Proxy.newProxyInstance(getClass().getClassLoader(), new Class[]{Connection.class, PGConnection.class}, handler); }
However I think the proxy has already been created at the first line: super.getConnection(),
and then it is created later. Is it a duplication?