JBoss の 4.0.1 RC1 から docs/examples/jca に db2-400-ds.xml というファイルが存在します。
内容を見てみると、以下のように JTOpen の Type4 JDBC ドライバーを使用した時の設定ファイルになっています。
もともときちんと DB2/400 用のデータ・マッピングの定義などはあったのですが、これで他のデータベースと同様に doc\example\jca にある XXX-ds.xml ファイルを server\[構成]\deploy ディレクトリにコピーしてちょっと修正するだけで使えるようになりました。
今回は、このファイルを使用して JBoss 4.0.x で DB2/400 を使用するやり方を見ていきたいと思います。
3.2.x の時の記事も参考にしてみてください。いろんなものがより DB2/400 に対してラクになっています。

db2-400-ds.xml をコピーして修正し、新しい JNDI 名のデータソースを作成したものと、デフォルトで定義されているデータソース (DefaultDS) をこの db2-400-ds.xml のコピーを使って修正したものと、二つのデータソースを使用するようにしてみました。
JBoss の設定を格納するものを含む、いわゆるデフォルトのデータソース (DefaultDS) と、新規に EJB をデプロイする時に改めて指定する新規のデータソースを分ける、ということになります。
サーバー構成は "default" を使用しました。
db2-400-ds.xml を docs\examples\jca からコピーします。
今回は新規データソース用と DefaultDS 用に二つの -ds.xml ファイルが必要になりますので、コピーしたものをさらにコピーして適当な名前に変更しておきます。

それぞれの内容を環境にあわせて編集します。
アクセスするシステム名 (ホスト名)、EJB などで対応するテーブル等が格納されるスキーマ (ライブラリー)、そしてアクセスするためのユーザープロフィール名とパスワードを指定します。
こちらが、db2-400-ds.xml をコピーして必要なところのみを修正した新規データソースの定義になります。
<?xml version="1.0" encoding="UTF-8"?>
<!-- ===================================================================== -->
<!-- -->
<!-- JBoss Server Configuration -->
<!-- -->
<!-- ===================================================================== -->
<!-- $Id: db2-400-ds.xml,v 1.1.4.2 2004/10/27 18:44:10 pilhuhn Exp $ -->
<!-- You need the jt400.jar that is delivered with IBM iSeries Access or the
OpenSource Project jtopen.
[systemname] Hostame of the iSeries
[schema] Default schema is needed so jboss could use metadat to test if the tables exists
-->
<datasources>
<local-tx-datasource>
<jndi-name>DB2-400</jndi-name>
<connection-url>jdbc:as400://as400e/JBossEJB;extended dynamic=true;package=jbpkg;package cache=true;package library=jbossEJB;errors=full</connection-url>
<driver-class>com.ibm.as400.access.AS400JDBCDriver</driver-class>
<user-name>JB4</user-name>
<password>PWD4</password>
<min-pool-size>0</min-pool-size>
<!-- sql to call when connection is created
<new-connection-sql>some arbitrary sql</new-connection-sql>
-->
<!-- sql to call on an existing pooled connection when it is obtained from pool
<check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
-->
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>DB2/400</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
|
こちらが、db2-400-ds.xml をコピーして DefaultDS 用に修正したデータソースの定義になります。
今回は DefaultDS 用のものと新規のデータソース (DB2-400) 用のものでライブラリー
(スキーマ) を異なるものにしています。
また、これを作成すると既存の Hypersonic SQL での DefaultDS の定義が競合してしまいます。
その Hypersonic SQL での DefaultDS の定義である hsqldb-ds.xml を削除するのを忘れないようにしておいてください。
<?xml version="1.0" encoding="UTF-8"?>
<!-- ===================================================================== -->
<!-- -->
<!-- JBoss Server Configuration -->
<!-- -->
<!-- ===================================================================== -->
<!-- $Id: db2-400-ds.xml,v 1.1.4.2 2004/10/27 18:44:10 pilhuhn Exp $ -->
<!-- You need the jt400.jar that is delivered with IBM iSeries Access or the
OpenSource Project jtopen.
[systemname] Hostame of the iSeries
[schema] Default schema is needed so jboss could use metadat to test if the tables exists
-->
<datasources>
<local-tx-datasource>
<jndi-name>DefaultDS</jndi-name>
<connection-url>jdbc:as400://as400e/JBoss;extended dynamic=true;package=jbpkg;package cache=true;package library=jboss;errors=full</connection-url>
<driver-class>com.ibm.as400.access.AS400JDBCDriver</driver-class>
<user-name>JB4</user-name>
<password>PWD4</password>
<min-pool-size>0</min-pool-size>
<!-- sql to call when connection is created
<new-connection-sql>some arbitrary sql</new-connection-sql>
-->
<!-- sql to call on an existing pooled connection when it is obtained from pool
<check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
-->
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>DB2/400</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
|
server\default\conf\standardjbosscmp-jdbc.xml を修正します。(3.2.x の時の記事も参考にしてみてください。ここはほぼ同じです)
datasource-mapping が "Hypersonic SQL" になっています。

これを "DB2/400" に変更します。

実は <!-- で囲まれているのはコメントの印です。
"optional" ではありますが、コメントをはずして有効にしておきましょう。

server\default\conf\standardjaws.xml も同様に修正します。
JBoss は DefaultDS と定義されたデータソースに JMS 管理用のテーブルをいくつか作成します。
その作成のための SQL 文などの定義は server\[構成]\deploy の中にあり、雛形が docs\examples\jms にあります。

雛形を docs\examples\jms から server\default\deploy にコピーします。
Hypersonic SQL 用の hsqldb-jdbc3-service.xml を db2-jdbc3-service.xml と名前を変えてコピーしています。
定義が競合してしまうので、この時点で既存の hsqldb-jdbc2-service.xml を削除しておきます。

BLOB_TYPE=OBJECT_BLOB という行があります。
とりあえず調査中なのですが BLOB_BLOB という値にしてあります。

カラムの指定で OBJECT とありますが、BLOB に変更する必要があります。

CREATE CACHED TABLE とありますが、CREATE TABLE にする必要があります。

こちらも同様に CREATE CACHED TABLE とありますが、CREATE TABLE にする必要があります。

JTOpen の jar ファイルを server\default\lib にコピーします。

DB2/400 側でデータベース・スキーマを用意しておきます。
db2-400-ds.xml で JBossEJB と指定したので JBOSSEJB というスキーマを、db2-400-default-ds.xml で JBoss と指定したので JBOSS というスキーマをそれぞれ CREATE SCHEMA 文で作成します。
また、スクリーンショットは取ってありませんが JB4 というユーザーを PWD4
というパスワードで作成しておきます。
これも上記の -ds.xml ファイルに指定してありますので、作成しておかないとエラーになります。

bin ディレクトリから run と実行すると、JBoss が起動されます。
エラーなしに「JBoss (MX MicroKernel) [4.0.3RC2 (build: CVSTag=Branch_4_0 date=200508131404)] Started in Xm:XXs:XXXms」というメッセージにたどり着いたら OK です!

iSeries 側にアクセスを行っているのが確認できます。

DefaultDS 用に指定したライブラリーである JBOSS には、こんなテーブルが作成されています。

上記の結果を確認するために使用した SQL 文はこんなかんじのものです。

|
|