ローカル・セッション Bean へのアクセス

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

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

セッション Bean は、プロセス・ アプリケーションの場合は LocalBusinessFlowManager セッション Bean、ヒューマン・タスク・アプリケーションの場合は LocalHumanTaskManager セッション Bean になります。

このタスクのステップ

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

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

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

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

    // Obtain the default initial JNDI context
    InitialContext initialContext = new InitialContext();
    
      // Lookup the local home interface of the LocalBusinessFlowManager bean
     
       LocalBusinessFlowManagerHome processHome =
            (LocalBusinessFlowManagerHome)initialContext.lookup
            ("java:comp/env/ejb/LocalBusinessFlowManagerHome");
    ローカル・セッション Bean のホーム・インターフェースには、EJB オブジェクト の create メソッドが含まれます。 このメソッドは、セッション Bean のローカル・ インターフェースを戻します。
  3. ローカル・セッション Bean のローカル・ インターフェースにアクセスします。

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

    LocalBusinessFlowManager process = processHome.create();

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

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

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

    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();

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

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

// Lookup the local home interface of the LocalHumanTaskManager bean
LocalHumanTaskManagerHome taskHome =
        (LocalHumanTaskManagerHome)initialContext.lookup
        ("java:comp/env/ejb/LocalHumanTaskManagerHome");

...
//Access the local interface of the local session bean
LocalHumanTaskManager 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) が採用されています。