本文来自:http://hi.baidu.com/fuqilee/blog/item/59888bfb7439a82b4f4aeac8.html
IBM WebSphere Application Server Scheduler
ibm WebSphere Application server Scheduler 是一种功能全面的定时器服务,提供了在 WebSphere Application server 中配置、管理和开发基于时间的工作任务的功能,能够使 J2EE 操作具有高性能、持久性以及事务性等特征。Scheduler 具有以下优点:
- 易于管理
Scheduler 的创建、更新、调度、验证以及监控等任务是 WebSphere Application server 中的管理控制台进行配置的,可在单个服务器 、集群、节点或单元中创建 Scheduler。每个配置后的 Scheduler 拥有唯一的 JNDI 名称、持久存储 设备和守护程序。
图 1. WebSphere Application Server 管理控制台中的 Scheduler 配置面板 - 具有持久性和事务健壮性
Scheduler 任务可以通过存入关系数据库的方式被持久化,因此可以保证长期多次的运行。轮询守护程序使用这个数据库来确定哪些任务要运行以及什么时候运行。
- 具有灵活的时间定制方式
Scheduler 任务依据用户指定的日历在某一时间开始执行一次或多次任务,用户可根据需要订制自己的日历。
- 具有扩展性
当 Scheduler 服务运行于集群环境的时候,可以通过负载均衡管理提高性能和可用性。
图 2. 集群环境中的 Scheduler
使用 WebSphere Application server Scheduler 服务可通过以下三个步骤:
- 在 WebSphere Application server 管理控制台配置 Scheduler 服务;
- 开发调用 Scheduler 服务代码;
- 部署;
Scheduler 服务可由以下两种方式调用:调用会话 Bean 的任务,发送 Java 消息的服务。本文中使用调用会话 Bean 的任务说明如何调用 Scheduler 服务。
- 创建一个 EJB 项目用以开发由会话 Bean 实现的任务,在 EJB Module 中创建一个无状态 Session Bean(ScheduledTask),在部署描述符中添加 com.ibm.websphere.scheduler.TaskHandlerHome 和 com.ibm.websphere.scheduler.TaskHandler 作为远程 Home 接口和远程接口。
- 实现 ScheduledTask 的 process 方法。
… public void process(TaskStatus status) { Date timeValue = new Date(); system.out.println("In process method, time is " + timeValue.toString()); } …
- 在需要调用 Scheduler 服务的方法中查找 Scheduler,创建 BeanTaskInfo 实例并启动 scheduler。
// 在J2EE上下文环境中查找scheduler Scheduler scheduler = (Scheduler) new InitialContext.lookup("java:comp/env/sched/MyTestScheduler"); Object o = ctx.lookup("ejb/com/test/ScheduledTask"); TaskHandlerHome home = (TaskHandlerHome)javax.rmi.PortableRemoteObject.narrow(o, TaskHandlerHome.class); // 设置任务启动时间 java.util.Date startDate = new java.util.Date(System.currentTimeMillis()+3000); // 设置BeanTaskInfo BeanTaskInfo taskInfo = (BeanTaskInfo) scheduler.createTaskInfo(BeanTaskInfo.class); taskInfo.setName("testTask"); taskInfo.setTaskHandler(home); taskInfo.setStartTime(startDate); taskInfo.setRepeatInterval("600seconds"); taskInfo.setNumberOfRepeats(-1); //重复直至任务被取消 taskInfo.setQOS(BeanTaskInfo.QOS_ATLEASTONCE); // 启动scheduler和任务 TaskStatus status = scheduler.create(taskInfo);
WebSphere Application server Scheduler 易于管理,具有持久性和事务性,可扩展,可应用于集群环境,为 J2EE 应用提供了功能全面的计时器服务,但由于它与 WebSphere Application server 的紧耦合关系,降低了它的灵活性,造成了一定的局限。