Subject: Duplicate Proxy.newProxyInstance calls during PGXAConnection.getConnection?

From: Andy Fan <[email-masked]>
Date: Sun, 26 Mar 2023 15:16:59 +0800

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?

[1]
https://github.com/pgjdbc/pgjdbc/blob/master/pgjdbc/src/main/java/org/postgresql/xa/PGXAConnection.java#L86

-- 
Best Regards
Andy Fan

---

From: Andy Fan <[email-masked]>
Date: Sun, 26 Mar 2023 16:16:37 +0800

Please forgive me, I was totally wrong here.  Sorry for the noise.

On Sun, Mar 26, 2023 at 3:16 PM Andy Fan <[email-masked]> wrote:

>      * Wrap the connection in a proxy to forbid application from fiddling with transaction state

-- 
Best Regards
Andy Fan