複数のデータベースをTomcatで管理したくて、色々調べてみました。
そもそもTomcatはJTAを実装していません。
なので、実装するにはJTAのライブラリを別途インストールすることになります。
調べた結果JOTMというオープンソースのライブラリを使うことにより、実装できる事がわかりました。
前提条件
- JOTM 2.1.9
- Tomcat 7
- Java 1.7.XX
- Windows XP 32bit
- Oracle10gR2
- MySQL 5.5
JOTMインストール手順
こちらの【u6kの日記】さんのサイトを参考に、設定しました。Tomcatのダウンロード
Apache Tomcatをダウンロードし、インストールします。JOTMのダウンロード
JOTMをダウンロードし、展開したらlibフォルダの中身を全て${TOMCAT_HOME}\libフォルダに入れます。Server.xmlの修正
以下のようにServer.xmlもしくはcontext.xmlを変更します。<Resource name="jdbc/JNDI" auth="Container" type="javax.sql.DataSource"
factory="org.objectweb.jotm.datasource.DataSourceFactory"
maxActive="5" maxIdle="30" maxWait="10000"
username="hoge" password="hoge"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/hoge"/>
<Resource name="UserTransaction"
auth="Container"
type="javax.transaction.UserTransaction" />
<Transaction factory="org.objectweb.jotm.UserTransactionFactory"
jotm.timeout="60" />
実行結果
確かにJTAの2相コミットのロールバック・コミットは出来ました・・・・が、
jmeterで負荷テスト(1秒間に100回コネクションを取得)を実施したところ、コネクション取得エラーが多発しました。
どうやら同タイミングでコネクションを取得しに行くと、エラーが発生するらしいです。
エラーが発生したら再度取得するような変更をしてみたのですが、あまり美しくないので結局JOTMを使うのを辞め、JBossに変更しました。JOTMの開発も止まっているみたいですしね・・・
そうしたら同様のテストをしても正しく取得でき2層コミットも正常に実行出来ました。
原因は、Tomcatのバージョンだったのか、JOTMのバグだったのか、Java 1.7を使ったせいなのか分かりませんが、JOTMのサポートも止まっているようなので、今後の事を考えるならば素直にJTAを正式に実装している JavaEEを実装したアプリケーションサーバを使うほうが無難かもしれません。
JBossはTomcatベースで作られているので移行は簡単です。


0 コメント:
コメントを投稿