スケジューラーは、いくつかのタスク管理メソッドを備えています。
//Create the task. TaskInfo taskInfo = ... TaskStatus status = scheduler.create(taskInfo); //Get the task ID String taskId = status.getTaskId(); //Cancel the task. Specify the purgeAlso flag so that the task does not remain in the persistent store scheduler.cancel(taskId,true);
set jndiName sched/MyScheduler # 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 TaskInfo object… # (Some code excluded…) set params [java::new {java.lang.Object[]} 1] $params set 0 $taskInfo set sigs [java::new {java.lang.String[]} 1] $sigs set 0 com.ibm.websphere.scheduler.TaskInfo set taskStatus [java::cast com.ibm.websphere.scheduler.TaskStatus [$AdminControl invoke_jmx $schedO create $params $sigs]] set taskID [$taskStatus getTaskId] puts "Task Created. TaskID= $taskID" # Cancel the task using the Task ID from the TaskStatus object returned during create. set params [java::new {java.lang.Object[]} 1] $params set 0 false set sigs [java::new {java.lang.String[]} 1] $sigs set 0 java.lang.boolean set taskStatus [java::cast com.ibm.websphere.scheduler.TaskStatus [$AdminControl invoke_jmx $schedO cancel $params $sigs]]
トランザクション。 スケジューラー API のメソッドは、すべてトランザクションです。 グローバル・トランザクション・コンテキストが存在する場合は、これを使用して操作が行われます。予期しない例外がスローされた場合には、 トランザクションにロールバックのマークが付けられるため、呼び出し元では適切な処理を行う必要があります。 予期された 例外または宣言された例外がスローされた場合、トランザクションは維持され、呼び出し元はロールバックを行うか、または トランザクションをコミットするかを選択する必要があります。 いずれかの時点でトランザクションがロールバックされると、 そのトランザクション内で実行されたスケジューラー操作もすべてロールバックされます。
ローカル・トランザクション ・コンテキストが存在する場合は、これが中断され、新規のグローバル・トランザクション・コンテキストが開始されます。 同様に、 アクティブなトランザクション・コンテキストがない場合は、グローバル・トランザクション・コンテキストが開始されます。いずれの場合も、 予期しない例外がスローされると、トランザクションはロールバックされます。 宣言された例外がスローされると、トランザクションは コミットされます。
当該タスクを別のスレッドが同時に修正している 場合は、TaskPending 例外がスローされます。 これは、スケジューラーがデータベースをオプティミスティックにロックするためです。その後、呼び出し元のアプリケーションは、操作を再試行できます。
タスクが現在実行中の場合には、タスク管理機能がブロックすることがあります。 スケジューラーによって各タスクが一度だけ実行されるため、タスクの実行中には他のタスクをロックする必要があります。 同様に、管理機能の 1 つを使用してタスクを変更したにもかかわらず、グローバル・トランザクションがコミットされない場合も、そのタスクの 別のトランザクションから発行された他の管理機能がすべてブロックされます。
Stateless Session Bean タスクの TaskHandler.process() メソッドは、自身の状態を変更できます。 ただし、このタスクは、スケジューラーと同じトランザクション内で実行する必要があります。したがって、 実行中のタスクに変更を加える ことができるのは、コンテナー管理トランザクション・タイプとして、Required または Mandatory を 使用している場合のみです。Requires New トランザクション・タイプが process() メソッドに指定されている場合には、すべての管理機能が デッドロックします。
スケジューラー API によって定義されているすべてのメソッドについて詳しくは、API 文書を参照してください。