Tomcat で JTA を使用する
Tomcat では、 JTA の実装がありません。そこで、別途 JTA の実装をインストールする必要があります。
ここでは、オープンソースの JOTM を利用して JTA を利用可能とする手順を纏めます。
JTA のメリットとしては、以下のような物が挙げられます。
- プログラムでトランザクション管理を簡単に行うことができる
- 複数のシステム/リソースにまたがるようなトランザクションを管理できる
- 特定の環境に依存しない
※バージョンは Tomcat 5.5.9,JOTM 2.0.8 です。
インストール
こちらより最新版をダウンロードします。ダウンロードしたファイルを解凍し、lib フォルダに入っている jar を全て、
CATALINA_HOME/common/lib
にコピーします。また、使用する DB の JDBC Driver を同じフォルダにコピーします。
server.xml の設定
server.xml の GlobalNamingResources タグ内に、
上記2つに関するリソースを設定します。
※ここでは Oracle9.2.0 を例に記載します。
server.xml 設定例
・
・
・
<GlobalNamingResources>
<Environment name="simpleValue" type="java.lang.Integer" value="30"/>
<Resource name="jdbc/oracle"
auth="Container"
type="javax.sql.DataSource"
factory="org.objectweb.jndi.DataSourceFactory"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:test"
username="test"
password="test-password"
/>
<Resource auth="Container"
description=""
name="UserTransaction"
type="javax.transaction.UserTransaction"
factory="org.objectweb.jotm.UserTransactionFactory"
jotm.timeout="60"/>
</GlobalNamingResources>
・
・
・
<Context path="/test" docBase="test.war">
<ResourceLink global="jdbc/oracle" name="jdbc/oracle" type="javax.sql.DataSource"/>
<ResourceLink global="UserTransaction" name="UserTransaction"/>
</Context>
・
・
・
設定は以上です。
コーディング
Context ctx;
DataSource ds = null;
UserTransaction utx = null;
try {
ctx = new InitialContext();
ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
utx = (UserTransaction)ctx.lookup("java:comp/UserTransaction");
} catch (NamingException e) {
throw e;
}
Connection conn = null;
try {
utx.begin();
conn = ds.getConnection();
Statement stmt = conn.createStatement();
stmt.executeUpdate("insert into hoge values (1, 'HOGE')");
stmt.executeUpdate("insert into hoge values (2, 'HUGA')");
utx.commit();
} catch (Exception e) {
utx.rollback();
throw e;
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
}
}
}
|