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 
		 
	 

web.xml の設定

 
	Postgres DataSource 
	jdbc/postgres 
	javax.sql.DataSource 
 

UserTransaction の取得方法

    Object obj = lookup("java:comp/UserTransaction");
    UserTransaction tx = (UserTransaction) narrow(obj, UserTransaction.class);

DataSource の取得方法

    Object obj = lookup("java:comp/env/jdbc/DB1");
    DataSource ds = (DataSource) narrow(obj, DataSource.class);
    Connection conn = ds.getConnection();

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)の導入

バージョン

v1.0.2
(wtp-all-in-one-sdk-R-1.0.2-200604280245-win32)

メモ

デフォルトでは、テストサーバにGeronimoは含まれない。
追加するには、「Servers」ビューから、右クリックで「New」→「Server」を
選択し、「Don't see your server listed? Click here」リンクを
押すとGeronimoが選択できるので選択して「Finish」。


eclipseをJDK5.0で起動するとGeronimoにデプロイできない。。
JDK1.4.2_07で起動したらいけました。

Geronimoの導入

ダウンロード元

Apache Geronimo : Index

バージョン

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