【実行環境】
Tomcat5 JOTM-1.5.3 PostgreSQL 7.4 |
|
1.はじめに
DAO(Data Access Object)パターンを実装するときに、トランザクションの管理方法について悩んだことはありませんか?DAOの各メソッド内部でトランザクションを管理すると、いくつかのメソッドにまたがるようなトランザクションの制御ができません。逆に、メソッドの外部でトランザクション制御をしようとすると、JDBCをDAOの外部で使用する必要があったり、ConnectionをDAOに渡してやるような操作が必要になったりして、カプセル化/処理の分離をうまく図ることができません。
こういった問題の解決方法の一つがJTA(Java Transaction API)を使ったトランザクション管理です。JTAを用いることによって、より簡単に、かつより高度にトランザクション管理を行うことができます。
本稿では、Tomcat5でのJTAセットアップ方法(前編)と、DAOパターンによる実際のプログラムの書き方(後編)について説明します。
2.JTA とは?
ソフトウェアを構築する際、一連の処理の塊を「不可分なもの(分離できないもの)」として扱うために、トランザクションという考え方があります。ここでいう一連の処理とは、例えば「(1)Aさんの口座から出金して、(2)Bさんの口座にその金額分を入金する」というような、複数の処理の連続を指します。
この例の2つの処理はAさんの口座からBさんの口座にお金を移すための処理ですが、(1)と(2)のどちらかが完了しただけでは全体の処理は完了となりません。あくまで2つの処理が両方とも正しく終了した場合にのみ、本来の目的を果たすことができます。
逆に、片方だけ処理が行われて、(エラーの発生や処理途中の停電などによって)もう片方は処理されないようなことになると、お金が消えてしまったり、増えたりしてしまいます。
このように、片方だけ処理が成功するという状態をなくすため、トランザクションという考え方を導入し、一連の処理を不可分なものにします。つまり、トランザクション管理を行い、一連の処理が不可分なものになっている場合、全部が成功するか、全部が失敗するか、その二つの状態しか存在しなくなります。
JTA(Java Transaction API)は、J2EE にて規定されている、トランザクションを管理するための API です。トランザクション管理の対象には、データベースだけでなく、トランザクション処理が必要な各種アプリケーションや、J2EEサーバ自体をも含むことができます。
JTAを用いてトランザクション管理を行うことによって、以下のような特徴を持つアプリケーションの開発が可能になります。
- Javaプログラムでトランザクション管理を行うことができる
- 複数のシステム/リソースにまたがるようなトランザクションを管理できる
- 特定の環境に依存しない(標準的な仕様であるJTAを使用するので)
本稿では、データベース(PostgreSQL)を対象に、JTAでトランザクション管理する具体的な方法をご紹介いたします。
コンテナにはTomcat5を使用します。
3.JTAの実装
JTA はトランザクションを扱うためにJ2EEで規定された一連のインタフェースです。
あくまでインタフェースですので、具体的な実装は各ベンダに任されています。J2EEアプリケーションサーバがJTAの実装を持つ場合もありますし、JTAの実装のみが配布されている場合もあります。
本稿ではTomcat5を対象に執筆していますが、Tomcat5はJTAの実装を持ちません。ですから、objectweb で配布されているフリーの JTA 実装であるJOTM(http://JOTM.objectweb.org/)を利用します。
※ なお、商用のアプリケーションサーバの多くは、それ自体でJTA実装を持っています。
4.Tomcat5 での JTAのセットアップ方法
前述したとおりTomcat5 はJTAの実装を持っていませんので、別途インストールする必要があります。ここでは、Tomcat5へのJTAのインストールとセットアップの方法を説明します。
なお、Tomcat5 自体のインストールは完了しているものとします。
5.JTA実装「JOTM」のダウンロード
http://forge.objectweb.org/projects/jotm/
から JOTM の最新版(執筆時の最新版は1.5.3)をダウンロードします。
ソースは必要ありませんので、JOTM-x.x.x.tgz をダウンロードしてください(x.x.xはバージョン番号)。
tar と gz 形式でアーカイブ化されていますので、それを解凍できるアプリケーション(Lhacaなど)で解凍します。
6.インストール
解凍すると、いくつかのファイルがありますが、とりあえず必要なものは lib フォルダ以下に入っているものだけです。libフォルダ以下の全てのjarファイルを、以下のいずれかの場所にコピーしてください。
- Tomcatホームディレクトリ/common/lib/
- Webアプリケーションルートディレクトリ/WEB-INF/lib/
1.にコピーした場合は、そのサーバの全てのWebアプリケーションでJTAを使用することができます。
2.にコピーした場合は、そのWebアプリケーションからのみJTAを使用することができます。
また、使用するJDBCドライバも、同じフォルダにコピーしてください。本稿では、PostgreSQLのJDBCドライバを使用するとします。
>>次のページへ
|