Javaのデータアクセス的なものについて少しでも賢くなろうと試みるためのメモ

http://www.stackasterisk.jp/tech/java/jta01_01.jsp
JTA(Java Transaction API)は、J2EE にて規定されている、トランザクションを管理するための API です。トランザクション管理の対象には、データベースだけでなく、トランザクション処理が必要な各種アプリケーションや、J2EEサーバ自体をも含むことができます。

 
JTAを用いてトランザクション管理を行うことによって、以下のような特徴を持つアプリケーションの開発が可能になります。
* Javaプログラムでトランザクション管理を行うことができる
* 複数のシステム/リソースにまたがるようなトランザクションを管理できる
* 特定の環境に依存しない(標準的な仕様であるJTAを使用するので)


で、よくわからないんだけれどもjdk1.5の中のjavax.transaction、javax.transaction.xaパッケージには
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/javax/transaction/package-summary.html
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/javax/transaction/xa/package-summary.html
しか

ないわけなんですよ。じゃTransactionManagerやUserTransactionってインターフェイスはどこなんだって言うと、jotmだと、ダウンロードしたときに一緒についてくるjta-spec1_0_1.jarにそんなインターフェイスがあったりした。このjarの中のパッケージ構成はjdkのそれと同じで、javax.transactionとjavax.transaction.xaなんだけれどよく分からないなー。なに?
Seasar2.4だとgeronimo-jta_1.1_spec-1.0.jarだったりする????


ま、その辺僕の知識がひどいことを主たる原因として、分かんないんで置いといて、このインターフェイスの実装ってのが通常アプリケーションサーバに実装されているらしいんだけれども、Tomcatには実装されていないらしい。
TomcatにはDataSourceは実装されている。それは前回試したとおり。


で、Seasar2には独自のJTA実装があるらしいS2JTAというやつ。さらにSeasar2では設定すればアプリケーションサーバで実装されているJTAも使用することができるらしい。


SpringにはJTAの実装は用意されていないらしく、

Java・J2EE・オープンソース Spring入門 ~より良いWebアプリケーションの設計と実装

Java・J2EE・オープンソース Spring入門 ~より良いWebアプリケーションの設計と実装


この本では昨日どうもにもうまく動かなかったjotmというJTA実装を使用する方法とかも載っていた。もう試さない。Tomcat5.5では動かなかったから。僕がバカだから。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=27611&forum=12&5


SpringのトランザクションではPlatformTransactionManagerインタフェースの実装クラスでトランザクション管理ができるらしい。
これを明示的

PlatformTransactionManager.getTransaction()
PlatformTransactionManager.roolback()
PlatformTransactionManager.commit()

に行うのではなく、
宣言的に行うためにはTransactionProxyFactoryBeanでトランザクションが設定されたメソッドを持つクラスを作ってあげればいいということらしい。


ということは、Seasar2でS2JTA実装を使えば分散環境でもトランザクション管理ができて、Springは単独では分散トランザクション管理ができないということ?
アプリケーションサーバ実装のJTAを使うかしないとSpringでは分散トランザクション管理はできないということ?でもこの本にはSpringのJtaTransactionManagerはイケてない?とか書いてあるしなー。S2JTA使えばいいのかな?できるのかい?それもイケてないのかな?

JTAについて
Javaで分散環境にてトランザクションを管理するために定義されているAPIのこと。
Tomcatには実装されていない。通常はアプリケーションサーバに実装されている。jotmというオープンソースJTA実装がある。
Seasar2ではS2JTAという形でJTAの実装を提供している。SpringにはJTAの実装はない(らしい)。
DataSourceについて
Tomcatにも実装されている。TomcatのDatasource実装ではConnectionプールの機能も一応ある。
Seasar2ではS2DBCPとかそのへん的な感じか?
Springにも実装があった。
サンプルで使ったのはorg.springframework.jdbc.datasource.DriverManagerDataSourceクラスだった。
DriverManager.getConnection(url,user,pass);のかわりに、
Datasource.getConnection()でDBコネクションが獲得できるといった代物。
ConnectionPoolについて
Seasar2ではS2DBCPとかそのへん的な感じか?二回目。
Springには、なんか機能あるのかね?
Tomcat単独でもできていたみたいだけれども、
このTomcatでのコネクションプーリングはいったいどのクラスがやってるのか?
TOMCAT_HOME\common\lib\naming-factory-dbcp.jarにあるクラス?
Commons-dbcpとかはまた別のものなのかしらね?わかんない!


以上曖昧なまとめ、分かってきたら追加修正を繰り返すことを肝に銘じること。


補足:
http://ml.seasar.org/archives/seasar-user/2006-January/003089.html
http://s2container.seasar.org/2.4/ja/setup.html