目次


Apache Geronimo PetStore デモの分析

確固としたエンタープライズ・アプリケーション・プラットフォームを構築する

Comments

Sun Java BluePrints プログラムの PetStore アプリケーションである JPetStore に基づいた iBATIS PetStore アプリケーションは、各種アプリケーション・サーバーで実行される多彩なデータベースをサポートします。ユーザー・インターフェース (UI) フレームワークは、Apache Struts を使用して実装されます。パーシスタンス層は、iBATIS SQL Maps フレームワークと iBATIS Data Access Objects (DAO) フレームワークを使用して構成されます。また、このアプリケーションでは永続ストアとして Derby データベースを使用します。この記事の目的に合わせ、アプリケーション・サーバーには Geronimo を使用します。図 1 は、これらのコンポーネントとフレームワークの関係を示した概念図です。

図 1. JPetStore アプリケーションのコンポーネントとフレームワーク
JPetStore アプリケーションのコンポーネントとフレームワーク
JPetStore アプリケーションのコンポーネントとフレームワーク

iBATIS PetStore アプリケーションをダウンロードしてデプロイする

  1. まず始めに、Jetty 搭載の Geronimo 1.1 リリース (リンクについては「参照文献」を参照) をダウンロードして、ファイルをディレクトリーに解凍します (このディレクトリーを {GERONIMO_HOME} と呼びます)。
  2. 次に、JPetStoreAPP4Geronimo.zip ファイルを任意のディレクトリーに解凍します (このディレクトリーを {JPETSTORE} と呼びます)。
  3. 以下の 2 つの {JPETSTORE} ファイルを {GERONIMO_HOME} ディレクトリーに移します。
    • jpetstoreAPP.war: JPetStore アプリケーションの Web アーカイブ (WAR) ファイル
    • jpetstoreAPP-geronimo-jetty.xml: Geronimo のアプリケーション・デプロイメント記述子
  4. {JPETSTORE}/setupM4.bat ファイルまたは {JPETSTORE}/setupM4.sh ファイルを参考にして、特定の Java EE Java アーカイブ (JAR) ファイル、Geronimo インストール、および Java ソフトウェア開発キット (JDK) の環境変数を初期化するためのスクリプト・ファイルを作成します。
  5. コマンド・ウィンドウまたは shell で、カスタマイズした setupM4 スクリプト・ファイルを実行した後、java -jar bin\server.jar コマンドを使用して {GERONIMO_HOME} から Geronimo サーバーを起動します。

PetStore アプリケーション用の Derby データベースをデプロイする

  1. {JPETSTORE}/JPetStoreDB4Geronimo.zip のファイルを {GERONIMO_HOME}/var/derby ディレクトリー (このディレクトリーを {Derby_System_Home} と呼びます) に解凍して、JPetStoreDB データベースをセットアップします。
  2. {GERONIMO_HOME}/repository/incubator-derby/jars ディレクトリーを作成し、このディレクトリーに derby-10.0.2.1.jar と derbytools-10.0.2.1.jar をダウンロードします。
  3. JPetstoreDBPlan.xml という名前のファイルを作成します。このファイルから、リスト 1 に示す Derby データベースを作成します。
リスト 1. JPetstoreDBPlan.xml
<?xml version="1.0" encoding="UTF-8"?>
<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/connector-1.1">
   <dep:environment
      xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.1">
      <dep:moduleId>
         <dep:groupId>console.dbpool</dep:groupId>
         <dep:artifactId>JPetstoreDerbyDataSource</dep:artifactId>
         <dep:version>1.0</dep:version>
         <dep:type>rar</dep:type>
      </dep:moduleId>
      <dep:dependencies>
         <dep:dependency>
            <dep:groupId>org.apache.derby</dep:groupId>
            <dep:artifactId>derby</dep:artifactId>
            <dep:version>10.1.1.0</dep:version>
            <dep:type>jar</dep:type>
         </dep:dependency>
      </dep:dependencies>
   </dep:environment>
   <resourceadapter>
      <outbound-resourceadapter>
         <connection-definition>
            <connectionfactory-interface>
               javax.sql.DataSource
            </connectionfactory-interface>
            <connectiondefinition-instance>
               <name>JPetstoreDerbyDataSource</name>
               <config-property-setting name="Password">
                  APPdbpw
               </config-property-setting>
               <config-property-setting name="Driver">
                  org.apache.derby.jdbc.EmbeddedDriver
               </config-property-setting>
               <config-property-setting name="UserName">
                  APP
               </config-property-setting>
               <config-property-setting name="ConnectionURL">
                  jdbc:derby:JPetstoreDB
               </config-property-setting>
               <connectionmanager>
                  <local-transaction/>
                  <single-pool>
                     <max-size>10</max-size>
                     <min-size>0</min-size>
                     <blocking-timeout-milliseconds>
                        5000
                     </blocking-timeout-milliseconds>
                     <idle-timeout-minutes>30</idle-timeout-minutes>
                     <match-one/>
                  </single-pool>
               </connectionmanager>
            </connectiondefinition-instance>
         </connection-definition>
      </outbound-resourceadapter>
   </resourceadapter>
</connector>
  1. JPetStore データ・ソースをデプロイして初期化するため、新しいコマンド・ウィンドウを開いて {GERONIMO_HOME} ディレクトリーを探索し、カスタマイズした setupM4 スクリプトを実行してから以下のコマンドを実行します。

java -jar bin/deployer.jar --user system --password manager distribute JPetstoreDBPlan.xml
repository/tranql/rars/tranql-connector-<your_version>.rar

出力は、以下のようになります。

Distributed console.dbpool/JPetstoreDB/1.0/rar

ここで参考のために、Geronimo Server Console からアクセスできる Geronino の DB Manager 画面でデプロイメントを確認してみてください。

  1. ブラウザー・ウィンドウで http://localhost:8080/console を指定して、Geronimo Server Console にログインします。
  2. Embedded DB/DB Manager ノードを選択すると、図 2 のような画面が表示されます。
図 2. Geronimo Server Console 内での JPetStoreDB のデプロイメント
JPetStoreDB のデプロイメント
JPetStoreDB のデプロイメント
  1. View Tables 列の Application リンクを選択して、JPetStoreDB データベースのアプリケーション・テーブルを表示します。JPetStoreDB データベースのテーブルとして、図 3 に示すようなテーブルが表示されます。.
図 3. JPetStoreDB のテーブル・リスト
JPetStoreDB のテーブル・リスト
JPetStoreDB のテーブル・リスト
  1. 次に、jpetstore-derby-dataload.sql ファイルのコンテンツを Geronimo Server Console 内の SQL Command/s: テキスト域にコピーし、Run SQL ボタンをクリックします。これによって、JPetStoreDB データベースにテスト・データが入力されます。
  2. Geronimo Server Console 内の Applications/J2EE Connectors ノードを選択して、console.dbpool/JPetstoreDB/1.0/rar コンポーネントの隣にある Start リンクをクリックすると、データベースが起動します。

PetStore アプリケーションの .war ファイルを再パッケージ化してデプロイする

  1. リスト 2 に示すコンテンツを持つ JPetStoreWebApp-plan.xml という Web アプリケーション・デプロイメント・プランを作成し、保管します。
リスト 2. JPetStoreWebApp-plan.xml
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-1.1">
  <dep:environment xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.1">
    <dep:moduleId>
      <dep:groupId>default</dep:groupId>
      <dep:artifactId>JPetStoreAPP</dep:artifactId>
      <dep:version>1-default</dep:version>
      <dep:type>car</dep:type>
    </dep:moduleId>
    <dep:dependencies>
      <dep:dependency>
        <dep:groupId>geronimo</dep:groupId>
        <dep:artifactId>j2ee-server</dep:artifactId>
        <dep:version>1.1</dep:version>
        <dep:type>car</dep:type>
      </dep:dependency>
      <dep:dependency>
         <dep:groupId>console.dbpool</dep:groupId>
         <dep:artifactId>JPetstoreDerbyDataSource</dep:artifactId>
        <dep:version>1.0</dep:version>
        <dep:type>rar</dep:type>
      </dep:dependency>
    </dep:dependencies>
    <dep:hidden-classes/>
    <dep:non-overridable-classes/>
  </dep:environment>
  <context-root>/jpetstoreAPP</context-root>
  <resource-ref>
    <ref-name>jdbc/JPetstoreDerbyDataSource</ref-name>
    <resource-link>JPetstoreDerbyDataSource</resource-link>
  </resource-ref>
</web-app>
  1. ここで、アプリケーションの .war ファイルを変更して Geronimo 1.1 に正常にデプロイされるようにする必要があります。
  2. jpetstoreAPP.war ファイルのコンテンツを空のディレクトリーに解凍します。
  3. WEB-INF/web-xml ファイルから <security-constraint> 要素 (およびそのコンテンツ) を除去します。
  4. <res-ref-name>jdbc/JPetStoreDB</res-ref-name> 要素を <res-ref-name>jdbc/JPetstoreDerbyDataSource</res-ref-name> 読むように書き換えます。
  5. geronimo-web.xml という名前の新規ファイルを WEB-INF ディレクトリーに追加し、このファイルにリスト 3 に示すコンテンツを入れて保管します。
リスト 3. geronimo-web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-1.1">
    <environment>
        <moduleId>
            <artifactId>jpetstoreAPP</artifactId>
        </moduleId>
        <dependencies>
            <dependency>
                <groupId>console.dbpool</groupId>
                <artifactId>JPetstoreDerbyDataSource</artifactId>
            </dependency>
        </dependencies>
    </environment>

    <context-root>/jpetstoreAPP</context-root>

    <resource-ref>
        <ref-name>jdbc/JPetstoreDerbyDataSource</ref-name>
        <resource-link>JPetstoreDerbyDataSource</resource-link>
    </resource-ref>
</web-app>
  1. WEB-INF\classes\com\ibatis\jpetstore\persistence\sqlmapdao\sql\JNDIsql-map-config.xml ファイルと WEB-INF\classes\com\ibatis\jpetstore\persistence\sqlmapdao\sql\sql-map-config.xml ファイルに含まれる dataSource 要素がリスト 4 のようになっていることを確認します。
リスト 4. config ファイルの dataSource 要素
<dataSource type="JNDI">
   <property name="DBJndiContext"
             value="java:comp/env/jdbc/JPetstoreDerbyDataSource"/>
</dataSource>
  1. 次に、.war ファイルのコンテンツを再パッケージ化するため、.war ファイルのコンテンツを解凍したディレクトリーの .zip ファイルまたは .jar ファイルを作成し、このファイルの名前を jpetstoreAPP.war に変更します。
  2. Geronimo Server Console で Applications/Deploy New リンクを選択し、JPetStore アプリケーションをデプロイして起動します。これによって、図 4 のようなページが表示されます。
図 4. Geronimo Server Console のアプリケーション・デプロイメント・ページ
Geronimo Server Console のアプリケーション・デプロイメント・ページ
Geronimo Server Console のアプリケーション・デプロイメント・ページ
  1. Archive: テキスト・ボックスの右隣にある Browse ボタンをクリックし、jpetstoreAPP.war ファイルまでナビゲートします。
  2. 次に、Plan: テキスト・ボックスの隣にある Browse ボタンをクリックし、前の手順で作成した Web アプリケーション・デプロイメント・プラン (JPetStoreWebApp-plan.xml) までナビゲートします。
  3. Start app after install チェック・ボックスにチェック・マークが付いていることを確認してから、Install ボタンをクリックします。図 5 のような完了ページが表示されます。
図 5. Geronimo Server Console のアプリケーション・デプロイメント完了ページ
Geronimo Server Console のアプリケーション・デプロイメント完了ページ
Geronimo Server Console のアプリケーション・デプロイメント完了ページ
  1. Geronimo アプリケーション・サーバーを再起動して、PetStore アプリケーションを使用できるようにします。

iBATIS PetStore アプリケーションを実行する

以下の手順に従って、iBATIS PetStore アプリケーションを実行します。

  1. ブラウザー・ウィンドウを開いて、http://localhost:8080/jpetstoreAPP/ にアクセスします。図 6 のようなページが表示されます。
図 6. iBATIS ログイン・ページ
iBATIS ログイン・ページ
iBATIS ログイン・ページ
  1. Enter the Store リンクをクリックします。これによって、図 7 のようなページが表示されます。
図 7. PetStore アプリケーションのメイン・ショッピング・ページ
メイン・ショッピング・ページ
メイン・ショッピング・ページ

新規ユーザーを登録する

ユーザーが初めてこのストアにアクセスする場合、以下の手順に従って新規ユーザーとして登録するまでは、何も購入できません。

  1. ホーム・ページで Sign In をクリックします。
  2. サインイン・ページで Register Now ボタンをクリックします。
  3. User Information、Account Information、および Profile Information セクションに入力します。
  4. Submit をクリックします。

注文する

例えばマンクス猫を購入するには、以下の手順に従います。

  1. メイン・ショッピング・ページで、Cats を選択します。
  2. Manx の項目の隣にあるリンクをクリックします。
  3. 希望の Manx の行にある Add to Cart をクリックします。
  4. Proceed to Checkout ボタンをクリックします。
  5. 次のページで Continue ボタンをクリックします。
  6. 支払明細と請求先住所が表示されているページで Submit ボタンをクリックします。
  7. 確認ページで Continue ボタンをクリックします。

購入受付ページが表示されます。これで、ショッピングを続けたり、サインアウトすることができます。

iBATIS PetStore アプリケーションを分析する

iBATIS PetStore アプリケーションは多層設計を利用してプレゼンテーション・コンポーネント、ビジネス・コンポーネント、そしてパーシスタンス・コンポーネントの疎結合と明確な分離を維持します。プレゼンテーション層は Struts フレームワーク内に構成され、org.apache.struts.action.ActionForm Bean を使用してサービスと相互作用し、サービスはパーシスタンス層と相互作用します。これらのサービスは、プレゼンテーション層がクライアントに送信するビューを作成するために使用するモデルを作成します。

iBATIS PetStore アプリケーションは、以下の上位レベルのコンポーネントで構成されています。

  • Storefront page (店頭ページ): カスタマーが注文するために使用できるブラウザー・ベースの HTTP フロントエンドを表示します。
  • Order-processing page (注文処理ページ): カスタマーの注文を処理するフォーム・ベースのインターフェースを表示します。
  • OrderService クラス: Struts プレゼンテーション層からの要求を受け取って iBATIS パーシスタンス層に要求し、注文の保管および取得を行います。

図 8 に、PetStore プレゼンテーション・フレームワークの相互関係と特徴を示します。

図 8. PetStore プレゼンテーション・フレームワークのクラス図
プレゼンテーション・フレームワークのクラス図
プレゼンテーション・フレームワークのクラス図

図 9 に、PetStore DAO フレームワークの相互関係と特徴を示します。

図 9. PetStore DAO フレームワークのクラス図
PetStore DAO フレームワークのクラス図
PetStore DAO フレームワークのクラス図

商品を仮想ショッピング・カートに追加すると、アプリケーション・フレームワークのすべての層の間で興味深い相互作用が起こります。具体的に言うと、プレゼンテーション層からの POJO (Plain Old Java Object) がビジネス・ドメイン層のサービスと相互作用し、これらのサービスがデータにアクセスして操作するためにパーシスタンス層の DAO と相互作用します。図 10 に、カートへの商品追加プロシージャー・シーケンスの流れを示します。

図 10. カートへの商品追加プロシージャー・シーケンスの流れ
カートへの商品追加プロシージャー・シーケンスの流れ
カートへの商品追加プロシージャー・シーケンスの流れ

データベースおよびパーシスタンス・フレームワーク

この iBATIS PetStore アプリケーションでは、iBATIS SQL Maps フレームワークと iBATIS DAO フレームワークを使用して、JPetStoreDB4Geronimo.zip ファイル内の完全に初期化されている Derby データベースにアクセスします。iBATIS は独自の専有クエリー言語は使わずに、SQL Maps フレームワーク内で使用される標準 SQL を利用します。

iBATIS SQL Maps フレームワークは、Java オブジェクトとリレーショナル・データベース間でデータを簡単にやり取りするための手段を提供します。SQL Maps フレームワークは単純な XML マッピング記述子を使用して、Java クラスと SQL との疎結合を維持します。一方、iBATIS DAO フレームワークは抽象化層で、共通 API を提供することによりパーシスタンス・メカニズムの詳細をアプリケーションから隠します。

Apache Derby と iBATIS の併用は、依存関係が少ない実に平凡なソリューションです。前述したように、必要となるライブラリーは、Derby を実行するためのderby-10.0.2.1.jar ファイルと derbytools-10.0.2.1.jar ファイル、そして iBATIS を実行するための ibatis-common-2.jar ファイル、ibatis-sqlmap-2.jar ファイルおよび ibatis-dao-2.jar ファイルだけです。

まとめ

iBATIS PetStore アプリケーションは、Struts、iBATIS、そして Derby の機能を利用して、拡張が容易で柔軟な Java EE プラットフォームのクロスプラットフォーム・エンタープライズ・アプリケーションを開発する方法を示してくれます。この記事で、Struts、iBATIS、Derby を Geronimo と統合し、PetStore アプリケーションを単純で実用的に変化させる方法が分かったはずです。

ここでは iBATIS PetStore application アプリケーションのアーキテクチャー概要と、使用するフレームワークそれぞれの関連を説明しました。各フレームワーク (Struts、iBATIS、Derby、および Geronimo) は、単純明快な方法でエンタープライズ・アプリケーション開発における重要な役割を果します。Geronimo フレームワークが、Struts、iBATIS、および Derby の機能を補って完全なエンタープライズ開発と管理プラットフォームを完成させるためのツールとサービス (データ・ソース・ウィザード、アプリケーション・デプロイヤー、データベース・マネージャーなど) の確固たる土台となることが理解できたことと思います。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Open source, Java technology
ArticleID=236414
ArticleTitle=Apache Geronimo PetStore デモの分析
publish-date=10032006