Re: Re: call XAConnection.commit() when autoCommit=true throw InvocationTargetException not SQLException.
От | Kris Jurka |
---|---|
Тема | Re: Re: call XAConnection.commit() when autoCommit=true throw InvocationTargetException not SQLException. |
Дата | |
Msg-id | alpine.BSO.2.00.1010152108240.6907@leary.csoft.net обсуждение исходный текст |
Ответ на | Re: call XAConnection.commit() when autoCommit=true throw InvocationTargetException not SQLException. (Yaocl <chunlinyao@gmail.com>) |
Список | pgsql-jdbc |
Thanks, I've applied this patch to CVS. Kris Jurka On Thu, 14 Oct 2010, Yaocl wrote: > 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 >> >
В списке pgsql-jdbc по дате отправления: