WebSphere Application Server Version 6.1 Feature Pack for Web Services   
             オペレーティング・システム: AIX , HP-UX, i5/OS, Linux, Solaris, Windows, Windows Vista, z/OS

             目次と検索結果のパーソナライズ化

コードを並列に実行する作業オブジェクトの開発

作業オブジェクトのコードをラップすることによって、その作業オブジェクトを並列に実行したり、異なる J2EE コンテキストで実行したりすることができます。

始める前に

管理者は、管理コンソールを使用して、1 つ以上の作業マネージャーを 構成している必要があります。

このタスクについて

コードを並列に実行するには、作業オブジェクトのコードをラップします。

プロシージャー

  1. 作業オブジェクトを作成します。
    作業オブジェクトは、com.ibm.websphere.asynchbeans.Work インターフェースをインプリメントします。 以下に例を示します。
    class SampleWork implements Work
  2. このアプリケーション・コンポーネントが必要とする作業マネージャー数を判別します。
  3. java:comp ネーム・スペースで作業マネージャーのリソース参照 (論理名) を使用して、作業マネージャー (複数可) を検索します。 (リソース参照について詳しくは、 トピック参照を参照してください。)
    InitialContext ic = new InitialContext();
    WorkManager wm = (WorkManager)ic.lookup("java:comp/env/wm/myWorkManager");
    作業マネージャーのリソース参照 (この場合は wm/myWorkManager) は、 アプリケーション・デプロイメント記述子でリソース参照として宣言する必要があります。
  4. パラメーターとして作業オブジェクトを使用し、WorkManager.startWork() メソッド を呼び出す。 以下に例を示します。
    Work w = new MyWork(...);
    WorkItem wi = wm.startWork(w);
    startWork() メソッドは、startTimeout パラメーターを取ることができます。 このパラメーターでは、Work オブジェクトの開始に対する厳しい時間制限が指定されます。 startWork() メソッドは、作業項目オブジェクトを戻します。 このオブジェクトは、 コンポーネントと現在実行中の作業オブジェクトをリンクするハンドルです。
  5. [オプション] アプリケーション・コンポーネントが 1 つ以上の実行中作業オブジェクトが完了するまで待機する必要がある場合は、 WorkManager.join() メソッドを呼び出します。 以下に例を示します。
    WorkItem wiA = wm.start(workA);
    WorkItem wiB = wm.start(workB);
    ArrayList l = new ArrayList();
    l.add(wiA);
    l.add(wiB);
    if(wm.join(l, wm.JOIN_AND, 5000)) // block for up to 5 seconds
    {
    
    // both wiA and wiB finished
    }
    else
    {
    
    // timeout
    
    // we can check wiA.getStatus or wiB.getStatus to see which, if any, finished.
    }
    
    このメソッドは、 コンポーネントが待機する作業項目の配列リスト、およびこのコンポーネントが 1 つの作業オブジェクトが完了するまで待機するのか、またはすべての作業オブジェクトが完了するまで待機するのかを示すフラグを受け取ります。タイムアウト値を指定することもできます。
  6. release() メソッドを使用して、作業単位の実行が停止するようシグナル通知します。 そうすると、作業単位は可能な限り早く実行を停止しようとします。 通常、このアクションは、次の例のようなスレッド・セーフ・アプローチを使用して、 フラグを切り替えることによって完了します。
    public synchronized void release()
    {
    	released = true;
    }
    
    Work.run() メソッドは、この変数を定期的に検査して、ループを終了するかどうかをチェックする必要があります。



サブトピック
作業オブジェクト
例: 作業オブジェクトの作成
関連概念
参照
関連タスク
非同期 Bean の使用
タスク・トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 4:10:06 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.wsfep.multiplatform.doc/info/ae/asyncbns/tasks/tasb_devwkobj.html