使用调度程序的任务管理方法

调度程序提供了多个任务管理方法。

通过调用调度程序中的 create() 方法创建了任务后,将把一个 TaskStatus 对象返回给调用者。TaskStatus 对象包含任务标识(它是一个唯一标识)。Scheduler API 和 WASScheduler MBean 定义了与任务管理相关的几个其他方法,它们都以参数形式接受任务标识。定义了下列任务管理方法:
suspend()
暂挂一个任务。在继续之前,该任务不会运行。
resume()
继续一个先前暂挂的任务。
cancel()
取消一个任务。该任务不再运行并且无法继续。
purge()
从持久存储中永久删除一个已取消的任务。
getStatus()
返回任务的当前状态。
使用以下 API 示例来创建和取消一个任务:
//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);
在 wsadmin 工具中使用以下示例 JACL 脚本操作来创建和取消一个任务:
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 "." jndiName
set 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]]

事务性。Scheduler API 的所有方法都是事务性的。如果存在一个全局事务上下文,将使用它来执行操作。如果抛出意外异常,将把事务标记为回滚并且调用者必须对它进行适当处理。如果抛出已预期或已声明的异常,事务将保持不变并且调用者必须选择回滚或落实事务。如果在某点回滚事务,将同时回滚该事务中执行的所有调度程序操作。

如果存在一个局部事务上下文,将暂挂它并启动一个新的全局事务上下文。同样,如果不存在活动的事务上下文,将启动一个全局事务上下文。对于这两种情况,如果抛出意外异常,事务将回滚。如果抛出声明异常,将落实事务。

如果另一个线程正在同时修改这一任务,将抛出 TaskPending 异常。这是因为调度程序将有利地锁定该数据库。随后,调用应用程序可以重试此操作。

如果当前正在运行任务,那么可能阻止任务管理功能。因为调度程序将确保各个任务仅运行一次,所以在运行一个任务的过程中将锁定该任务。同样,如果使用某个管理功能更改了一个任务而未落实全局事务,将阻止另一个事务为该任务发出的任何其他管理功能。

无状态会话 Bean 任务的 TaskHandler.process() 方法可以更改自己的状态。但是,此任务必须与调度程序运行于同一事务中。因此,如果一个处于运行状态的任务使用 Required 或 Mandatory 容器管理的事务类型,它只能修改自己的状态。如果在 process() 方法中指定了 Requires New 事务类型,那么所有管理功能将死锁。

API 文档中描述了 Scheduler API 定义的所有方法。


指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=csch_managetask
文件名:csch_managetask.html