Home > Documentation > 9. サンプル・アプリケーション > 9.5. EJB サンプル・アプリケーション |
EJBはJ2EE仕様の重要な技術の一つです。 J2EE 1.5 認証サーバーとしてApache Geronimo はEJBコンテナーであるOpenEJBを利用し、幅広くEJB をサポートします。 通常の(非EJBの)Javaオブジェクトでビジネスロジックを実装する事も可能ですがEJBを利用すると、そこで発生する課題(スケーラビリティ、ライフサイクル管理、状態管理 etc)EJBが対応してくれます。 本稿では、簡単なデータベース・アプリケーションを拡張して、クライアントのアプリケーションがEJBをローカル参照とリモート参照の両方で利用する方法を紹介します。 当該アプリケーションは、Apache Derbyを利用します。 この記事を通じて、エンタープライズアプリケーションの開発作業を簡単にする方法を学ぶ事ができます。
バンキング・アプリケーションは、2種類のクライアント "バンキング リモート" と"バンキングWeb"から利用されます。これらのクライアントは、それぞれEJBのリモート参照とローカル参照のデモです。 両方とも、セッション・ビーンとエンティティ・ビーンにより実装された、共通のビジネス・レイヤーを参照します。 ステートレス・セッション・ビーンは、アプリケーション・クライアントとビジネス・エンティティを接続するビジネスサービス・インターフェースとなります。 アプリケーション層の全てのビジネス・インタフェースは、エンティティー・ビーンとして実装されています。
本稿を読んだ後、EJBの定義、EJBと異なる参照方法との関連を管理する方法を学事ができ、GeronimoのEJB機能を最大限に利用する事ができるようになります。
本章は、以下のセクションから構成されています。
EJBの実装はベンダー毎に異なっているかも知れません。下記のリストが、J2EE コンテナーとしてのApache Geornimoの機能です。
バンキング・アプリケーションについて簡単に説明すると、2種類のクライアン・アプリケーショントがあり、それぞれのアプリケーションの概要は以下の通りです。
各クライアントは、共通のビジネス・サービス層を利用します。 ビジネス・サービス層の背後には、バンキング・アプリケーションで使われる3つの共通ビジネスエンティティ(Account, Customer, ExchangeRate)が有ります。 顧客は一つ以上の口座を持ち、口座は一人の顧客によって所有されます。 ExchangeRate は、銀行によって決められる対USドルの為替レートを表現します。
バンキング・アプリケーションには以下のパッケージとクラスが有ります。
最終的に、バンキング・アプリケーションはEARファイルとして、アプリケーション・サーバーにデプロイされます。 EARファイルの内容は、下記の通りです。
最初に、アプリケーションのビジネス・サービス層がEJBを利用してどの様に実装されているか、見てみましょう
openejb-jar.xml の定義は、Geronimo 独自のEJB機能と一致します。 アプリケーションと共にデータベース・プールをデプロイするので、既存のデータベース・プールへの依存関係は不要です。
persistence.xmlは、永続化の定義で、BankPool経由でBankDBに接続するためにEntityMangerFactoryによって使われます。 <persistent-unit>の名前が、EJBのアノテーションによって参照されます。 SynchronizeMappings属性の構成により、データベースに保存されている既存のデータを更新しない様に指定する事ができます。 これはデータを削除したくない場合には、重要な指定です。 jta-data-source と non-jta-data-source には同じ値を指定する必要が有ります。
web.xml には、特別な指定は何も要りません。 web-apにサーブレットの定義と、各サーブレットのマッピングが有るだけです。
geronimo-web.xml は、is Geronimo 独自のデプロメイント・プランです。 通常、モジュール情報とコンテキスト・ルートを指定します。 これで、このアプリケーションを表示するためにURLは、http://localhost:8080/Bank になります。
BankPool.xml には、データベースの接続情報を記述します。 今回は、Geronimoにビルトインされている、Derbyデータベースを利用します。 依存関係には、org.apache.geronimo.configs/system-database//carを指定する必要が有ります。 私の場合、これを違う物にしてしまい障害が発生しました。 下記のデータベース接続プールのプランは、管理コンソールにより生成されたものです。 私が実施した変更は、依存関係を 稼働中のDerbyエンジンであるsystem-databaseにした事だけです。 このデータベース・プールの情報は、EARアプリケーションの一部としてデプロイされます。
geronimo-application.xml には、データベースプールがあるアプリケーションがあり、これもデプロイする必要がある。データベースプールはBankPool.xmlに定義され、デプロイをするために必要なドライバーはtranql-connector-ra-1.3.rar ファイルです。これら2つのファイルはEARファイルのトップレベルに配置します。
今回のデモのサンプル・データベースは、Geronimo内蔵のDerbyデータベースを利用します。サンプル・データベースの名前は、BankDBで、CUSTOMER, ACCOUNT, EXCHANGE_RATEという3テーブルから構成されます。各テーブルの定義は以下の通りです。
Table Name | Fields |
---|---|
CUSTOMER | customerId (PRIMARY KEY) |
ACCOUNT | accountNumber (PRIMARY KEY) |
EXCHANGERATE | rateId (PRIMARY KEY) |
CUSTOMERテーブルは、顧客の情報を保存します。IDと名前を管理するだけのテーブルです。ACCOUNT テーブルは、ユニークな口座番号が主キーです。口座の種類と残高を管理します。AccountテーブルのcustomerIdは、Customerテーブルへの外部キー で、口座の所有者の情報を保持します。EXCHANGERATE テーブルは rateId が主キーです。EXCHANGERATEの各レコードは、 通過名と支払い時に利用される為替レートを保持します。
バンキング・アプリケーションのビルドとデプロイで利用されるツールは、
Apache DBサブプロジェクトのApache DerbyはJavaで実装されたリレーショナル・データベースです。フットプリントが非常に小さいので、Javaベースのあらゆるソリューションに容易に埋め込めます。更にこのような埋め込み型のフレームワークだけではなく、Derby Network Serverを使えば、一般的なクライアント-サーバー型のフレームワークをサポートできます。
http://db.apache.org/derby/index.html
MavenはエンタープライズJavaプロジェクト向けに広く使われているオープンソースのビルド・ツールで、ビルド作業に伴う大変な仕事を肩代わりしてくれます。MavenはAntやmakeのようなタスク・べースのアプローチではなく、プロジェクトの構造やコンテンツを記述するという宣言的アプローチを採用しています。これにより全社的な開発標準の遵守が容易になり、ビルド・スクリプトの開発と保守の時間を削減できます。Maven1は宣言的でライフサイクル・ベースのアプローチを採用したことで従来のトラディショナルなビルド・テクニックから劇的に飛躍しました。Maven2では、この点が更に推し進められています。Maven2は以下のURLからダウンロードできます。
http://maven.apache.org
以下からバンキング・アプリケーションをダウンロードします。
Bank
圧縮ファイルを復元すると、bank というディレクトリーが作られます。
当サンプルのソースコードはSVNからチェックアウトできます。
svn checkout http://svn.apache.org/repos/asf/geronimo/samples/trunk/samples/bank
当アプリケーションでの構成作業は、データベースの作成とデータベースにアクセスするためのコネクション・プールの定義です。
Bank DB を作成するには、Apache Geronimoを開始してコンソールにログインしてから、以下のステップを実行してください。
コマンド・プロンプトで bank ディレクトリーに移動して、mvn install site コマンドをそのまま入力するとビルドが始まります。結果、bankフォルダーの下に bank-ear-2.0-SNAPSHOT.ear が作成されます。さあ、これでbankアプリケーションをGeronimoアプリケーション・サーバーにデプロイする準備が整いました。
サンプルアプリケーションのデプロイは管理コンソールを使えば非常に簡単です。
サンプルのWebアプリケーションをテストするには、ブラウザーを開いて http://localhost:8080/Bank とタイプします。すると、bankアプリケーションのインデックス・ページが表示され、そこには顧客と交換レートの情報を表示するためのダイレクト・リンクがあります。顧客の個々の口座の情報を見るには、DB上で該当する顧客idを入力します。交換レート・ページは交換レート・テーブル上の全ての通貨のリストを表示します。('Bank'はケース・センシティブであることに注意ください)
当記事ではApache GeroimoのEJB機能の使用方法を紹介しました。各種の機能を理解いただくため、アプリケーションをビルド、デプロイし、実行するところまでをステップ・バイ・ステップでご紹介しました。
以下が当記事のハイライトです。
Bookmark this on Delicious Digg this | Privacy Policy - Copyright © 2003-2009, The Apache Software Foundation, Licensed under ASL 2.0. |