- PR -

connectionがUserTransactionに結びつかない。

投稿者投稿内容
せぶん
会議室デビュー日: 2005/01/25
投稿数: 9
投稿日時: 2005-01-28 21:27
現在
http://www.stackasterisk.jp/tech/java/jta02_01.jsp
を参考に
TOMCAT5.5
JOTM
JDK1.5
eclipce3.0
lomboz plugin
で開発をしています。

JTAを使用したトランザクション管理をしたいのですが、
connectionがUserTransactionに関連付けができていないようなのです。

現象としては、
connectionのautoCommitがonの場合。
roolbackしても、DBへ値が更新されてしまう。

connectionのautoCommitがoffの場合。
userTransaction.commit()を呼び出しても更新されない。

要は、connectionそれぞれが、それぞれトランザクションを管理してるみたいで
JTAがまったく機能していない様に感じます。
JTAが働けば、connectionのautoCommit設定は関係ないと思っていたのですが、
この認識は誤っているでしょうか?

処理順序としては、
0、トランザクション取得
1、トランザクションスタート
2、データソースからコネクション取得
3、DB更新処理
4、コミット
5、コネクションクローズ
です。

getStatus()でステータスを確認したところ、
トランザクションスタート以前では、STATUS_NOTRANSACTION:6
bigin()でスタート後は、STATUS_ACTIOVE:0
commit()でコミット後は、STATUS_NOTRANSACTION:6
コミット後は、STATUS_COMMITTED:3になると思うのですが、ステータスがおかしいです。

同じ現象のが発生していたり、解決できた方いらっしゃいましたら、ヘルプお願いします。

宜しくお願いします。

[ メッセージ編集済み 編集者: せぶん 編集日時 2005-01-28 21:36 ]
pascal
常連さん
会議室デビュー日: 2004/04/29
投稿数: 29
お住まい・勤務地: 神奈川県
投稿日時: 2005-01-28 21:52
こんにちは。

JTAの仕様では、

0、トランザクション取得
1、トランザクションスタート
2、データソースからコネクション取得
3、DB更新処理
4、コネクションクローズ
5、コミット


だと思います。
試してみては如何でしょうか。


せぶん
会議室デビュー日: 2005/01/25
投稿数: 9
投稿日時: 2005-01-28 22:23
pascalさん
レスありがとうございます。

コネクションクローズのタイミングを変更して見ましたが、
現象は変わりませんでした。

ちなみに、rollbackしてもステータスがSTATUS_NOTRANSACTION:6
です。STATUS_ROLLEDBACK:4になりそうなものなのですが。。。

DBUtilsを使用しているのですが、これが悪さしていたりするのでしょうか?
せぶん
会議室デビュー日: 2005/01/25
投稿数: 9
投稿日時: 2005-01-31 00:12
JTAでトランザクション境界設定をするつもりならば、javax.sql.XADataSourceとjavax.sql.XAConnection、それにjavax.sql.XAResourceインターフェースを実装した JDBCドライバーが必要です。

と言った文面を見つけました。現在MSSQLを使用しているのですが、
Microsoftのドライバーが上記の条件を満たしていないと言うことはあるのでしょうか?

http://www.microsoft.com/downloads/details.aspx?FamilyID=9f1874b6-f8e1-4bd6-947c-0fc5bf05bf71&DisplayLang=ja

ここから落としたDriverを使用しています。
pascal
常連さん
会議室デビュー日: 2004/04/29
投稿数: 29
お住まい・勤務地: 神奈川県
投稿日時: 2005-01-31 01:06
こんにちは。

可能性はありますね。
ドライバーをダウンロードしたページに、mssqlserverJPN.tarというのがありますね。
それを展開すると、中にmsjdbc.tarというファイルがあって、それを展開すると、
books\Msjdbcrefというディレクトリが出来ます。
その中のPDFに、Installing Stored Procedures for JTAという章があります。
詳しく読んでいませんが、これがあるということは、デフォルトではサポートしない
ってことではないでしょうか。

MSSQLServerはあまり詳しくないので、良くわかりませんが。

Weblogicのページですが、こんなのもあります。
http://edocs.beasys.co.jp/e-docs/wls/docs81/jdbc_drivers/mssqlserver.html#1056938



[ メッセージ編集済み 編集者: pascal 編集日時 2005-01-31 01:10 ]

[ メッセージ編集済み 編集者: pascal 編集日時 2005-01-31 01:14 ]
せぶん
会議室デビュー日: 2005/01/25
投稿数: 9
投稿日時: 2005-02-02 12:07
こんにちは。

ちょっと開発スケジュールが詰まっていて、
調査に避ける時間があまりなく、ちょっとテンパってます。
ドライバーの調査はまだしていないのですが、
なんとなく、JBOSSでアプリを起動してみたところ。
UserTransactionはコミット、ロールバックは正常に動作しました。
ただ、UserTransactionのstatus()を確認したところ、値は怪しい気がします。
tomcatで動作している時と、変わりありませんでした。
テンパってるところでの作業でしたので、後ほど再確認します。
JBOSSで動作すると言う事であれば、ドライバーは一応動作しているのかと思いました。

以上、現状報告です。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-02-02 12:39
今日たまたまMSSQLのJDBCドライバのSP3をインストールしてみたのですが、
インストールディレクトリにSQLServer JTAというディレクトリがありました。
中にはDLLと拡張ストアドのインストール用SQLファイルが入っています。
これはインストールされましたか?
せぶん
会議室デビュー日: 2005/01/25
投稿数: 9
投稿日時: 2005-02-03 22:35
レスありがとうございます。
フォルダありました。注意不足でした。

OSQL -U sa -P sa_password -S server_name -i location\instjdbc.sql
このような感じでインストールですよね?

ですが、うまくインストールできません。
コマンドを打っても反応がありません。
上記のコマンドで何か間違っているでしょうか?

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