WebSphere Application Server for i5/OS, Version 6.1   
             オペレーティング・システム: i5/OS

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

作業マネージャー

作業マネージャーは、非同期 Bean を使用する J2EE アプリケーション用に作成されたスレッド・プールです。

管理者は、管理コンソールを使用して、任意の数の作業マネージャーを構成できます。 管理者は、作業マネージャーのプロパティー (作業マネージャーを使用するすべての非同期 Bean 用の J2EE コンテキスト継承ポリシーを含む) を指定します。 管理者は、各作業マネージャーを Java Naming and Directory Interface (JNDI) 内のそれぞれ固有の場所にバインドします。作業マネージャー・オブジェクトは、以下のいずれか 1 つのインターフェースで使用できます。 選択されたインターフェースの型は、JNDI ルックアップ中に解決されます。 このインターフェースの型は、構成オブジェクトで指定されたインターフェースの型ではなく、ResourceRef で指定する値です。例えば、1 つの構成オブジェクトにつき、インターフェースごとに 1 つの ResourceRef を持つことができ、各 ResourceRef をルックアップすると、それに該当する型のインスタンスが戻されます。

作業マネージャーは、J2EE 1.4 アプリケーション用のプログラミング・モデルを提供します。 詳しくは、この文書のプログラミング・モデルのセクションを参照してください。

非同期 Bean を使用する Web や EJB コンポーネントを作成する場合、開発者は、作業マネージャーにアクセスする必要のある各コンポーネント内にリソース参照をインクルードする必要があります。 リソース参照について詳しくは、 文書参照を参照してください。コンポーネントは、データ・ソース、エンタープライズ Bean、または接続ファクトリーを検索する場合と同様、コンポーネント java:comp のネーム・スペース内にある論理名を使用して、 作業マネージャーをルックアップします。

デプロイヤーは、アプリケーションがデプロイされたときに、物理的な作業マネージャーを論理的な作業マネージャーにバインドします。

例えば、開発者が作業を銅レベル、銀レベル、および金レベルの間で区分するために 3 つのスレッド・プールを必要とする場合、開発者は、クライアント・アプリケーション・プロファイル内の属性に基づく論理プールを選択するためのコンポーネントを作成します。 デプロイヤーは、この 3 つのスレッド・プールの要求をマップする方法を柔軟に決定できます。 デプロイヤーは、小規模のマシン上で単一のスレッド・プールを使用することを決定する場合があります。 この場合、デプロイヤーは、3 つのリソース参照をすべて同じ作業マネージャー・インスタンス (つまり、同じ JNDI 名) にバインドします。 より大きなマシンを使用すると、3 つのスレッド・プールがサポートされる場合があります。この場合、デプロイヤーは、各リソース参照を別々の作業マネージャーにバインドします。 作業マネージャーは、同じサーバー上にインストールされた複数の J2EE アプリケーション間で共用できます。

アプリケーション開発者は、論理作業マネージャーを必要なだけ使用できます。 デプロイヤーは、アプリケーション内で定義された論理作業マネージャーに、物理作業マネージャーを 1 つマップするか、または複数マップするかを選択します。

複数の非同期有効範囲オブジェクトを共用する必要のある J2EE コンポーネントは、すべて同じ作業マネージャーを使用する必要があります。 これらの有効範囲オブジェクトは、単一の作業マネージャーと類縁性があります。非同期有効範囲を使用するアプリケーションで、有効範囲オブジェクトを使用しているすべてのコンポーネントが、同じ作業マネージャーを使用していることを確認する必要があります。

複数の作業マネージャーが定義されているときは、Java 仮想マシン (JVM) 内のアプリケーションが その作業マネージャーを検索する場合にのみ、基礎になるスレッド・プールが JVM に作成されます。 例えば、定義済みの 10 個のスレッド・プール (作業マネージャー) がある場合でも、アプリケーションがこれらのプールを検索しないかぎり、いずれも実際には作成されません。

注: 非同期 Bean は、リモート JVM に対する作業の実行依頼をサポートしません。

CommonJ 作業マネージャー

CommonJ 作業マネージャーは、作業マネージャーに類似しています。両者の違いは、CommonJ 作業マネージャーには、非同期 Bean 作業マネージャーのメソッドのサブセットが含まれていることです。CommonJ 作業マネージャーは J2EE 1.4 環境で動作しますが、 この仕様は J2EE 仕様には含まれていないので、このインターフェースは、 各 JNDI ネーミング・ルックアップの新規インスタンスを戻しません。

作業のリモート開始。リモートで実行される作業用の CommonJ 作業仕様のオプション・フィーチャーは、 サポートされていません。 作業単位が java.io.Serializable インターフェースをインプリメントする場合であっても、 その作業単位はリモートでは実行されません。

作業マネージャーの検索方法

アプリケーションは、以下のようにして作業マネージャーを 検索できます。 コンポーネントには、wm/myWorkManager という名前のリソース参照 (このコンポーネントが デプロイされるときに物理作業マネージャーにバインドされる) が含まれています。
InitialContext ic = new InitialContext();
WorkManager wm = (WorkManager)ic.lookup("java:comp/env/wm/myWorkManager");

継承 J2EE コンテキスト

非同期 Bean は、以下の J2EE コンテキストを 継承できます。
国際化対応コンテキスト
このオプションが選択され、国際化対応サービスが使用可能になっている場合、スケジューリング・スレッドに存在する国際化対応コンテキストは、ターゲット・スレッドで使用可能になります。
作業域
このオプションが選択されると、スケジューリング・スレッドに存在するすべての作業域区画の作業域コンテキストが、ターゲット・スレッドで使用可能になります。
アプリケーション・プロファイル (推奨されません)
アプリケーション・プロファイル・コンテキストは、J2EE 1.4 アプリケーションではサポートされておらず、 使用できません。J2EE 1.3 アプリケーションでは、このオプションが選択されると、 アプリケーション・プロファイル・サービスが使用可能になり、 アプリケーション・プロファイル・サービス・プロパティー 5.x 互換モードが選択されます。 スケジューリング・スレッドに関連付けられているアプリケーション・プロファイル・タスクが、J2EE 1.3 アプリケーションのターゲット・スレッドで使用可能になります。J2EE 1.4 アプリケーションの場合、アプリケーション・プロファイル・タスクは、スレッドではなく、そのタスクに関連付けられた作業単位のプロパティーになります。このオプションは、J2EE 1.4 アプリケーションのタスクの動作には何の効果も及ぼしません。J2EE 1.4 アプリケーションで実行されるスケジュール済み作業は、スケジューリング・スレッドのアプリケーション・プロファイル・タスクを受け取りません。
セキュリティー
非同期 Bean は、非同期 Bean を作成したスレッド上で匿名または認証済みクライアントとして実行することができます。 非同期 Bean は呼び出し元で可能なことしかできないので、この振る舞いは役立ちます。 また、このアクションは、例えばこの種の振る舞いを阻止する RUN_AS メカニズムよりもずっと役立ちます。セキュリティー・オプションが選択されると、スケジューリング・スレッドに存在する JAAS 対象が、ターゲット・スレッドで使用可能になります。選択されていない場合は、スレッドは匿名で実行されます。
コンポーネント・メタデータ
コンポーネント・メタデータは、非同期 Bean が単純な Java オブジェクトの場合にのみ関係します。 Bean が Enterprise Bean などの J2EE コンポーネントの場合は、そのコンポーネント・メタデータがアクティブになります。

継承できるコンテキストは、 非同期 Bean を作成するアプリケーションが使用する作業マネージャーによって決まります。 管理者は、管理コンソールを使用して、作業マネージャーを使用可能にするサービスを選択し、作業マネージャーのスティッキー・コンテキスト・ポリシーを定義します。

プログラミング・モデル

作業マネージャーは以下のプログラミング・モデルをサポートしています。
  • CommonJ 仕様。Application Server バージョン 6.0 CommonJ プログラミング・モデルでは、WorkManager および TimerManager を使用して、J2EE 1.4 環境でスレッドおよびタイマーを非同期的に管理します。
  • 非同期 Bean および CommonJ 仕様の拡張。現行の非同期 Bean Event Source、非同期有効範囲、サブシステム・モニター、および J2EEContext インターフェースは、CommonJ 拡張の一部です。
以下の表で、CommonJ と非同期 Bean API の間のメソッドのマッピングを説明します。同じ機能を維持しながら、CommonJ インターフェースを使用するように、現行の非同期 Bean インターフェースを変更することができます。
CommonJ パッケージ API 非同期 Bean パッケージ API
作業マネージャー   作業マネージャー  
非同期 Bean Field - IMMEDIATE (long)   Field - IMMEDIATE (int)
  Field - INDEFINITE   Field - INDEFINITE
  schedule(Work) throws WorkException, IllegalArgumentException   startWork(Work) throws WorkException, IllegalArgumentException
  schedule(Work, WorkListener) throws WorkException, IllegalArgumentException
注: 作業マネージャーの作業タイムアウト・プロパティーは、以前に startWorktimeout_ms として指定した値に構成してください。デフォルトのタイムアウト値は INDEFINITE です。
  startWork(Work, timeout_ms, WorkListener) throws WorkException, IllegalArgumentException
  waitForAll(workItems, timeout_ms)   join(workItems, JOIN_AND, timeout_ms)
  waitForAny(workItems, timeout_ms)   join(workItems, JOIN_OR, timeout_ms)
WorkItem   WorkItem  
  getResult   getResult
  getStatus   getStatus
WorkListener   WorkListener  
  workAccepted(WorkEvent)   workAccepted(WorkEvent)
  workCompleted(WorkEvent)   workCompleted(WorkEvent)
  workRejected(WorkEvent)   workRejected(WorkEvent)
  workStarted(WorkEvent)   workStarted(WorkEvent)
WorkEvent   WorkEvent  
  Field - WORK_ACCEPTED   Field - WORK_ACCEPTED
  Field - WORK_COMPLETED   Field - WORK_COMPLETED
  Field - WORK_REJECTED   Field - WORK_REJECTED
  Field - WORK_STARTED   Field - WORK_STARTED
  getException   getException
  getType   getType
  getWorkItem().getResult()
注: この API は作業が完了してはじめて有効になります。
  getWork
Work (extends Runnable) Work (Extends Runnable)
  isDaemon   *
  release   release
RemoteWorkItem このリリースには含まれていません。Extended Deployment または将来のリリースで配布される作業マネージャーを使用してください。 該当なし  
TimerManager   AlarmManager  
  resume   *
  schedule(Listener, Date)   create(Listener, context, time) ** パラメーターの変換が必要
  schedule(Listener, Date, period)    
  schedule(Listener, delay, period)    
  scheduleAtFixedRate(Listener, Date, period)    
  scheduleAtFixedRate(Listener, delay, period)    
  stop    
  suspend    
タイマー   Alarm  
  cancel   cancel
  getPeriod    
  getTimerListener   getAlarmListener
  scheduledExecutionTime    
TimerListener   AlarmListener  
  timerExpired(timer)   fired(alarm)
StopTimerListener   該当なし  
  timerStop(timer)    
CancelTimerListener   該当なし  
  timerCancel(timer)    
WorkException (Extends Exception) WorkException (Extends WsException)
WorkCompletedException (Extends WorkException) WorkCompletedException (Extends WorkException)
WorkRejectedException (Extends WorkException) WorkRejectedException (Extends WorkException)
作業マネージャーの API について詳しくは、Javadoc を参照してください。

表 1. 作業マネージャーのルックアップ
非同期 Bean CommonJ
InitialContext ctx = new InitialContext();
com.ibm.websphere.asynchbeans.WorkManager wm  =
(com.ibm.websphere.asynchbeans.WorkManager)
	       ctx.lookup(“java:comp/env/wm/MyWorkMgr”);
InitialContext ctx = new InitialContext();
commonj.work.WorkManager wm = (commonj.work.WorkManager)
	     ctx.lookup(“java:comp/env/wm/MyWorkMgr”);
表 2. MyWork を使用した作業の作成
非同期 Bean CommonJ
public class MyWork implements 
com.ibm.websphere.asynchbeans.Work {
public void release() {
	            ......
	     }
	   public void run() {
	     System.out.println(“Running.....”);
	  }
public class MyWork implements 
commonj.work.Work{
	   public boolean isDaemon() {
		return false;
	   }
	   public void release () {
	        .....
	    }
	  public void run () {
	     System.out.println(“Running.....”);
	  }
表 3. 作業の実行依頼
非同期 Bean CommonJ
	MyWork work1 = new MyWork(new URI = 
“http://www.example./com/1”);
	MyWork work2 = new MyWork(new URI =
“http://www.example./com/2”);
	
	WorkItem item1;
	WorkItem item2;
	Item1=wm.startWork(work1);
	Item2=wm.startWork(work2);
	
	// case 1: block until all items are done
	ArrayList col1 = new ArrayList();
	Col1.add(item1);
	Col1.add(item2);
	wm.join(col1, WorkManager.JOIN_AND, (long)WorkManager.IMMEDIATE);
	// when the works are done
	System.out.println(“work1 data=”+work1.getData());
	System.out.println(“work2 data=”+work2.getData());
	
	// case 2: wait for any of the items to complete.
	Boolean ret = wm.join(col1,                           WorkManager.JOIN_OR, 1000);
	MyWork work1 = new MyWork(new URI = 
“http://www.example./com/1”);
	MyWork work2 = new MyWork(new URI =
“http://www.example./com/2”);
	
	WorkItem item1;
	WorkItem item2;
	Item1=wm.schedule(work1 );
	Item2=wm.schedule(work2);
	
	// case 1: block until all items are done
	Collection col1 = new ArrayList();
	col1.add(item1);
	col1.add(item2);
	wm.waitForAll(col1, WorkManager.IMMEDIATE);
	// when the works are done
	System.out.println(“work1 data=”+work1.getData());
	System.out.println(“work2 data=”+work2.getData());
	
	
	// case 2: wait for any of the items to complete.
	Collection finished = wm.waitForAny(col1,                           1000);
	// check the workItems status
	if (finished != null) {
	  Iterator I = finished.iterator();
	  if (i.hasNext()) {
	     WorkItem wi = (WorkItem) i.next();
	      if (wi.equals(item1)) {
	        System.out.println(“work1 = “+ work1.getData());
	      } else if (wi.equals(item2)) {
	        System.out.println(“work1 = “+ work1.getData());
	      }
	  }
	}
表 4. タイマー・マネージャーの作成
非同期 Bean CommonJ
InitialContext ctx = new InitialContext();
	com.ibm.websphere.asynchbeans.WorkManager wm  =
	    (com.ibm.websphere.asynchbeans.WorkManager)
	      ctx.lookup(“java:comp/env/wm/MyWorkMgr”);
	AsynchScope ascope;
	Try {
	  Ascope = wm.createAsynchScope(“ABScope”);
	} Catch (DuplicateKeyException ex)
	{
	   Ascope = wm.findAsynchScope(“ABScope”);
	   ex.printStackTrace();
	}
	
	// get an AlarmManager 
	AlarmManager  aMgr= ascope.getAlarmManager();
InitialContext ctx = new InitialContext();
	Commonj.timers.TimerManager tm = (commonj.timers.TimerManager) ctx.lookup(“java:comp/env/tm/MyTimerManager”);
表 5. タイマーの実行
非同期 Bean CommonJ
	// create alarm
	ABAlarmListener listener = new ABAlarmListener();
	Alarm am = aMgr.create(listener, “SomeContext”, 1000*60);
	// create Timer
	TimerListener listener = new StockQuoteTimerListener(“qqq”, “johndoe@example.com”);
	Timer timer = tm.schedule(listener, 1000*60);
	
	// Fixed-delay: schedule timer to expire in
	// 60 seconds from now and repeat every
	// hour thereafter.  
	Timer timer = tm.schedule(listener, 1000*60, 1000*30);
	// Fixed-rate: schedule timer to expire in
	// 60 seconds from now and repeat every
	// hour thereafter
	Timer timer = tm.scheduleAtFixedRate(listener, 1000*60, 1000*30);



関連タスク
作業マネージャーの構成
概念トピック    

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

最終更新: Jan 21, 2008 5:46:14 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.base.iseries.doc/info/iseries/asyncbns/concepts/casb_workmgr.html