Re: call XAConnection.commit() when autoCommit=true throw InvocationTargetException not SQLException.
От | Yaocl |
---|---|
Тема | Re: call XAConnection.commit() when autoCommit=true throw InvocationTargetException not SQLException. |
Дата | |
Msg-id | AANLkTinV+QX5drYdt-22LE7Mp9w5yET4qSio+im+qdnJ@mail.gmail.com обсуждение исходный текст |
Ответ на | call XAConnection.commit() when autoCommit=true throw InvocationTargetException not SQLException. (Yaocl <chunlinyao@gmail.com>) |
Ответы |
Re: Re: call XAConnection.commit() when autoCommit=true throw
InvocationTargetException not SQLException.
|
Список | pgsql-jdbc |
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 по дате отправления: