EJBアプリケーションからデータベースにアクセスする場合、EJBアプリケーションの実行多重度を上げるには、トランザクションアイソレーションレベル(以降、アイソレーションレベルと呼びます)を考慮する必要があります。アイソレーションレベルとは、データベースに対する排他整合性水準のことです。
使用できるアイソレーションレベルを以下に示します。アイソレーションレベルの詳細は、使用するデータベースのマニュアルを参照してください。
Transaction-read-committed
Transaction-read-uncommitted
Transaction-repeatable-read
Transaction-serializable
アイソレーションレベルの設定は、UserTransaction.begin()メソッドを発行してから、UserTransaction.commit()メソッドまたはUserTransaction.rollback()メソッドを発行するまでの間有効です。
■設定方法
アイソレーションレベルは、Interstage管理コンソールまたはisj2eeadminコマンドで設定します。設定方法の詳細については、Interstage管理コンソールのヘルプを参照してください。isj2eeadminコマンドについては、“リファレンスマニュアル(コマンド編)”の“isj2eeadmin”を参照してください。
DBMSにOracleを使用している場合
「ORA-8177:このトランザクションのアクセスを逐次化できません。」というエラーは、トランザクションアイソレーションレベルにTransaction-serializableが設定されているにもかかわらず、複数のユーザが同時に同一の表を更新した場合など、トランザクションのシリアル化を保障できない場合に出力され、ユーザにその旨を伝えています。
トランザクションアイソレーションレベルにTransaction-serializableを設定して、エラー「ORA-8177」が発生した場合は、アプリケーション側で単に「異常終了」と判断するのではなく、トランザクションのロールバック後に「リトライ」させるなどの対処が必要になります。
なお、トランザクションアイソレーションレベルがTransaction-read-committed(Oracleのデフォルト)の場合は、「ORA-8177」エラーが発生することはありません。特にTransaction-serializableの設定が必須ではない場合、Transaction-read-committedを設定することによって、同時実行性が向上し、「ORA-8177」エラーも発生しなくなります。