4

私たちのものは、メインフレーム/DB2 バックエンドを介して Websphere 6.1 で Struts-EJB-Hibernate を使用する J2EE アプリで、最近実稼働に移行しました。

ユーザーがアプリケーションに初めてログインしたとき、またはこの例外が断続的に発生したときに、古い接続例外が発生しています。

2 番目に、ユーザーがアプリケーションにログインできるようにします。私が得ている正確なエラーメッセージは

empcom.ibm.websphere.ce.cm.StaleConnectionException: 
Execution failed due to a distribution protocol error that caused deallocation of the conversation.  
The command requested could not be completed because of a permanent error condition detected at the target system.  
DB2ConnectionCorrelator: AC100B80.A260.090107181206

PRETESTWebshere 設定でオプションを有効にし、間隔を 60 秒に設定しましたが、それでもこの問題が発生します..

親切にあなたの意見を共有し、私を助けてください

必要に応じて詳細をお知らせします。

4

2 に答える 2

8

本番システムの 1 つで、朝の最初のログイン時に同じ問題が発生しました。解決策は、接続プールの最小サイズをゼロに設定することでした。

最小サイズが 0 より大きい値 (たとえば 1) に設定されている場合、タイムアウトになった接続は、無効であると検出されたときにプールから削除されますが、それらの一部 (上記の例では最後の接続) はプールに残ります。 (最小サイズが 1 の場合、まだ有効な接続でなくても、1 つの接続がプールに残ります)。

次にアプリケーションが接続を要求すると、無効な接続が提供され、例外が発生します。

最小サイズをゼロに設定すると、すべての無効な接続がプールから削除されるため、アプリケーションに提供される接続がまだ有効でない可能性はありません (有効な場合はプールに残り、そうでない場合は、はプールから削除されます)。

事前テストを使用することは有効な代替手段になる可能性がありますが、接続がアプリケーションに提供されるたびにテストされるため、余分な労力がかかります。

于 2009-05-25T12:32:06.380 に答える
1

私はこれに対する答えを得ました

事前テストの古い接続と新しい接続を使用して、この問題を解決できます。事前テストのクエリは、いつでも実行される基本的なクエリ (.. から sysdate を選択) である必要があります。

時間間隔は最大にする必要があるため、アプリケーションサーバーはオーバーヘッドを取得しません

于 2009-04-29T06:30:43.123 に答える