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

スケジューラー API および WASScheduler MBean API は、 TaskInfo インターフェースの各種実装をサポートしています。 これらの実装はそれぞれ特定のタイプの作業のスケジューリングに使用することができます。

このタスクについて

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

手順

  1. Enterprise JavaBeans (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 Java™ Naming and Directory Interface (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 starts
    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 メソッドの呼び出しに関連するデータがすべて格納されます。

次のタスク

スケジューラーにタスクの作成をサブミットします。

トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsch_schedulebtask
ファイル名:tsch_schedulebtask.html