2016-07-29 8 views
0

私が使用しているサーバーはGlassFishですが、この問題はWeblogicでも発生します。EJBデータソースクライアントの切断の検出

私のクライアントマシンはトランザクションを開始し、サーバーからいくつかのEJBを検索し、完了するまでに時間がかかる作業を開始します。プロセス中、クライアントマシンは死ぬ(powercutと言う)。

クライアントマシンによって開かれたデータベースクエリは閉じられません(クライアントが終了したため)、デッドロックやその他の問題が発生します。

このデッドトランザクションを検出してすべてのリソースを再利用する方法はありますか?擬似コードの例

答えて

0
transaction.begin(); 

MyBean bean = (MyBean)ctx.lookup("MyBean"); 

bean.doComplicatedWorkPart1(); 

bean.writeResultsToTheDatabase(); 

// Client dies during this method (powercut), so the transaction 
// is simply left hanging. 
bean.doComplicatedWorkPart2(); 

bean.writeResultsToTheDatabase(); 

transaction.commit(); 

以下

IIRC、これは容易に取り扱うことができません。それはあなたがぶら下がっているトランザクションを見つけるためにDB管理を使用する必要があるものを使用するデータベースに依存します。

環境をより信頼できるものにするには、このためにサーバーサイドBeanを作成する必要があります。ここでは、トランザクション中にプロセスが枯渇したか、接続が緩んでいる可能性は低いです。

+0

ありがとう、私はこれが対処するのが厳しい状況かもしれないと思いました。それはあまり頻繁に起こることはありませんが、それが起こると迷惑になることがあります。 –

関連する問題