Interstage Application Server/Interstage Web Server トラブルシューティング集
|
目次
索引

|
8.9.11 デッドロックが発生する場合
Entity Beanを利用して複数件のレコードを検索して更新する処理を複数端末から同時に実行すると、デッドロックが発生することがあります。
この場合は、プライマリキーを検索するSELECT文にFOR UPDATEを指定するようにしてください。
BMPの場合はEJBアプリケーションのejbFind<METHOD>メソッドもしくはejbLoadメソッドで、CMP1.1の場合はCMP定義のfinder定義に指定します。
CMP2.xの場合は、CMFマッピング定義の同時更新データの一貫性保証を選択します。
またFOR UPDATE句を指定、および、アプリケーションが1トランザクション内で複数のテーブルにアクセスするなどの場合、シーケンスによっては、複数端末からの同時実行によりデッドロックエラーが発生することがあります。
この場合、アプリケーションを見直し、デッドロックエラー発生時にリトライを行うようなアプリケーションに変更するか、またはアプリケーション内でトランザクションの排他を取るようにアプリケーションを変更してください。
FOR UPDATEを提供していないデータベースを使用する場合は、データベースが提供する代替の排他機能を使用するか、アプリケーション側でデッドロックエラー発生時にリトライするか、またはトランザクションの排他を行ってください。

BMPの場合 SELECT ID FROM SAMPLESCM.SAMPLETBL WHERE ID > ? FOR UPDATE
CMP1.1の場合 WHERE @ID > ?param1? FOR UPDATE
Copyright 2008 FUJITSU LIMITED