3

私は持っている:

BoneCP CONNECTION_POOL = ...;
CONNECTION_POOL.getConfig().setJdbcUrl("jdbc:derby:database...;shutdown=true");
Connection connection = CONNECTION_POOL.getConnection();
connection.close();
CONNECTION_POOL.shutdown();

ただし、これにより次の例外が発生します。

3274 [com.google.common.base.internal.Finalizer] ERROR com.jolbox.bonecp.ConnectionPartition - Error while closing off internal db connection
java.sql.SQLException: Cannot close a connection while a transaction is still active.
    at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedConnection.newSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedConnection.checkForTransactionInProgress(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedConnection.close(Unknown Source)
    at com.jolbox.bonecp.ConnectionPartition$1.finalizeReferent(ConnectionPartition.java:187)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.common.base.internal.Finalizer.cleanUp(Finalizer.java:154)
    at com.google.common.base.internal.Finalizer.run(Finalizer.java:127)

この例外を回避するにはどうすればよいですか。考えられるあらゆる方法を試しました...

4

1 に答える 1

2

v0.8.1-beta2 以降を実行している場合を除き、設定で「disableConnectionTracking」を true に設定してください。

SUCCESSFUL シャットダウンの後、Derby からの SQLException も予期する必要があることに注意してください: http://db.apache.org/derby/docs/dev/devguide/tdevdvlp40464.html

于 2012-11-10T17:25:50.297 に答える