2012-11-09 2 views
3

내가 가진합니다 :BoneCP & 더비가 - 어떻게 제대로 종료

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) 

가 어떻게이 예외를 방지 할 수 있습니다. 나는 당신의 설정에서 true로 가능한 모든 내가 생각할 수있는 방법 ...

+0

당신이 포함 된 드라이버를 사용하고 있습니까? – jalopaba

+0

전체 스택 추적입니까? 아니면 자르는거야? 당신의 코드가 그 스택 트레이스에 나타나지 않는 것은 이상합니다 ... –

+0

그건 완벽한 stacktrace입니다. 그 코드를 실행하면 정확히 얻을 수 있습니다. –

답변

2

것은 당신이 v0.8.1 - 베타 2 이상을 실행하지 않는 설정 "disableConnectionTracking"을 시도했습니다.

당신은 또한 성공적인 종료 후 더비에서 SQLException 기대할 수 있습니다 : http://db.apache.org/derby/docs/dev/devguide/tdevdvlp40464.html

+0

한 가지 문제는 문제가 당신이 바로 DriverManager.getConnection를 (...)를 할 경우이하는 것처럼 호출이 실제로 종료 데이터베이스를 않는다는 것입니다,이로 남아있다. BoneCP가하는 ​​일이 무엇이든, 더비 스레드를 정상적으로 끝내게하지 않습니다 ... –