EJB の使用

EJB は Java を使用した分散型のオブジェクト指向ビジネスアプリケーションの構築にコンポーネントアーキテクチャを提供します。EJB をサポートするアプリケーションサーバを使用すると、Java 開発者は再利用可能なコンポーネントとしてエンタープライズアプリケーションのビジネスロジックを実装することに集中できます。EJB サーバは、コンポーネントのライフサイクル、状態の管理、パーシスタンス、マルチスレッド処理、コネクションプール、トランザクション管理、セキュリティなどの複雑な下位レベルサービスを処理します。

EJB 仕様では次のタイプの Enterprise JavaBeans を定義しています。

次のコンストラクトは EJB にアクセスするときに使用できます。
コンストラクト
拡張クラス
説明
リモートホームインターフェイス
EJBHome
EJB コンテナ外のアプリケーションからアクセスできる EJB のライフサイクルメソッドを定義します。これは EJB インスタンスを作成 (取得)、検索、または削除するメソッドです。
ローカルホームインターフェイス
(EJB 2.0 の新機能)
EJBLocalHome
クライアントの代わりに、EJB インスタンスを作成 (取得)、検索、または削除するメソッドを定義します。このメソッドは同じ EJB コンテナに配置されています。
リモートインターフェイス
EJBObject
EJB コンテナ外のアプリケーションからアクセスできる EJB のビジネスメソッドを定義します。EJB が外部に向けてその動作を示すビジネスメソッドです。
ローカルインターフェイス
(EJB 2.0 の新機能)
EJBLocalObject
同じ EJB コンテナにある他の EJB が使用できる EJB ビジネスメソッドを定義します。ローカルインターフェイスを使用すると、分散型のオブジェクトプロトコルのオーバーヘッドがなくても、EJB は相互作用できます。
EJB 実装クラス

ビジネスおよびライフサイクルメソッドの実装を提供します。リモートインターフェイスおよびローカルインターフェイスでの署名が一致するメソッド、およびリモートおよびローカルホームインターフェイスの両方のメソッドの一部に対応するメソッドがある必要があります。

JSP からの EJB の呼び出し

次の手順では、JSP スクリプトレットをコーディングして、セッション bean である予約用 EJB にアクセスします。次に、リモートインターフェイス、リモートホームインターフェイス、および bean の実装クラスのコードを検証します。

JSP から EJB にアクセスするには

  1. <JRun のルートディレクトリ>/servers/tutorial/compass-ear/compass-war にあるファイル reservationaction.jsp を開きます。
  2. ファイル内の所定の場所に、次の JSP コードを入力します。
    <%
    //ログオンサーブレットで設定します。
    String type=request.getParameter("type");
    String number=request.getParameter("number");
    String expiration=request.getParameter("expiration");
    String userId=(String) session.getAttribute("userId");
    int tripId=trip.getTripId();
    double price=trip.getPrice();
    
    try {
      //ネームサーバと通信する初期コンテキストオブジェクトが必要です。
      javax.naming.InitialContext ctx=new 
    javax.naming.InitialContext();
      //lookup メソッドを使用すると、ネームサーバを照会して EJB を配置し、
    //ホームインターフェイスへのリファレンスを返します。
      Object obj=ctx.lookup("Reservation");
      //リモートホームインターフェイスのデータタイプのリファレンスを配列します。
      ReservationHomeRemote home=(ReservationHomeRemote)
    javax.rmi.PortableRemoteObject.narrow
    (obj, ReservationHomeRemote.class);
      //リモートインターフェイスへのリファレンスを取得します。
      ReservationRemote reservation=home.create();
      //旅行を予約する reserve メソッドを呼び出します。
      int id=reservation.reserve(userId, tripId, price, type, number, 
    expiration);
      %>
      ありがとうございます。予約内容は確認されました。<br><br>
      予約番号は次のとおりです:<%= id %><br>
      <%
      } catch (Exception e) {
      %>
      申しわけありません。この旅行を予約できませんでした。
        <br><%= e.getMessage() %>
      <%
        }
      %>
    
  3. ファイルを保存し Web ブラウザで Compass Adventures ホームページを開きます。
    http://localhost:8101/compass/home.jsp

    メモ:  8101 または tutorial サーバを作成したときに JRun が割り当てた Web サーバのポート番号を使用します ( 手順3 を参照)。

  4. 旅行を選んで予約します。

    メモ:  旅行を予約するには、定義済みユーザー (名前 john と パスワード john、または名前 mary とパスワード mary) としてログインする必要があります。

セッション bean を使用して、EJB 間の相互作用の調整や、タスクを実行するために複雑な操作を行うことはよくあります。旅行リストの検索、ATM との相互作用、予約の作成など、アプリケーションでのタスクとロジックを記述するためにセッション bean を使用します。次の手順では、予約用セッション bean を使用して、アドベンチャー旅コースを予約します。