Geronimo で EJB アプリケーション (OS/400)

Geronimo に DB2/400 をデータストアに使用した EJB アプリケーションをデプロイするやり方を見ていきたいと思います。

あてずっぽと行き当たりばったりでなんとかうまくいったケースを書き残しているだけなので、間違いや不要な処理があるかもしれませんがそこはご容赦ください。(もし何かお気づきの点があればお知らせいただけると有難いです)

で、うまくいったケースを大まかに言うと

といった手順になります。

サンプルに使用した EJB アプリケーションは IBM Developerwoks の解説記事(↓)からダウンロードしました。

http://www-128.ibm.com/developerworks/java/library/j-geron2/

JDBC ドライバーの導入・設定

まず最初に JT400 の JDBC ドライバーを参照できるように、repository サブディレクトリの中に jt400\jars というディレクトリを作成して jt400.jar ファイルをコピーしておきます。

デプロイメント・ディスクリプター

openejb-jar-DERBY.xml の削除

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

データベース接続の設定

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

EJB 記述ファイルの内容

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>

EJB アプリケーションのビルド

ant を実行し、EAR ファイルをビルドします。

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

データベース接続と EJB アプリケーションのデプロイ

geronimo の起動

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

geronimo-ra.xml のデプロイ

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

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

デプロイが成功し、PetsDB が構成されているのがわかりますね。

EJB アプリケーションのデプロイ

この状態で EAR ファイルをデプロイします。

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

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

データベースの準備

DB2/400 上に、EJB から使用するデータベースを作成します。

作成には、以下のような SQL 文をまとめたファイルが用意されていたので、それをそのまま使用します。

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

これでデプロイ作業は完了です。

稼動の確認

以下の URL でアプリケーションにアクセスします。

http://(ホスト名):8080/ReallyBigPetStore/bigpetstore.jsp

こんな画面が出てきます。

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

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

[Top Pageに戻る]

[PR] | ハウスクリーニング葬儀 東京韓国食材転職サイトSEOアクセス解析ハウスメーカーレンタルオフィスSEO対策消費者金融不動産担保ローン時計車 買取ハワイ挙式アスクル転職生命保険テンプレート沖縄旅行動画免許合宿二輪引越し消費者金融税理士ゴルフ会員権留学レーシックマッサージFX投資信託くりっく365アフィリエイト育毛剤FXホームページ制作デイトレードFXホノルルマラソンベスト ハワイ ホテル レーツバリ島ハワイウエディングHawaii hotelsHawaii Activitiesbhhr
【運営会社「パラダイムシフト」サービス】 ハワイ現地オプショナルツアーリラックマ.ビジネスクラス ハワイ) - ビジネスクラス航空券 - 格安航空券(1) - 格安航空券(2) - 海外ホテル - 韓国旅行
無料ホームページ作成 - レンタルサーバー - 携帯ホームページ - ブログ - ホテル 予約 - タイムシェア - ヴィラ - ハワイ コンドミニアム - バリ島 ホテル - ハワイ 不動産 - プーケット ホテル
[PR] 美容整形外科を選ぶならこちらから。まずは比較してみましょう