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ジャパン)
- Webの表示速度を遅くする「SSLハンドシェイク」とは (2010/2/9)
安全性を担保しようとWebページにSSLを適用すると、負荷の高い処理が実行される。速度と安全性は両立できるのか? - クラウド活用「雲活」のために押さえるべき39のポイント (2010/2/2)
活用するべきサービスか否か、クラウドの利点・問題点、クラウドプラットフォーム提供企業になるための条件、開発者がするべきことに分けて紹介 - 再利用性の高いクラス作成に重要な“アクセス制御” (2010/1/28)
Javaのアクセス修飾子public、private、protectedや、Eclipseで簡単に作れるアクセサメソッドgetter、setterについて解説 - DB設計の神ツール「ERMaster」なら、ここまでできる (2010/1/21)
直感的なUIに、カスタマイズ可能な、Excel出力のテーブル定義書、辞書機能など多機能なERモデリングの無料Eclipseプラグインです
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |







