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