EJB技術を活用した出張予約システムの開発
著者:Eve Cole
更新時間:2009-07-02 17:12:35
大規模なネットワークシステムの開発において活用が進んでいるEJB(Enterprise Java Beans)の定義、EJB技術に基づくアプリケーションシステムの構造モデル、EJBの内容と分類について紹介します。最後に、EJBベースのコンポーネントと組み合わせて、構造モデルとEJBコンポーネントを使用したビジネス予約システムを開発しました。
EJB は技術的には「製品」ではなく、技術仕様です。 SUN の EJB の定義は次のとおりです。 EJB の構造は、コンポーネントベースの分散ビジネス アプリケーションを開発および構成するためのコンポーネント構造です。 EJB 構造を使用して開発されたアプリケーションは、スケーラブルでトランザクション性が高く、マルチユーザーに対して安全です。これらのアプリケーションは一度作成するだけで済みますが、EJB 仕様をサポートするタスク サーバー プラットフォームにデプロイできます。一般に、EJB は、コンポーネント トランザクション監視のための標準的なサーバー側コンポーネント モデルです。
EJB技術に基づくシステム構造モデル
EJB 構造はサーバー側のコンポーネント構造であり、その構造モデルは図 1 に示されています。この構造モデルは通常、顧客層、ビジネス ロジック層、データ層に分類できます。これについては、以下で簡単に説明します。
図 1: EJB ベースのアプリケーション構造モデル
クライアント層は主に、システム全体のさまざまなアクセス要件を満たし、次のタスクを処理するために使用されます。
ユーザー入力を受信し、ユーザー入力を分析および確認し、それに応じて処理します。
サーバー側上位から送信される実行結果を表示します。
クライアント層は通常、ブラウザによって動的に作成および破棄されるクライアント プロセスで構成されます。
ビジネス ロジック層 これはシステム全体の最も重要な部分です。ビジネスロジック層は通常2層に分かれており、上位層はブラウザからのリクエストを受け取り、処理結果を下位層に転送するために使用されます。ブラウザに送信されます。これらのプロセスは主に、JSP ページ、Web ベースのアプレット、および HTML ページを表示するサーブレットで構成されます。最下層はリクエスト処理層(一般に EJB 層と呼ばれます)で、リスニング処理、処理処理、データベース操作処理を含み、リクエスト受信層からの顧客リクエストの処理と処理を同時に担当します。リクエスト結果をリクエスト受信層に渡します。必要に応じて、処理結果をデータ層に渡して保存する必要があります。
データ層は主に、ビジネス ロジック層の処理結果を保存したり、ビジネス ロジック層によって取得されたデータ結果を返したりするなど、ビジネス ロジック層にデータ サービスを提供します。また、データ ソースの変更をシールドするためにも使用されます。データベースが変更された場合は、ステートメントを使用してデータ ソースに接続するだけで済みます。
EJB コンポーネントの分類 通常、サーバー側 EJB コンポーネントには、Entity Bean と Session Bean の 2 つの基本的なタイプがあります。
図2:出張予約システムのアーキテクチャ
エンティティ Bean は、実世界のオブジェクト用に構築されたモデルであり、通常はデータベース内の永続レコードです。 Entity Bean は、名詞として表現できるビジネス概念のモデルを構築し、現実世界のオブジェクトの状態とその動作の両方を記述し、開発者が特定の概念に関連するデータとビジネス ルールをカプセル化できるようにします。セッション Bean は、ホーム インターフェイスを通じて作成されるエンタープライズ Bean であり、クライアント接続専用です。通常、セッション Bean インスタンスは他のクライアントとは共有されません。セッション Bean はクライアント アプリケーションの拡張機能であり、プロセス全体またはタスクの管理を担当します。セッション Bean は、エンティティ Bean 間の対話を管理し、特別なタスクを完了するためにエンティティ Bean がどのように連携するかを記述することができます。
エンティティ Bean は、永続性の管理方法に基づいて、コンテナ管理の Bean と Bean を使用して管理される Bean に分類できます。コンテナ管理の Bean は、EJB コンテナによって自動的に管理され、Bean インスタンスのフィールドがデータベースにどのようにマップされるかを認識し、Bean を使用してデータベース内のエンティティ関連データの挿入、更新、削除を自動的に管理します。 Bean はこれらすべてを明示的に行う必要があります。 Bean 開発者は、データベースを操作するためのコードを作成する必要があります。EJB コンテナは、データベース内でデータを安全に挿入、更新、削除できる時期を Bean インスタンスに通知するだけであり、その他のヘルプは提供しません。 Bean インスタンスはすべての永続化作業をそれ自体で実行します。
セッション Bean は、ステートフルかどうかに応じて、ステートレス Bean とステートフル Bean に分類できます。ステートレス セッション Bean は多用途で再利用可能な傾向にあり、ステートフル セッション Bean は、クライアントに代わってタスクを完了し、クライアント関連のステータスを維持するクライアント アプリケーションの拡張機能です。
ビジネス予約システムの開発 客室予約システムは、J2EE プラットフォーム上で開発された EJB コンポーネント技術に基づくビジネス予約システムです。その主なプロセスは、ユーザーがログインした後、顧客選択ページとナビゲーション選択ページに誘導されることです。次に、顧客に利用可能なキャビンの選択を提供します (TravelAgentBean から利用可能なキャビンのリストを取得します。TravelAgentBean の listAvailableCabin() メソッドは、この Web ページを生成するサーブレットによって呼び出されます。キャビン リストは、ユーザーのブラウザにロードされた Web ページ上の HTML リスト ボックス)、ユーザーがキャビンを選択して選択内容を送信すると、HTTP リクエストが EJB サーバー (Websphere Application Server) に送信され、サーバーがリクエストを受信した後、ディスパッチされます。このサーブレットは、TravelAgent.BookPassage() メソッドを呼び出して実際の予約を行います。BookPassage() メソッドによって返されたタグ情報は、ユーザーのブラウザに送り返される別の Web ページを作成するために使用されます。予約が成功すると、ProcessPaymentServlet は ProcessPaymentBean の支払いメソッドを呼び出して、顧客の請求プロセスを実装します。その具体的な構造を図 2 に示します。
予約システムの EJB コンポーネントには主に次の部分が含まれます。
CabinBean: エンティティ Bean。主キーは CabinPK です。これは、現実世界の船の客室をカプセル化するために使用されるエンティティ Bean です。
CustomerBean: エンティティ Bean。主キーは CustomerPK です。これは、現実世界でクルーズ船室を予約する必要がある消費者をカプセル化するために使用されるエンティティ Bean です。
CruiseBean: エンティティ Bean。主キーは CruisePK です。これは、現実世界の船舶航路をカプセル化するために使用されるエンティティ Bean です。 RegistrationBean: エンティティ Bean、主キーは CruiseID、CabinID であり、データベース内の変更されていないレコード、つまり予約を表します。主に予約システムの履歴イベントを記録します。 2 人の顧客が同じルートを予約した場合、この問題の原因は、顧客がキャビンとルートを選択した時点と bookPassage() メソッドが呼び出された時点との間にギャップがあることです。 TravelAgentBean: ステートフル セッション Bean。フライトの客室予約のワークフローを担当するセッション Bean で、ルートの予約操作を完了するプロセスがカプセル化されており、世界中の旅行代理店のクライアント アプリケーションで使用されます。 TravelAgentBean は、チケットを予約するという消費者のニーズを満たすだけでなく、航海中の残りの船室に関する情報も提供します。このタスクを完了するには、Bean は予約がどのルート、キャビン、顧客で構成されているかを知る必要があります。この情報を収集した後、bookPassage() メソッドは顧客への請求プロセスを完了します。正しいルートで正しい船の選択したキャビンを予約し、チケット クラスを通じて顧客のチケットを生成します。ここでは、CreditCard クラスを使用して顧客のクレジット カードに関する関連情報を保存する必要があります。同時に、ListAvailableCabins() メソッドを使用して、予約されていない利用可能なキャビンを表示します。
ProcessPaymentBean: トランザクション システムで消費者に課金するプロセスであるステートレス セッション Bean。小切手、現金、クレジット カードの支払い方法として、ByCheck()、ByCash()、および ByCredit() という 3 つのトランザクション メソッドが定義されています。
ビジネス予約システムのプログラム コード例。ビジネス予約システム全体は、IBM VisualAge for Java で開発されました。この IDE 開発環境では、エンティティ Bean がセッション Bean よりもはるかに簡単に開発できます。 EJB コンポーネントの構成:
1. TravelAgent リモート インターフェイス 顧客が予約したいルートとキャビン ID を設定するメソッドを提供します。さらに、 boolPassage() メソッドは、顧客に予約に対して請求し、顧客のチケットを生成するように設定されています。具体的なコードは次のとおりです。
パッケージ com.titan.travelagent;
インポート java.rmi.RemoteException;
インポートjavax.ejb.FinderException;
com.titan.cruise.Cruise をインポートします。
com.titan.customer.Customer をインポートします。
com.titan.processpayment.CreditCard をインポートします。
パブリック インターフェイス TravelAgent は javax.ejb.EJBObject を拡張します
{
public void setCruiseID(int Cruise) は RemoteException、FinderException をスローします。
public int getCruiseID( ) は RemoteException、IncompleteConversationalState をスローします。
public void setCabinID(int Cabinet) は RemoteException、FinderException をスローします。
public int getCabinID()throws RemoteException、IncompleteConversationalState;
public int getCustomerID()throws RemoteException、IncompleteConversationalState;
public Ticket boolPassage(クレジットカード カード、二重価格) は RemoteException、IncompleteConversationalState をスローします。
}
2.トラベルエージェント ホーム インターフェース
TravelAgent ホーム インターフェイスのコードは次のとおりです。
パッケージcom.titan.tracelagent;
インポート java.rmi.RemoteException;
インポートjavax.ejb.CreateException;
com.titan.customer.Customer をインポートします。
パブリック インターフェイス TravelAgentHome extends javax.ejb.EJBHome {
public TravelAgent create(Customer cust) は RemoteException,CreateException をスローします;}
3. TravelAgent Bean クラスは、TravelAgent のリモート インターフェイスとホーム インターフェイスのすべての動作を実装する必要があります。スペースの制限があるため、この記事では実装コードを紹介しません。興味のある読者はご自身で実装できます。
以上の手順で、業務予約システムのEJBコンポーネントの開発が完了しました。