Hi
This is a quick patch to current head.
Regards,
Yao
On Thu, Oct 14, 2010 at 6:24 PM, Yaocl <chunlinyao@gmail.com> wrote:
> Hi
>
> According to the javadoc call commit() on autoCommit=true connection
> will throw a SQLException. But a PGXAConnection
> thrown a InvocationTargetException.
>
> Because the following code, It use reflection internally.
> method.invoke() will throw InvocationTargetException when underlying
> method throw a Exception.
>
> /*
> * A java.sql.Connection proxy class to forbid calls to transaction
> * control methods while the connection is used for an XA transaction.
> */
> private class ConnectionHandler implements InvocationHandler
> {
> private Connection con;
> public ConnectionHandler(Connection con)
> {
> this.con = con;
> }
> public Object invoke(Object proxy, Method method, Object[] args)
> throws Throwable
> {
> if (state != STATE_IDLE)
> {
> String methodName = method.getName();
> if (methodName.equals("commit") ||
> methodName.equals("rollback") ||
> methodName.equals("setSavePoint") ||
> (methodName.equals("setAutoCommit") && ((Boolean)
> args[0]).booleanValue()))
> {
> throw new PSQLException(GT.tr("Transaction control methods
> setAutoCommit(true), commit, rollback and setSavePoint not allowed
> while an XA transaction is active."),
> PSQLState.OBJECT_NOT_IN_STATE);
> }
> }
> return method.invoke(con, args);
> }
> }
>
> Regards,
> Yao
>