JTA/JTS

JTA/JTS
Java Transaction API / Java TransactionService
J2EEアーキテクチャにトランザクション処理サービスを提供する

J2EE仕様には
JTAは必須とあるが
JTSは実装の1つの選択とある


JTSのトラン・マネージャ
トランザクション・マネージャは
トランザクションの開始/完了/コミット/ロールバック管理する

JTSのトランザクション・マネージャの機能
* アプリとアプリサーバにトランザクションのスコープと存続期間の操作性を提供する
* シングルトランザクションに対して複数のアプリケーションやコンポーネントの包含を可能にする
* グローバルトランザクションをサポートするリソース・マネージャとの連携
* 複数のリソース・マネージャとの通信を伴うグローバルトランザクションの実行と完了
* トランザクション同期のサポート
* ほかのトランザクション・マネージャとの連携

J2EE SDKではJTSに基づくトランザクション・マネージャの実装が提供されていてる



JTAトランザクション
主に3つの要素で構成さる
1
アプリからトランザクションの境界設定やトランザクション管理を実行するためのjavax.transaction.UserTransactionインタフェース
主にWebアプリやBean管理のトランザクションを持つEJBで使用する
2
トランザクション・マネージャがアプリのトランザクションの境界設定や
トランザクションの管理を行うためのjavax.transaction.TransactionManagerインターフェイス
主にコンテナ管理のトランザクションを持つEJBのEJBコンテナによって使用される
3
トランザクション・マネージャがXA準拠リソースのリソース・マネージャと連携するためのjavax.transaction.xa.XAResourceインターフェイス


JTAトランザクションは
複数のコンポーネントやリソース・マネージャ間にまたがることのできるトランザクション
そのため
分散アプリケーションとして
非常に柔軟かつ複雑なトランザクション処理を開発できる
しかし
本来トランザクションが持つべきACID属性をシステムとして確実に実現するためには
極力アプリケーションサーバにトランザクション処理を任せた方が無難
そのために
アプリケーションサーバは自動的にトランザクション処理を実行できるよう
属性をEJBにセットするだけでJTAトランザクションを操作できるしくみ
―コンテナ管理によるトランザクション境界の設定―
を提供している

また
JTAトランザクションをプログラミングによって利用するには
JTAのjavax.transaction.UserTransactionインターフェイスを使用する


■EJBでのトランザクション
EJBには
Bean管理によるものと
コンテナ管理によるもの
の2種類のトランザクション境界設定がある
□コンテナ管理によるトランザクション境界設定
6つのトランザクション属性
(Required, RequiresNew, NotSupported, Supports, Mandatory, Never)
をEJBのメソッドに関連付けられる

コンテナ管理によるトランザクション境界設定を使うEJBの場合
EJBコンテナがトランザクション境界を管理する
EJBが実行される際
メソッドのトランザクション属性によって
どのようなトランザクション管理をEJBコンテナで行う必要があるかがコントロールされる

コンテナ管理によるトランザクション境界設定を使用する利点
* EJBのトランザクション動作は
プログラムではなく、宣言によって指定される
これにより、アプリケーションコンポーネントプロバイダは
トランザクション境界設定コードをコンポーネント内に作成する必要がなくなり
コンポーネントとしての独立性を高めることができる
* トランザクション境界設定をEJBコンテナに任せるので信頼性を向上できる
* EJBを再利用する場合に、用途に応じてトランザクション属性を変更し活用することができる

□Bean管理によるトランザクション境界設定
EJBはJTAのjavax.transaction.UserTransactionインターフェイスを使用して
トランザクション境界を明示的に設定する
選択できるのは
セッションBeanだけ
※ エンティティBeanは 常にコンテナ管理によるトランザクション境界設定を使用する必要がある


Bean管理トランザクション境界設定を使ったJTAインターフェイスの使用法
UserTransactionオブジェクトは
EJBContext.getUserTransactionでlookupされ 使用される
UserTransaction ut = ejbContext.getUserTransaction();
ut.begin();
// perform transactional work here
ut.commit();


■Webアプリのトランザクション
Webアプリ(JSP、Servlet)は
EJBのようなJTAの緊密な連携は持っていないため
JNDIを使ってUserTransactionオブジェクトをルックアップしてから
UserTransactionインターフェイスを使ってトランザクションを境界設定する

Context ic = new InitialContext();
UserTransaction ut =
(UserTransaction) ic.lookup("java:comp/UserTransaction");
ut.begin();
// perform transactional work here
ut.commit();

Webアプリでトランザクション処理を実装する場合
トランザクションの伝播と状態の遮断等に注意すること


アプレット/アプリクライアントでのトランザクション
アプレットやアプリケーションクライアントのトランザクションUserTransaction使えばサポート可能
アプレットやアプリクライアントがUserTransactionオブジェクトに直接アクセスできるか
コンテナで提供される機能次第


■JMSとトランザクション
J2EE1.3では
アプリケーションサーバは
JMSサービスをトランザクションで連携するリソース・マネージャとしてサポートする


■JCAとトランザクション
J2EE1.3では
アプリケーションサーバは
JCAもリソース・マネージャとしてサポートする
JCAのリソースアダプタは
JTAのXATransactionインターフェイスの実装している必要あり


ref:
Javaを紐解くための重点キーワード:JTA/JTS
http://www.atmarkit.co.jp/fjava/keyword/jkey/jkey05.html

tag : JTA JTS

2009-10-27 23:53 : j2ee : コメント : 0 : トラックバック : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

search

ad



counter


tag cloud

category cloud