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

|
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