Thread: Duplicate Proxy.newProxyInstance calls during PGXAConnection.getConnection?
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
Please forgive me, I was totally wrong here. Sorry for the noise.
On Sun, Mar 26, 2023 at 3:16 PM Andy Fan <zhihui.fan1213@gmail.com> wrote:
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 RegardsAndy Fan
Best Regards
Andy Fan