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

第8章 J2EEアプリケーション開発・運用時の異常> 8.9 EJBサービス使用時の異常

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