From: | Yaocl <chunlinyao(at)gmail(dot)com> |
---|---|
To: | pgsql-jdbc(at)postgresql(dot)org |
Subject: | call XAConnection.commit() when autoCommit=true throw InvocationTargetException not SQLException. |
Date: | 2010-10-14 10:24:08 |
Message-ID: | AANLkTimTFWMnXoQaY+qVUSPkv-Y=rzCF=dvD_JiumxRA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc |
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
From | Date | Subject | |
---|---|---|---|
Next Message | Yaocl | 2010-10-14 12:18:36 | Re: call XAConnection.commit() when autoCommit=true throw InvocationTargetException not SQLException. |
Previous Message | Radosław Smogura | 2010-10-14 06:59:23 | Re: [JDBC] Support for JDBC setQueryTimeout, et al. |