PR

×

キーワードサーチ

▼キーワード検索

プロフィール

すぎっち28

すぎっち28

コメント新着

すぎっち28 @ Re[2]:こんにちは♪(05/11) снΙноさん >やっぱりそうですよねえ・・…
снΙно @ Re[1]:こんにちは♪(05/11) 解決してよかったです♪ 綺麗に書くのって…
すぎっち28 @ Re:こんにちは♪(05/11) снΙноさん >あ、アドバイスありがとうご…
снΙно @ こんにちは♪ グラフやった事ある! 私がやったやり方…
育児・子育て きらり @ Re:さて、これからが問題だ(10/20) こんにちわ お邪魔しました。。 …
2009年06月14日
XML
カテゴリ: カテゴリ未分類
#*******************************************************************#
# Tomcat5.5におけるJTA環境設定マニュアル #
#*******************************************************************#

恐ろしく苦労したTomcat5.5でのJTAの設定についての説明です。血と汗と涙の結晶です。

[0] ファイル構成

commonフォルダ → CATALINA_HOME/common/と同じ内容です。
JtaDaoMakingフォルダ → JTAサンプル用のeclipseプロジェクトです。
JtaDaoMaking.xmlファイル → CATALINA_HOME/conf/Catalina/localhost/に置かれたコンテキストファイルです。
Readme.txt → こいつ自身です。




http://jotm.objectweb.org/からJOTMライブラリをダウンロードしてください。
私が使ったバージョンはjotm-2.0.13.tar.gzです。最新版だと動かない可能性があります。

これを解凍(*1)して、libフォルダの中身をチェックしてください。基本的にlibフォルダの中身のjarはすべて使用していいのですが、carol-2.0.5.jarというjarファイルは使用しないでください。理由はわかりませんが、正常に動作しません。

代わりにhttp://carol.ow2.org/から、carol-2.0.5.tar.gzをダウンロードして解凍(*1)し、そのlibフォルダの中にあるow_carol-all.jarを使用してください。

log4j.jarというjarファイルも注意してください。プロジェクト内でlog4j.propertiesの設定をきちんと行っていないとエラーになってtomcatが起動できない場合があります。不安な場合はとりあえずlog4j.jarは使用しないようにしましょう。

JDBCドライバが手元になければ、それもダウンロードしましょう。今回はMySQLを使用しているのでhttp://dev.mysql.com/downloads/connector/j/5.0.htmlから、バージョンに合わせてダウンロードしてください。もちろん、Oracleなど別のものは該当サイトからお願いします。

上記注意事項に従い、以下のように各種jarファイルをCATALINA_HOME/common/lib直下に配置しましょう。



JOTM |
・ commons-cli-1.0.jar |
・ connector-1_5.jar |

・ jotm.jar |
・ jotm_jrmp_stubs.jar |
・ jta-spec1_0_1.jar |
・ jts1_0.jar |
・ objectweb-datasource.jar |

Carol |
・ ow_carol-all.jar |
JDBC ドライバ |
・ mysql-connector-java-5.0.8-bin.jar |



また、先ほどのcarol-2.0.5.tar.gzを解凍したフォルダのconfigフォルダ内にあるcarol.propertiesをCATALINA_HOME/common/classes直下に配置しましょう。中身を編集する必要はありません。

これでJOTMの準備は完了です。


[2] server.xmlの設定

--前置き--
私はserver.xmlを直接使わずに、CATALINA_HOME/conf/Catalina/localhost/[プロジェクト名].xmlのコンテキストファイルを使用しています。もちろんserver.xmlやMETA-INF/context.xmlでも大丈夫です。以下、server.xmlと書かれた箇所は自分の環境で使っているxmlファイルに当てはめて考えてください。

【server.xmlの設定例】

workDir="C:\eclipse\workspace\JtaDaoMaking\work" >


factory="org.objectweb.jndi.DataSourceFactory"
driverClassName="com.mysql.jdbc.Driver"
maxActive="20" maxIdle="10" maxWait="-1"
password="admin" type="javax.sql.DataSource"
url="jdbc:mysql://localhost:3306/healthDB?autoReconnect=true"
username="root"/>


name="UserTransaction"
type="javax.transaction.UserTransaction"
factory="org.objectweb.jotm.UserTransactionFactory"
jotm.timeout="60"/>



(ポイント1)
Contextタグの設定やとコメントが書かれたResourceタグの細かい設定は
http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.htmlなどを参考にしてください。

この中でJTAを設定する上で重要なのは

factory="org.objectweb.jndi.DataSourceFactory"

と言う要素です。これを忘れるとtomcatが起動できません。

(ポイント2)
とコメントが書かれたResourceタグはこのまま記述してもらえれば大丈夫です。

[3] web.xmlの設定

タグ内の一番下あたりに、以下のように書いてください。


jdbc/sugichi
javax.sql.DataSource
Container
Shareable


res-ref-name要素は、server.xmlのResourceタグ要素の name="jdbc/sugichi" と一致させましょう。

[4] ソースコード

簡単なサンプルコードを示します。

http://www.stackasterisk.jp/tech/java/jta01_02.jsp【連載 】JTAを使ったトランザクション管理

で紹介されているコードを少し修正したものです。サーブレットの設定などは自分で行ってください。



package controller;

import java.io.IOException;
import java.sql.Statement;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import javax.transaction.UserTransaction;

/**
* JTA接続テスト用
*
*
*/
public class JtaTestController extends HttpServlet {

private static final long serialVersionUID = 1L;

public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
UserTransaction ut = null;
try{
// JNDI InitialContext の獲得
Context ctx = new InitialContext();
// データベース接続データソースの獲得
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/sugichi");

// ************************************************************************ //
// * lookupメソッドの引数に注意してください。 * //
// * 多くのサイトではjava:comp/UserTransactionと書かれていますが、 * //
// * 少なくともTomcat5.5の場合はjava:comp/env/UserTransactionと言う風に * //
// * envを入れないと動きません。 * //
// ************************************************************************ //
ut = (UserTransaction) PortableRemoteObject.narrow(ctx.lookup(
"java:comp/env/UserTransaction"), UserTransaction.class);

// データベース接続の取得
java.sql.Connection con = ds.getConnection();

// トランザクションの開始。この後の処理が、一連の不可分な処理になる。
ut.begin();

// JDBC を使った SQL の実行
Statement stmt = con.createStatement();

String sql = null;

// INSERT の実行(1)
sql = "insert into TEST (id, name) values (11, '渋谷')";
stmt.executeUpdate(sql);

// *****************************************************************************
// このあたりで意図的に例外などを発生させて、直前のINSERT処理がcommitされないか
// 確認してみましょう
// *****************************************************************************

// INSERT の実行(2)
sql = "insert into TEST (id, name) values (22, '六本木')";
stmt.executeUpdate(sql);

// トランザクションの終了(コミット)。ここまでの一連の処理を確定させる。
ut.commit();

// トランザクションのキャンセル(ロールバック)。ここまでの一連の処理を全てキャンセルする。
// ut.rollback(); // ★★★

// データベース接続を閉じる(コネクションプールに返す)
// con.close();
}catch(Exception e){
try{
ut.rollback();
}catch(Exception ne){

}
e.printStackTrace();
}

}

}

[4] まとめ

これで終わりです。どのサイトを見ても、100%正解というのがなくて、本当に苦労しましたが、何とかTomcat5.5での設定ができました。設定さえできればJTAはきっと強力なサポートを行ってくれるでしょう!!

[5] 参考文献

http://bw28.blog5.fc2.com/blog-entry-229.html(このサイトが本当にためになりました。感謝感謝です。)
http://www.stackasterisk.jp/tech/java/jta01_01.jsp(【連載 】JTAを使ったトランザクション管理)
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=27611&forum=12&5(@IT掲示板)






注釈
*1
上記圧縮ファイルをダウンロードすると、jotm-2.0.13.gzと言う拡張子に変わっていた場合は、
自分でファイル名をjotm-2.0.13.tar.gzに書き直して保存しなおしてから解凍してください。そうしないと何も解凍されません。なんでこんなに純真なユーザをだましたがるのかわかりませんが、とりあえずこういうことが普通にあるのがネットの世界のようです。

*2
eclipseなどを使っていると、プロジェクト内のlibフォルダに入れてもいいのではと考えると思います。実際自分も考えました。しかし、試したところこれらのjarはきちんとCATALINA_HOMEのcommon/lib直下に置かないと動かないようです。もしかしたら、naming関連のjarを一緒にすればeclipse内に置けば大丈夫かもしれませんが、試していません。





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2009年09月30日 00時12分14秒
コメント(0) | コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: