JOTMに触る
JOTM(Java Open Transaction Manager)は、ObjectWebで開発されているJTAのオープン実装です。
JOTMを使用することで、TomcatのようなJTAをサポートしないサーバでJTAによるトランザクション制御を行うことができます。
JTAを使った場合のメリット
・複数のリソースにまたがるトランザクションを制御可能。
・Javaの標準的な仕様である為、環境に依存しないトランザクション制御が可能。
| 実行環境 | Version |
|---|---|
| jdk | 1.5.0_01 |
| jotm | 2.0.10 |
| carol | 2.0.5 |
| postgresql | 8.0 |
Jarのインストール
jotm-2.0.10を展開し、jarファイルを $TOMCAT_HOME/commons/lib へ配置する。
但し、ow_carol.jar はjotmに含まれるものでは正常に動作しない為、carol-2.0.5 へ
含まれるJarを使う。
使用するDBのJDBCのJarも併せて配置する。
- commons-cli-1.0.jar
- commons-logging.jar
- connector-1_5.jar
- howl.jar
- jotm.jar
- jotm_iiop_stubs.jar
- jotm_jrmp_stubs.jar
- jta-spec1_0_1.jar
- jts1_0.jar
- log4j.jar
- objectweb-datasource.jar
- ow_carol.jar
- xapool.jar
- postgresql-8.0.309.jdbc3.jar
carolプロパティファイルの作成
carol.properties ファイルを作成し、$TOMCAT_HOME/commons/classes へ配置する。
carol.rmi.activated = lmi carol.jndi.start = false carol.ns.start = false
コンテキストファイルの作成
以下のようにコンテキストファイルを作成し、$TOMCAT_HOME/conf/Catalina/localhost
へ配置する。
factory org.objectweb.jndi.DataSourceFactory username griffin password griffin driverClassName org.postgresql.Driver url jdbc:postgresql://127.0.0.1:5432/DB1 factory org.objectweb.jndi.DataSourceFactory username griffin password griffin driverClassName org.postgresql.Driver url jdbc:postgresql://127.0.0.1:5432/DB2 factory org.objectweb.jotm.UserTransactionFactory jotm.timeout 60
UserTransaction の取得方法
Object obj = lookup("java:comp/UserTransaction");
UserTransaction tx = (UserTransaction) narrow(obj, UserTransaction.class);
XMLHttpRequestオブジェクト
XMLHttpRequestオブジェクトって?
大半のWebブラウザでサポートされている、バックエンドで動作するHTTPクライアントなオブジェクト。
名前にXMLとあるが、別にテキストも扱える。
ブラウザごとに実装が異なる為、ブラウザ間で同じ振る舞いをするとは限らない。
XMLHttpRequestオブジェクトの生成
XMLHttpRequestをサポートしているブラウザの場合、以下のようなコードで生成できる。
var req=null; if (window.XMLHttpRequest) { req = new XMLHttpRequest();// Mozila/Safari } else if (window.ActiveXObject) { req = new ActiveXObject("Microsoft.XMLHTTP");// IE }
リクエストの送信
sendメソッドの引数は、HTTPリクエストのエンティティボディとしてサーバに送信される。
渡すことができるパラメータは、文字列やDOMDocument。
if (req) {
req.open("GET", url, true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.send("goo=hoge&boo=poo");
}
コールバック関数によるリクエストのモニタ
送信はできたが、受信は?ということで呼び出し処理終了後のエントリポイントとなるコールバック関数を定義する。
processReqChange関数を作成し、XMLHttpRequestオブジェクトのonreadystatechangeへ
設定すると、通信の状態が変化するたびにprocessReqChange関数がコールバックされる。
最終的に受信が完了すると、XMLHttpRequestオブジェクトのreadyStateで4が返却される。
完了までのreadyStateの詳細は、ブラウザごとに異なる。
var req=null;
var READY_STATE_UNINITIALIZED=0; // 0:openが呼ばれてない
var READY_STATE_LOADING=1; // 1:sendが呼ばれてない
var READY_STATE_LOADED=2; // 2:responseがまだ
var READY_STATE_INTERACTIVE=3; // 3:部分的に応答着たよ
var READY_STATE_COMPLETE=4; // 4:完了
function loadXMLDoc(url) {
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if (req) {
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send(null);
}
}
function processReqChange(){
var ready=req.readyState;
var data=null;
if (ready==READY_STATE_COMPLETE){
data=req.responseText;
data="loading...["+ready+"]" + data;
}else{
data="loading...["+ready+"]";
}
alert(data);
}
Tracの日本語化
# mv /usr/share/trac/templates /usr/share/trac/templates.org # mv /usr/share/trac/wiki-default /usr/share/trac/wiki-default.org # wget http://www.i-act.co.jp/project/products/downloads/trac-0.9.5-ja-1.zip # unzip trac-0.9.5-ja-1.zip # cd trac-0.9.5-ja-1 # cp -r templates /usr/share/trac/ # cp -r wiki-default /usr/share/trac/ # /etc/init.d/httpd restart
■
よさげなリンクのメモ
WTP(Web Tools Platform)の導入
Geronimoの導入
ダウンロード元
バージョン
v1.0
メモ
Geronimo v1.0は正式にJDK5.0をサポートしていない。
理由は、Geronimo内で利用されている「OpenEJB」が、SunのJDK1.4固有の
ORBを使用している為である。(これがJDK5.0に組み込まれていない。)
その為、JDK5.0でEJBを実行するとエラーが発生する。
特にEJBを使用しないのであれば問題ないが、Geronimoに含まれている
「DayTrader」というアプリケーションがEJBを使用している為、
これをアンデプロイしてやる必要がある。
アンデプロイの仕方
java -jar deployer.jar --user system --password manager stop \ geronimo/daytrader-derby-tomcat/1.0/car
