Seam 2.2.2、JBoss 5.1、MySQL 5.1.5.1、MySQL JDBC コネクタ 5.1.12、および非同期メソッド (Quartz を使用) と pojo で奇妙な動作をします。
さまざまなタスク用に 10 個の非同期スレッドのプールがあります。それらは通常正常に動作し、db クエリや更新などを実行します。1 つの非同期メソッドで例外が発生した場合、同じスレッドから呼び出される次の非同期メソッドには影響しません。
しかし、特定のスレッドでこの例外が発生するケースが 1 つあります。
012-10-02 05:45:26,743 WARN [][JDBCExceptionReporter] (er-4) SQL Error: 0, SQLState: null
2012-10-02 05:45:26,743 ERROR [][JDBCExceptionReporter] (er-4) Transaction is not active: tx=TransactionImple < ac, BasicAction: 7f000001:b824:5069f752:15d status: ActionStatus.ABORT_ONLY >; - nested throwable: (javax.resource.ResourceException: Transaction is not active: tx=TransactionImple < ac, BasicAction: 7f000001:b824:5069f752:15d status: ActionStatus.ABORT_ONLY >)
2012-10-02 05:45:26,743 INFO [][DefaultLoadEventListener] (er-4) Error performing load command
org.hibernate.exception.GenericJDBCException: Cannot open connection
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1573)
その後、このスレッド (er-4) が使用され、クエリが実行されるたびに、同じ例外が発生します。どうすればこれから回復できますか?また、その理由は何ですか? このスレッドによってどのメソッドが呼び出されても (@Transactional で注釈が付けられています)、GenericJDBCException: Cannot open connection が原因ですべて失敗します。問題は突然突然現れました。
私はdb接続プールを使用しており、使用する前に接続を検証しています(デプロイメント記述子から):
<!--pooling parameters-->
<min-pool-size>5</min-pool-size>
<max-pool-size>100</max-pool-size>
<blocking-timeout-millis>5000</blocking-timeout-millis>
<idle-timeout-minutes>15</idle-timeout-minutes>
<prepared-statement-cache-size>50</prepared-statement-cache-size>
<check-valid-connection-sql>select 1 from dual</check-valid-connection-sql>
これは私のコードに問題がありますか? シームと?JBoss? MySQL? JDBC MySQL ドライバー?
他の誰かが同様の問題を経験しましたか。