EJBのコンテナ管理トランザクション(ContainerManagedTransactions-CMT)とは
どんなものなのか試してみようというのが今回のテーマです。
ステートレスのローカルオブジェクトのセッション Bean で検証をします。
主に@TransactionAttributeアノテーションによってTransactionAttributeTypeが
REQUIREDとREQUIRES_NEWに指定されたメソッドがコミットされる様子と
ロールバックされる様子を観察したいと思います。
インターセプターを使ってトランザクション内に例外を発生させてロールバックするようにします。
確認のためにセッションIDをアクセスログとして保存し表示する検証用Webアプリを作成します。
検証用Webアプリはシンプルにしたいのでフレームワークを使わずServletとJSPで作成します。
以下の内容を検証します。
- REQUIREDに指定されたメソッド同士は同じトランザクションとして処理されるのか?
トランザクションに参加するいずれかのメソッドで例外が発生した場合、
その トランザクションに参加するすべてのメソッドでの処理がロールバックされるか検証します。
- REQUIRES_NEWに指定されたメソッドは別トランザクションを開始して処理されるのか?
別トランザクションのメソッドで例外が発生した場合でも REQUIRES_NEWに指定された
メソッドでの処理がコミットされていれば、その処理はロールバックされないことを検証します。
(別トランザクションのメソッドでの処理はロールバックされる)