リモート・セッション Bean へのアクセス

EJB クライアント・アプリケーションは、Bean のホーム・ インターフェースを介して、適切なリモート・セッション Bean にアクセスします。

このタスクを実行する理由と実行時期

セッション Bean は、プロセス・ アプリケーションに対しては BusinessFlowManager セッション Bean、タスク・アプリケーションに対しては HumanTaskManager セッション Bean のいずれかである可能性 があります。

このタスクのステップ

  1. リモート・セッション Bean への参照を アプリケーション・デプロイメント記述子に追加します。 参照を以下のファイルの 1 つに追加します。
    • Java™ 2 Platform Enterprise Edition (J2EE) クライアント・アプリケーションの場合は、application-client.xml ファイル
    • Web アプリケーションの場合は、web.xml ファイル
    • Enterprise JavaBeans™ (EJB) アプリケーションの 場合は、ejb-jar.xml ファイル
    プロセス・アプリケーションの場合のリモート ・ホーム・インターフェースへの参照は、以下の例で 示されます。
    <ejb-ref>
    	<ejb-ref-name>ejb/BusinessFlowManagerHome</ejb-ref-name>
    	<ejb-ref-type>Session</ejb-ref-type>
    	<home>com.ibm.bpe.api.BusinessFlowManagerHome</home>
    	<remote>com.ibm.bpe.api.BusinessFlowManager</remote>
    </ejb-ref>
    タスク・ アプリケーションの場合のリモート・ホーム・ インターフェースへの参照は、以下の例で示されます。
    <ejb-ref>
    	<ejb-ref-name>ejb/HumanTaskManagerHome</ejb-ref-name>
    	<ejb-ref-type>Session</ejb-ref-type>
    	<home>com.ibm.task.api.HumanTaskManagerHome</home>
    	<remote>com.ibm.task.api.HumanTaskManager</remote>
    </ejb-ref>

    WebSphere® Integration Developer を使用して EJB 参照を デプロイメント記述子に追加する場合、EJB 参照のバインディングが、アプリケーションのデプロイ時に 自動的に作成されます。EJB 参照の追加について 詳しくは、WebSphere Integration Developer の文書を 参照してください。

  2. 生成されたスタブをアプリケーションに パッケージします。

    ご使用の アプリケーションが、BPEContainer アプリケーションまたは TaskContainer アプリケーションを実行しているのと 異なる Java 仮想マシン (JVM) で実行されている場合、 以下のアクションを完了します。

    1. プロセス・アプリケーションの場合、<install_root>/ProcessChoreographer/client/bpe137650.jar ファイルを、ご使用の アプリケーションのエンタープライズ・アーカイブ (EAR) ファイルにパッケージします。
    2. タスク・アプリケーションの場合、<install_root>/ProcessChoreographer/client/task137650.jar ファイルを、ご使用のアプリケーションの EAR ファイルにパッケージします。
    3. ビジネス・プロセスまたはヒューマン・タスクの複合データ・タイプを使用し、クライアントが EJB アプリケーションまたは Web アプリケーションで実行しない場合は、対応する XSD または WSDL ファイルを、ご使用のアプリケーションの EAR ファイルにパッケージします。
    4. アプリケーション・モジュールの マニフェスト・ファイル内の Classpath パラメーターを、JAR ファイルを含めるように設定します。

      アプリケーション・モジュールは、J2EE アプリケーション、Web アプリケーション、または EJB アプリケーションの可能性があります。

  3. Java Naming and Directory Interface (JNDI) からリモート・セッション Bean のホーム・インターフェースへの参照を取得します。

    以下の例では、プロセス・アプリケーションでのこのステップを示します。

    // Obtain the default initial JNDI context
    InitialContext initialContext = new InitialContext();
    
      // Lookup the remote home interface of the BusinessFlowManager bean
      Object result =
             initialContext.lookup("java:comp/env/ejb/BusinessFlowManagerHome");
    
    // Convert the lookup result to the proper type
       BusinessFlowManagerHome processHome =
               (BusinessFlowManagerHome)javax.rmi.PortableRemoteObject.narrow
               (result,BusinessFlowManagerHome.class);
    セッション Bean のホーム・ インターフェースには、EJB オブジェクトの create メソッドが含まれます。 このメソッドは、セッション Bean のリモート・ インターフェースを戻します。
  4. セッション Bean のリモート・ インターフェースにアクセスします。

    以下の例では、プロセス・アプリケーションでのこのステップを示します。

    BusinessFlowManager process = processHome.create();

    セッション Bean へのアクセス権は、 呼び出し元が Bean が提供するすべてのアクションを実行できることを保証するものではありません。 呼び出し元には、そのアクションに対する許可も必要になります。 セッション Bean のインスタンスを作成すると、 コンテキストとそのセッション Bean のインスタンスが関連付けられます。コンテキストには呼び出し元のプリンシパル ID、グループ・メンバーシップ・リストが含まれ、その呼び出し元に Business Process Choreographer の J2EE ロールのいずれかがあるかどうかを示します。 コンテキストは、グローバル・セキュリティーが設定されていなくても、それぞれの呼び出しごとに、 呼び出し元の権限を確認するために使用されます。グローバル・セキュリティーが設定されていない場合、 呼び出し元のプリンシパル ID の値は UNAUTHENTICATED になります。

  5. サービス・インターフェースによって 公開されたビジネス関数を呼び出します。

    以下の例では、プロセス・アプリケーションでのこのステップを示します。

    process.initiate("MyProcessModel",input);
    アプリケーションからの呼び出しは、 トランザクションとして実行されます。 トランザクションは、以下のいずれかの方法で確立され て終了します。
    • WebSphere Application Server から自動的に (デプロイメント記述子が TX_REQUIRED を指定)。
    • アプリケーションから明示的に。 アプリケーションの呼び出しを 1 つのトランザクション にバンドルすることができます。
      // Obtain user transaction interface
      UserTransaction transaction=
             (UserTransaction)initialContext.lookup("jta/usertransaction");
      
      // Begin a transaction
      transaction.begin();
      
      // Applications calls ...
      
      // On successful return, commit the transaction
      transaction.commit();
    ヒント: データベース・デッドロックを防ぐには、並列トランザクションで以下のようなステートメントの実行を避けるようにします。
    // Obtain user transaction interface
    UserTransaction transaction=
           (UserTransaction)initialContext.lookup("jta/usertransaction");
    
    transaction.begin();
    
    //read lock on the activity instance 
    process.getActivityInstance(aiid);     
    //write lock on the activity instance
    process.claim(aiid);               
         
    transaction.commit();

以下に、ステップ 3 から 5 でタスク・アプリケーションを探す方法の例を示します。

// Obtain the default initial JNDI context
InitialContext initialContext = new InitialContext();

// Lookup the remote home interface of the HumanTaskManager bean
Object result =
         initialContext.lookup("java:comp/env/ejb/HumanTaskManagerHome");

// Convert the lookup result to the proper type
HumanTaskManagerHome taskHome =
           (HumanTaskManagerHome)javax.rmi.PortableRemoteObject.narrow
           (result,HumanTaskManagerHome.class);

...
//Access the remote interface of the session bean.
HumanTaskManager task = taskHome.create();

...
//Call the business functions exposed by the service interface
task.callTask(tkiid,input);
関連概念
ビジネス・プロセスのための許可のロール
ヒューマン・タスクのための許可のロール

(c) Copyright IBM Corporation 2005, 2006. All rights reserved.
(c) Copyright IBM Japan 2006
このインフォメーション・センターでは、Eclipse テクノロジー (http://www.eclipse.org) が採用されています。