Javaを紐解くための重点キーワード
伊藤敬
日本BEAシステムズ
2001/11/7
| JTA/JTS |
■JTA/JTSとは?
JTA/JTS(Java Transaction API、Java Transaction Service)はJ2EEアーキテクチャにトランザクション処理サービスを提供します。
JTAには、トランザクション・マネージャがトランザクション処理を行う際に、トランザクションに関与する各種コンポーネントとの間で必要となるAPIが定義されています(ここでいうコンポーネントとは、トランザクション処理を要求するアプリケーション群、J2EEアプリケーションサーバ、RDBMSなどのリソース・マネージャを指します)。トランザクション・マネージャは、アプリケーションから要求されるトランザクション処理をリソース・マネージャとともに実行し、かつシステムからのあらゆる影響を遮断して確実にトランザクション処理を実行するソフトウェア・サービスです。2001年11月現在のJTAの最新仕様はバージョン1.0.1です。
JTSには、JTAをサポートするトランザクション・マネージャの実装が指定されており、JTSへの準拠にはObject Management Group Object Transaction Service 1.1仕様のJavaマッピングが実装されることになります。JTSトランザクション・マネージャは、J2EE分散アプリケーションでトランザクション処理を実現するために必要な基本機能を提供することができます。JTSに定義されているトランザクション・マネージャの機能は、トランザクション境界設定、トランザクションリソースの管理、同期化、および特定のトランザクションインスタンスへの固有情報の伝播に必要なサービスおよび管理機能などです。現在の最新仕様はJTS 1.0(ドラフト仕様)です。JTA/JTSと関連するサービスなどの概要を下図に示します。
![]() |
| JTA/JTSとそれに関連するサービス。網かけ部分がJTAのインターフェイス |
JTAとJTSはJ2EE準拠のアプリケーションサーバにとって必ずしも両方の実装が必須ではありません。J2EE仕様には、JTAは必須と記載されていますが、JTSについては実装の1つの選択とあります。
■JTSで定義されるトランザクション・マネージャ
トランザクション・マネージャは、トランザクションの開始と完了を行うアプリケーションプログラムからのコマンドを、それらのトランザクションにかかわるすべてのリソース・マネージャと通信することで調整します。リソース・マネージャがトランザクション中に失敗した場合、トランザクション・マネージャはリソース・マネージャが保留中のトランザクションをコミットするかロールバックするかを決定するのを支援します。JTSでは以下のようにトランザクション・マネージャの機能が定義されています。
- アプリケーションおよびアプリケーションサーバにトランザクションのスコープと存続期間の操作性を提供する
- シングルトランザクションに対して複数のアプリケーションやコンポーネントの包含を可能にする
- グローバルトランザクションをサポートするリソース・マネージャとの連携
- 複数のリソース・マネージャとの通信を伴うグローバルトランザクションの実行と完了
- トランザクション同期のサポート
- ほかのトランザクション・マネージャとの連携
J2EE SDKではJTSに基づくトランザクション・マネージャの実装が提供されており、これを利用してJ2EEアプリケーションの分散トランザクションを動作させてみることができます。
JTAトランザクションJTAは主に3つの要素で構成されています。
- アプリケーションからトランザクションの境界設定やトランザクション管理を実行するためのインターフェイスであるjavax.transaction.UserTransaction。このインターフェイスは、Webアプリケーションや
Bean管理のトランザクションを持つEJBで使用する
- トランザクション・マネージャがアプリケーションのトランザクションの境界設定や、トランザクションの管理を行うためのインターフェイスであるjavax.transaction.TransactionManager。このインターフェイスはコンテナ管理のトランザクションを持つEJBのEJBコンテナによって使用される
- トランザクション・マネージャがXA準拠リソースのリソース・マネージャと連携するためのインターフェイスであるjavax.transaction.xa.XAResource
JTAトランザクションは、複数のコンポーネントやリソース・マネージャ間にまたがることのできるトランザクションです。そのため、分散アプリケーションとして、非常に柔軟かつ複雑なトランザクション処理を開発できます。しかし、本来トランザクションが持つべきACID属性をシステムとして確実に実現するためには、極力アプリケーションサーバにトランザクション処理を任せた方が無難です。そのためにアプリケーションサーバは自動的にトランザクション処理を実行できるよう、属性をEJBにセットするだけでJTAトランザクションを操作できるしくみ――コンテナ管理によるトランザクション境界の設定――を提供しています。これはEJBの利用価値としても大きな意味を持っています。
また、JTAトランザクションをプログラミングによって利用するには、JTAのjavax.transaction.UserTransactionインターフェイスを使用します。
■EJBでのトランザクションEJBには、Bean管理によるものとコンテナ管理によるものの、2種類のトランザクション境界設定があります。コンテナ管理によるトランザクション境界設定では、6つのトランザクション属性(Required、RequiresNew、NotSupported、Supports、Mandatory、およびNever)をEJBのメソッドに関連付けることができます。
コンテナ管理によるトランザクション境界設定コンテナ管理によるトランザクション境界設定を使うEJBの場合、EJBコンテナがトランザクション境界を管理します。EJBが実行される際、メソッドのトランザクション属性によって、どのようなトランザクション管理をEJBコンテナで行う必要があるかがコントロールされます。例えば、メソッドのトランザクション属性がRequiresNewの場合、EJBコンテナは、このメソッドが呼ばれるたびに新しいJTAトランザクションを開始し、メソッドが戻る前にトランザクションをコミットしようとします。
コンテナ管理によるトランザクション境界設定を使用することには、次のような利点があります。
- EJBのトランザクション動作は、プログラムではなく、宣言によって指定されます。これにより、アプリケーションコンポーネントプロバイダは、トランザクション境界設定コードをコンポーネント内に作成する必要がなくなり、コンポーネントとしての独立性を高めることができる
- トランザクション境界設定をEJBコンテナに任せるので信頼性を向上できる
- EJBを再利用する場合に、用途に応じてトランザクション属性を変更し活用することができる
Bean管理によるトランザクション境界設定では、EJBはJTAのjavax.transaction.UserTransactionインターフェイスを使用して、トランザクション境界を明示的に設定します。Bean管理によるトランザクション境界設定を選択できるのは、セッションBeanだけです。エンティティBeanは、常にコンテナ管理によるトランザクション境界設定を使用する必要があります。
以下のコードは、Bean管理によるトランザクション境界設定を使ってトランザクションを境界設定するJTAインターフェイスの使用法を示しています。UserTransactionオブジェクトはメソッド EJBContext.getUserTransactionを使用してルックアップされ、トランザクションで使用されます。
UserTransaction ut = ejbContext.getUserTransaction(); |
Webアプリケーション(JSP、Servlet)は、EJBのようなJTAの緊密な連携は持っていません。このため、Webアプリケーションでは、JNDIを使ってUserTransactionオブジェクトをルックアップしてから、UserTransactionインターフェイスを使ってトランザクションを境界設定します。これは、WebコンポーネントがJTAトランザクションの範囲内のエンタープライズ情報システムにアクセスする必要があるアプリケーションで役立ちます。
以下は、Webアプリケーション内でトランザクションを境界設定するJTAのUserTransactionインターフェイスの使用例です。
Context ic = new InitialContext(); |
ただしアプリケーション開発を行ううえで、Webアプリケーション内ではトランザクション処理を極めて限定的に利用する必要があります。極力、トランザクション処理はEJBで処理すべきです。また、Webアプリケーションでトランザクション処理を実装する場合には、トランザクションの伝播と状態の遮断に関するいくつかの制限事項に注意する必要があります。
アプレットおよびアプリケーションクライアントでのトランザクション
アプリケーションサーバは、基本的にアプレットおよびアプリケーションクライアントのトランザクションサポートを行っていません。ただし、J2EE製品がほかとの差別化のために、この機能を提供することができます。従って、アプレットおよびアプリケーションクライアントがUserTransactionオブジェクトに直接アクセスできるかどうかは、コンテナで提供される機能によって変わります(BEA WebLogic Serverにはこの機能が実装されています)。移植性を保証するには、アプレットおよびアプリケーションクライアントがトランザクション型作業をエンタープライズBeanに委譲する必要があります。
■JMSとトランザクション
J2EEの新しい仕様であるバージョン1.3では、アプリケーションサーバはJMSサービスをトランザクションで連携するリソース・マネージャとしてサポートすることが記載されています。アプリケーションサーバはWebアプリケーションやEJBからJMSアプリケーションをトランザクションサービスを通じて利用できるように実装しなければなりません。
■JCAとトランザクション
上記のJMSと同様、J2EE 1.3ではJCAもリソース・マネージャとしてアプリケーションサーバはサポートしなければなりません。JCAのリソースアダプタはJTAのXATransactionインターフェイスの実装を必要とします。
| Javaを紐解くための重点キーワード |
ホワイトペーパー(TechTargetジャパン)
- Android NDKでJNIを使用してアプリを高速化するには (2010/3/17)
C/C++やOpenGL ESといったネイティブコードを使うためのNDKとJNIを紹介し、その使い方や注意点を徹底解説します - 調査の難しい「OutOfMemoryError」事例、5選 (2010/3/11)
Java開発者が避けて通れないメモリ不足エラーの基本的な問題切り分け方法と発生につながる事例、対処法を解説 - 究極の問題解析ツール、逆コンパイラJD-Eclipseとは (2010/3/8)
ライブラリ内で例外が発生! そのクラスのソースコードを調べたい!! 自動で逆コンパイルしてくれる無料Eclipseプラグインがあります - いまさら聞けない「Webサービス」の常識 (2010/2/26)
昨今では企業システムでも使われる「Webサービス」の概念やJava標準のJAX-WSを紹介しJBoss WSでサンプルを作成
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |







