WebSphere Application Server for z/OS, Version 6.0.x   
             オペレーティング・システム: z/OS

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

Session Bean を呼び出すタスクの開発

スケジューラー API および WASScheduler MBean API は、 TaskInfo インターフェースの各種インプリメンテーションをサポートしています。 これらのインプリメンテーションはそれぞれ特定のタイプの作業のスケジューリングに使用することができます。 このトピックでは、TaskHandler セッション Bean でメソッドを呼び出すためのタスクを作成する方法について説明します。

このタスクについて

TaskHandler セッション Bean のメソッドを呼び出すためのタスクを作成するには、以下のステップを実行します。

プロシージャー

  1. EJB モジュールで、新規のエンタープライズ・アプリケーションを作成します。 このアプリケーションは TaskHandler EJB モジュールをホスティングします。
  2. com.ibm.websphere.scheduler.TaskHandler リモート・インターフェースに process() メソッドをインプリメントする Stateless Session Bean を EJB モジュールに作成します。 作成するビジネス・ロジックを process() メソッドに配置します。process() メソッドは、タスクの実行時に 呼び出されます。ホーム・インターフェースおよびリモート・インターフェースは、デプロイメント記述子 Bean に 以下のように設定されている必要があります。
    • com.ibm.websphere.scheduler.TaskHandlerHome
    • com.ibm.websphere.scheduler.TaskHandler
  3. 以下の例のファクトリー・メソッドを使用して、BeanTaskInfo インターフェースのインスタンスを作成します。 JavaServer Pages (JSP) ファイル、サーブレット、または EJB コンポーネントを使用して、以下の コード例のようにインスタンスを作成します。 このコードは以前に作成したタスク・ハンドラー EJB モジュールと同じアプリケーションに共存する必要があります。
    // Assume that a scheduler has already been looked-up in JNDI.
    BeanTaskInfo taskInfo = (BeanTaskInfo) scheduler.createTaskInfo(BeanTaskInfo.class)
    
    wsadmin ツールを使用して、以下の JACL スクリプト例のようにインスタンスを作成することもできます。
    set taskHandlerHomeJNDIName ejb/MyTaskHandler
    
    # Map the JNDI name to the mbean name.  The mbean name is formed by replacing the / in the jndi name
    # with . and prepending Scheduler_
    regsub -all {/} $jndiName "." jndiNameset mbeanName Scheduler_$jndiName
    
    puts "Looking-up Scheduler MBean $mbeanName"
    set sched [$AdminControl queryNames WebSphere:*,type=WASScheduler,name=$mbeanName]
    puts $sched
    
    # Get the ObjectName format of the Scheduler MBean
    set schedO [$AdminControl makeObjectName $sched]
    
    # Create a BeanTaskInfo object using invoke_jmx
    puts "Creating BeanTaskInfo"
    set params [java::new {java.lang.Object[]} 1]
    $params set 0 [java::field com.ibm.websphere.scheduler.BeanTaskInfo class]
    
    set sigs [java::new {java.lang.String[]} 1]
    $sigs set 0 java.lang.Class
    
    set ti [$AdminControl invoke_jmx $schedO createTaskInfo $params $sigs]
    set bti [java::cast com.ibm.websphere.scheduler.BeanTaskInfo  $ti]
    puts "Created the BeanTaskInfo object: $bti"
    
    注: BeanTaskInfo オブジェクトを 作成しても、タスクはパーシスタント・ストアに追加されません。 その代わり、必要なデータのプレースホルダーが作成されます。 タスクがパーシスタント・ストアに追加されるのは、Scheduler に対して create() メソッドが 呼び出された後になります (トピックスケジューラーへのタスクのサブミットを参照)。
  4. BeanTaskInfo オブジェクトのパラメーターを設定します。 これらのパラメーターは、どの Session Bean がいつ呼び出されるかを定義します。TaskInfo インターフェースには タスクの実行を制御するための set() メソッドが各種用意されており、いつタスクを実行し、実行時にどのような処理を行うかなどを 設定できます。

    BeanTaskInfo インターフェースでは、setTaskHandler メソッドを使用して、TaskHandler JNDI 名または TaskHandlerHome を 設定する必要があります。 タスク・ハンドラーの設定に WASScheduler MBean API を使用する場合は、 JNDI 名が完全修飾のグローバル JNDI 名である必要があります。

    TaskInfo インターフェースでは追加の制御点も指定されています。これについては、API 文書を参照してください。

    以下のコード例に示すように、TaskInfo interface API メソッドを使用してパラメーターを設定します。
    //create a date object which represents 30 seconds from now
    java.util.Date startDate = new java.util.Date(System.currentTimeMillis()+30000);
    
    //find the session bean to be called when the task executes
    Object o = new InitialContext().lookup("java:comp/env/ejb/MyTaskHandlerHome");
    TaskHandlerHome home = (TaskHandlerHome)javax.rmi.PortableRemoteObject.narrow(o,TaskHandlerHome.class);
    
    //now set the start time and task handler to be called in the task info
    taskInfo.setTaskHandler(home);
    taskInfo.setStartTime(startDate);
    以下の JACL スクリプト例を使用してパラメーターを設定することもできます。
    # Setup the task 
    puts "Setting up the task..."
    # Set the startTime if you want the task to run at a specific time, for example:
    $bti setStartTime [java::new {java.util.Date long} [java::call System currentTimeMillis]]
    
    # Set the StartTimeInterval so the task runs in 30 seconds from now
    $bti setStartTimeInterval 30seconds
    
    # Set JNDI name of the EJB which will get called when the task runs.  Since there is no
    # application J2EE Context when the task is created by the MBean, this must be a 
    # global JNDI name. 
    $bti setTaskHandler $taskHandlerHomeJNDIName
    
    # Do not purge the task when it's complete
    $bti setAutoPurge false
    
    # Set the name of the task.  This can be any string value.
    $bti setName Created_by_MBean
    
    # If the task needs to run with specific authorization you can set the tasks Authentication Alias
    # Authentication aliases are created using the Admin Console.
    # $bti setAuthenticationAlias {myRealm/myAlias}
    
    puts "Task setup completed."
    

結果

BeanTaskInfo オブジェクトが作成されて、EJB メソッドの呼び出しに関連するデータがすべて格納されます。

次の作業

スケジューラーにタスクの作成を サブミットします (トピックスケジューラーへの タスクのサブミットを参照)。



関連概念
スケジューラーを使用したタスク管理メソッド
関連タスク
Java Message Service メッセージを送信するタスクの開発
スケジューラー通知の受信
スケジューラーの管理
関連資料
スケジューラー・インターフェース
タスク・トピック    

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

最終更新: Jan 21, 2008 10:52:11 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.zseries.doc/info/zseries/scheduler/tasks/tsch_schedulebtask.html