- PR -

トランザクション制御について

1
投稿者投稿内容
ひで720
会議室デビュー日: 2002/12/16
投稿数: 9
投稿日時: 2003-04-16 15:25
ひで720です。初歩的な質問ですが、ご教授下さい。
トランザクション制御についてですが、複数のデータベースにまたがる
トランザクション制御を行なう場合、JTAトランザクションを利用する
と、ある本(WEB+DB vol13 技術評論社)の特集でありました。
その中で、tomcatではJTAが使用できないとありました。
JDBCによるトランザクション制御は使用しているのですが、JTAは
まったく使用したことがありません。現在、複数のデータベースに
またがるトランザクション制御を考えているですが、tomcatを
使用している為、JTAが使用できない場合は、他に方法はあるのでしょうか。
宜しくお願いします。

<環境>
Linux 7.2
apache 1.3.26
jakarta-tomcat-4.0.3
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-04-16 15:46
VBSでは begin transactionからトランザクションを始めますよね。

Javaの場合そういったのがない(?)ので

setAutoCommit(false)
で例外が発生したら、catch内でロールバックすれば
トランザクションっぽいことになるのではないでしょうか。
tommy
会議室デビュー日: 2003/03/11
投稿数: 15
投稿日時: 2003-04-17 02:15
引用:

ひで720さんの書き込み (2003-04-16 15:25) より:
トランザクション制御についてですが、複数のデータベースにまたがる
トランザクション制御を行なう場合、JTAトランザクションを利用する
と、ある本(WEB+DB vol13 技術評論社)の特集でありました。
その中で、tomcatではJTAが使用できないとありました。



Tomcat では標準で JTA が提供されない、という意味ではないかと。
実際に組み合わせて使ったことはありませんが、
JDBC Driver などと同様に jta.jar を置いてあげれば使えるようになりませんか?


引用:

ひで720さんの書き込み (2003-04-16 15:25) より:
まったく使用したことがありません。現在、複数のデータベースに
またがるトランザクション制御を考えているですが、tomcatを
使用している為、JTAが使用できない場合は、他に方法はあるのでしょうか。



たぶんお読みになっていると思いますが、当該雑誌記事では
『アプリケーションで JDBC を使い、データベースごとにトランザクションを
発行する方法でも OK だが面倒である』旨のことが書かれていますね。

もちろん、ただコーディングが面倒なだけでなく、
トランザクションが完了するポイントがアトミックでないことが
なにより怪しげではありますけれども。

# データベース障害時のリカバリがものすごーく大変そう。
ひで720
会議室デビュー日: 2002/12/16
投稿数: 9
投稿日時: 2003-04-17 12:15
ひで720です。いろいろご指導ありがとうございます。
引用:

tommyさんの書き込み (2003-04-17 02:15) より:
Tomcat では標準で JTA が提供されない、という意味ではないかと。
実際に組み合わせて使ったことはありませんが、
JDBC Driver などと同様に jta.jar を置いてあげれば使えるようになりませんか?


実際には、まだ試していないのでこれからやってみます。
Tomcat環境でJTAを使用している方がいましたら状況を教えて下さい。
zaxx_MD
大ベテラン
会議室デビュー日: 2003/04/21
投稿数: 204
お住まい・勤務地: 千葉県柏市
投稿日時: 2003-04-21 14:37
はじめまして。

JTAで定義されているのはinterfaceのみのようです。
jta.jarを入手したとしてもinterfaceクラスのみが入っているでしょう。

JTAの実装はアプリケーションサーバゆだねられ、
J2EE対応の商用サーバであれば利用できると思います。

JTAは2つ以上のリソースを同時に利用する場合にメリットが出てきます。
そうでなければ、JDBCのトランザクションで十分です。
しろう
会議室デビュー日: 2003/04/18
投稿数: 7
投稿日時: 2003-04-21 15:32
引用:

その中で、tomcatではJTAが使用できないとありました。



JTAが使えないわけではなく、実装が無いだけです。JTAはJ2EE実装なので、tomcatには含まれません。JTAはJDBCと同じくFactoryのインターフェースのみで、商用サーバとか、アプリケーションサーバのベンダーに実装が委ねられています。

引用:

JDBCによるトランザクション制御は使用しているのですが、JTAは
まったく使用したことがありません。現在、複数のデータベースに
またがるトランザクション制御を考えているですが、tomcatを
使用している為、JTAが使用できない場合は、他に方法はあるのでしょうか。



複数のデータベースというのは、コネクションが2つまたはそれ以上必要な環境だ、という意味ですよね。そうであればJTAが必要です。
もし開発はtomcatだけど、本番ではWeblogicやOASという事であれば、そちらにはJTA実装があります。が、もし本番もtomcatで、かつお金をかけたくない、と考えているのであれば、無料のj2ee実装ではJBossがありますし、JBossにもJTAがあります。こちらを使って見てはどうでしょう?

勿論、自作されるのも悪くは無いかもしれません。MicrosoftのTransactionServerのようにDB以外のトランザクションも含むと面倒ですが、DB接続の束ねたトランザクション処理なら、ある程度開発経験があればそんなに難しくない気がします。テストが面倒ですけど。
zaxx_MD
大ベテラン
会議室デビュー日: 2003/04/21
投稿数: 204
お住まい・勤務地: 千葉県柏市
投稿日時: 2003-04-21 17:26
>複数のデータベースというのは、コネクションが2つまたはそれ以上必要な環境だ、
>という意味ですよね。そうであればJTAが必要です。

接続データベースが複数だからといって、JTAが必要というのは極論すぎると感じたため、
私の投稿の中ではメリットがあるという表現にしました。

クリティカルなミッションでなければ、処理の最後にJDBCのcommit/rollbackを連続して書けばいいだけだと思います。しかしTOMCATを使っているという時点でクリティカルなミッションとはかけ離れているように感じました。

JDBCによるトランザクション制御は使用しているとのことですので、
自前でフレームワークを作るなどして処理を固定化していない限りは、
複数のデータベースという意味だけではJTAを適用するのはそれほどメリットは無いと思います。
どちらかというとJMSとJDBCとかJCAとかそういった種類の異なる接続の同時利用で威力を発揮すると思います。

JTAを利用するための設定ですとか、JTA実装の不具合やJNDI呼び出しのキャッシングとかに悩まされるよりは、
JDBCだけでトランザクション制御をしたほうが(2PCを理解していない段階では)有効だと思います。

レスされた方々はどのようなJTSを使われてきたのでしょうか。
しろう
会議室デビュー日: 2003/04/18
投稿数: 7
投稿日時: 2003-04-21 20:29
引用:

接続データベースが複数だからといって、JTAが必要というのは極論すぎると感じたため、
私の投稿の中ではメリットがあるという表現にしました。



私もそう思っているので、自作するのも悪くは無いかもしれません、と書いたのですが……。趣味でこれをやってたら、私は確実に自作しますけど(^^;

引用:

クリティカルなミッションでなければ、処理の最後にJDBCのcommit/rollbackを連続して書けばいいだけだと思います。しかしTOMCATを使っているという時点でクリティカルなミッションとはかけ離れているように感じました。
snip
JTAを利用するための設定ですとか、JTA実装の不具合やJNDI呼び出しのキャッシングとかに悩まされるよりは、
JDBCだけでトランザクション制御をしたほうが(2PCを理解していない段階では)有効だと思います。



私は今回程度の用件で、かつJTAで複雑な事をしたいのではないのであれば、別にJTAで実装でもかまわないかな? と思ったのです。バグも単体だけでなく、違うベンダーとのJDBCとの兼ね合わせによるバグも含めてよく見付かる事も分かっているつもりです。ただ、JNDIのキャッシングに悩まされる規模のプログラムを今回書いてるとは思えないのと思って発言してますが。
JBossにはこの程度の作業でもパフォーマンスが著しく悪くなったり、トランザクションがコミットされないなどの不都合があるのでしたら、申し訳御座いません。私はJBossはそれほど使い込んだ事が無いので知らないのかと思います。

自作より先にJTAを書いたのは、車輪の再発明を促す意図もないかと思って書いてみました。
私のイメージでは、今回程度の利用なら自作してテストするのも、JBossのJTAを調べるのも、大差無いと思いましたので。将来的にはJTAを勉強する事は悪くないと思うというのもありますが。

車輪の再発明が良いか悪いかとか、そういった議論をここでするつもりは無いので突っ込まないで下さい(^^;
zaxx_MDさんのように自作の方が安心できるという意見もごもっともだと思います。不具合が見付かった時にJBossがオープンソースとはいえ修正が簡単に出来るわけではないですし。また、私が正しいとも少しも思っていません。
最終的にひで720さんが思ったように受け取られ、対処されるのが宜しいかと思います。
1

スキルアップ/キャリアアップ(JOB@IT)