1
サーバは、ejbコンポーネントのサーブレットコールメソッドからサーブレットでhttpリクエストを受け取ります。異なるスレッドから呼び出した場合のクエリタイムアウト
public void ejbMethodVariant1(...) {
//calling stored proc
...
//calling same stored proc
}
public void ejbMethodVariant2(...) {
//calling stored proc
...
Thread t = new Thread(() -> {
//calling same stored proc
});
t.start();
try {
t.join();
} catch (InterruptedException e){
...
}
}
ストアドプロシージャは常に同じです。 "ストアドプロシージャを呼び出すと、" 意味:
- がコール可能文
- 閉会声明バリアント1で接続
を閉じる
第2の呼び出しでは、最初の呼び出しが正常に完了し、2分後に2回目の呼び出しが終了しました(com.microsoft.sqlserver.jdbc.SQLServerException:クエリがタイムアウトしました)。最初の呼び出しではautoCommit = falseが、2番目の呼び出しではautoCommit = の場合はとなります。
JEE仕様によると、スレッド作成と管理はejbでは許可されていません。 [この回答](http://stackoverflow.com/questions/3816286/multithreading-in-a-stateless-session-bean#3816621)または[this](http://www.oracle.com/technetwork/java)を参照してください。 /restrictions-142267.html#threads) –