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

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

8.8.12 デッドロックが発生する場合

 データベースにSymfowareを使用している場合、Entity Beanを利用して複数件のレコードを検索して更新する処理を複数端末から同時に実行すると、デッドロックが発生することがあります。
 この場合は、プライマリキーを検索するSELECT文にFOR UPDATEを指定するようにしてください。

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

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

目次 索引 前ページ次ページ

Copyright 2007 FUJITSU LIMITED