Geronimo に DB2/400 をデータストアに使用した EJB アプリケーションをデプロイするやり方を見ていきたいと思います。
あてずっぽと行き当たりばったりでなんとかうまくいったケースを書き残しているだけなので、間違いや不要な処理があるかもしれませんがそこはご容赦ください。(もし何かお気づきの点があればお知らせいただけると有難いです)
で、うまくいったケースを大まかに言うと
といった手順になります。
サンプルに使用した EJB アプリケーションは IBM Developerwoks の解説記事(↓)からダウンロードしました。
http://www-128.ibm.com/developerworks/java/library/j-geron2/
まず最初に JT400 の JDBC ドライバーを参照できるように、repository サブディレクトリの中に jt400\jars というディレクトリを作成して jt400.jar ファイルをコピーしておきます。

基本的に必要なのは openejb-jar.xml だけのようなので、少なくともまったく関係なさそうな openejb-jar-DERBY.xml は削除しておきました。まあ、あまり意味はなさそうですが ......

jt400.jar が存在しているディレクトリの記述と、接続先の DB2/400 の URL/ユーザー/パスワードの設定は geronimo-ra.xml ファイルの編集で行います。

ejb-jar.xml の内容です。
この EJB は CategoryBean という名前で、jdbc/basic/entityDatabase という名前でデータソースを参照しています。
<?xml version="1.0" encoding="US-ASCII"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"
version="2.1">
<description>
IBM developerWorks Geronimo CMP Entity Bean Example.
</description>
<enterprise-beans>
<entity>
<description>
Stores categories of products.
</description>
<ejb-name>CategoryBean</ejb-name>
<home>com.ibm.dw.reallybigpet.ejb.cmp.CategoryHome</home>
<remote>com.ibm.dw.reallybigpet.ejb.cmp.CategoryRemote</remote>
<ejb-class>com.ibm.dw.reallybigpet.ejb.cmp.CategoryBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.String</prim-key-class>
<reentrant>false</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>CategoryBean</abstract-schema-name>
<cmp-field><field-name>id</field-name></cmp-field>
<cmp-field><field-name>name</field-name></cmp-field>
<primkey-field>id</primkey-field>
<resource-ref>
<description>
This is a reference to a JDBC database.
</description>
<res-ref-name>jdbc/basic/entityDatabase</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<query>
<query-method>
<method-name>findByName</method-name>
<method-params>
<method-param>java.lang.String</method-param>
</method-params>
</query-method>
<ejb-ql>
<![CDATA[SELECT OBJECT(a) FROM CategoryBean AS a WHERE a.name = ?1]]>
</ejb-ql>
</query>
<query>
<query-method>
<method-name>findEmptyCollection</method-name>
<method-params/>
</query-method>
<ejb-ql>
<![CDATA[SELECT OBJECT(a) FROM CategoryBean AS a WHERE 1 = 0]]>
</ejb-ql>
</query>
<query>
<query-method>
<method-name>findAll</method-name>
<method-params/>
</query-method>
<ejb-ql>
<![CDATA[SELECT OBJECT(a) FROM CategoryBean AS a]]>
</ejb-ql>
</query>
</entity>
</enterprise-beans>
</ejb-jar>
|
openejb-jar.xml の内容です。
<enterprise-beans> に CategoryBean という EJB が jdbc/basic/entityDatabase
というリソースについて PetsDB というモジュールを PetsDBPool という名前で参照する、ということが記載されています。
また、<cmp-connection-factory> に、データソースのプールとして PetsDB
というモジュールを PetsDataSource という名前で参照する旨があわせて記載されています。
<?xml version="1.0"?>
<openejb-jar
xmlns="http://www.openejb.org/xml/ns/openejb-jar"
configId="com/ibm/dw/ReallyBigPet"
parentId="PetsDB">
<cmp-connection-factory>
<application>null</application>
<module>PetsDB</module>
<name>PetsDataSource</name>
</cmp-connection-factory>
<enterprise-beans>
<entity>
<ejb-name>CategoryBean</ejb-name>
<jndi-name>CategoryBean</jndi-name>
<table-name>petcats</table-name>
<cmp-field-mapping>
<cmp-field-name>id</cmp-field-name>
<table-column>id</table-column>
</cmp-field-mapping>
<cmp-field-mapping>
<cmp-field-name>name</cmp-field-name>
<table-column>name</table-column>
</cmp-field-mapping>
<resource-ref>
<ref-name>jdbc/basic/entityDatabase</ref-name>
<application>null</application>
<module>PetsDB</module>
<name>PetsDBPool</name>
</resource-ref>
</entity>
</enterprise-beans>
</openejb-jar>
|
geronimo-ra.xml の内容です。
Geronimo 上の ConfigID として PetsDB というデータベースへの接続が PetsDataSource
という名前、また、グローバル JNDI 名としては PetsDBPool という名前で参照され、その接続に使用される
JDBC ドライバーは repository ディレクトリの jt400/jars サブディレクトリにある
jt400.jar に存在している、ということが記載されています。
<?xml version="1.0"?>
<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/connector"
version="1.5" configId="PetsDB" parentId="org/apache/geronimo/Server">
<dependency>
<uri>jt400/jars/jt400.jar</uri>
</dependency>
<resourceadapter>
<outbound-resourceadapter>
<connection-definition>
<connectionfactory-interface>
javax.sql.DataSource
</connectionfactory-interface>
<connectiondefinition-instance>
<name>PetsDataSource</name>
<config-property-setting name="UserName">
GERONIMO
</config-property-setting>
<config-property-setting name="Password">
APACHE
</config-property-setting>
<config-property-setting name="Driver">
com.ibm.as400.access.AS400JDBCDriver
</config-property-setting>
<config-property-setting name="ConnectionURL">
jdbc:as400://localhost/GERONIMO
</config-property-setting>
<connectionmanager>
<single-pool>
<max-size>10</max-size>
<min-size>2</min-size>
<match-one/>
</single-pool>
</connectionmanager>
<global-jndi-name>PetsDBPool</global-jndi-name>
</connectiondefinition-instance>
</connection-definition>
</outbound-resourceadapter>
</resourceadapter>
</connector>
|
ant を実行し、EAR ファイルをビルドします。

ant はもちろん iSeries 上でも実行できますが、現状の Geronimo の仕様では PC 上にあるものをアップロードするような形しかできないようなので、あまり今のところ意味はないかもしれません。

デプロイに先立って geronimo を起動します。


まず最初に geronimo-ra.xml をデプロイします。
EJB アプリケーションが前提としているいくつかのリソースがあり、 openejb-jar.xml
ではそれを PetsDB というコンフィグレーションが先にデプロイされていることをチェックする指定
(parentId="PetsDB") があるためです。

geronimo-ra.xml をデプロイ中のサーバーの状況です。
jt400.jar にアクセスに行っているのがわかりますね。

デプロイが成功し、PetsDB が構成されているのがわかりますね。
この状態で EAR ファイルをデプロイします。

EAR ファイルをデプロイ中のサーバーの状況です。

今度は reallybeigpet という名前が増えているのが確認できます。

DB2/400 上に、EJB から使用するデータベースを作成します。
作成には、以下のような SQL 文をまとめたファイルが用意されていたので、それをそのまま使用します。

上記の SQL ファイルはそのまま iSeries ナビゲーターの「SQL スクリプトの実行」で読み込むことができます。
今回の構成では GERONIMO というスキーマを Geronimo からアクセスさせているので、そこにテーブルが作成されてデータが挿入されるように最初に
set schema geronimo 文を実行しています。

これでデプロイ作業は完了です。
以下の URL でアプリケーションにアクセスします。
http://(ホスト名):8080/ReallyBigPetStore/bigpetstore.jsp
こんな画面が出てきます。

ひとつ、レコード(行) を INSERT してみましょう。

ブラウザからアプリケーションをリロードすると、INSERT した "Special" というデータが反映されているのが確認できます。

|
|