複数のデータベースを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 コメント:
コメントを投稿