在 J2EE 环境中管理 Cron4J 调度程序
Managing Cron4J Scheduler within J2EE Environment
我的团队创建了一个 Web 应用程序,我们希望将其与任务计划程序相关联,如果通过该 Web 应用程序 运行 的任何项目是 运行落后于计划。
我们正在使用的调度程序库 Cron4j 非常简单,目前我们正在尝试通过一组 Web 服务调用来管理它,就像这样(想法是我们启动调度程序并持续 运行s 指定时间或直到我们停止它):
public SchedulerResource(){
s = new Scheduler();
}
@GET
@Path("start")
@Produces(MediaType.APPLICATION_JSON)
public Response invoke_workback_communicator() throws MalformedURLException {
s.schedule("* * * * *", new Runnable() {
public void run() {
WorkbackCommunicator communicator = new WorkbackCommunicator();
communicator.run();
}
});
s.start();
try {
Thread.sleep(1000L * 60L * 2L);
} catch (InterruptedException e) {
;
}
s.stop();
return Response.noContent().build();
}
@GET
@Path("stop")
@Produces(MediaType.APPLICATION_JSON)
public Response stop_workback_communicator() throws MalformedURLException {
s.stop();
return Response.noContent().build();
}
目前'invoke_workback'方法可以,'stop_workback'方法不行
我比较好奇的是:
- 在 Web 服务中调用调度程序是否像这种不良做法?
- 如果是这样,如何有效地实现这一功能?
- 如果没有,我怎样才能创建一个管理我的调度程序实例的服务接口?这还有必要吗?
编辑:
进一步研究了这个问题,我注意到有一个叫做 'ServletContextListener' 的东西可以用来在服务器启动和关闭时启动或终止调度程序。所以我现在想的是测试该功能,并保留我们的服务,这将允许我们在应用程序仍处于 运行ning 时管理调度程序。
我仍然对这个主题的一些外部观点感兴趣,但是我们确实找到了一个看起来会相当有效的解决方案。我们所做的是实现一个 'ServletContextListener',它在服务器启动时在上下文启动时启动我们的调度程序,并在服务器停止时在上下文销毁时停止调度程序。
我们只需将侦听器作为条目添加到我们项目的 WEB-INF 文件夹中的 web.xml 文件中:
<listener>
<listener-class>com.mmm.marketing.utils.SchedulerServletContextListener</listener-class>
</listener>
我们还编写了一个 Web 服务,允许我们根据需要手动停止和启动调度程序单例。
我的团队创建了一个 Web 应用程序,我们希望将其与任务计划程序相关联,如果通过该 Web 应用程序 运行 的任何项目是 运行落后于计划。
我们正在使用的调度程序库 Cron4j 非常简单,目前我们正在尝试通过一组 Web 服务调用来管理它,就像这样(想法是我们启动调度程序并持续 运行s 指定时间或直到我们停止它):
public SchedulerResource(){
s = new Scheduler();
}
@GET
@Path("start")
@Produces(MediaType.APPLICATION_JSON)
public Response invoke_workback_communicator() throws MalformedURLException {
s.schedule("* * * * *", new Runnable() {
public void run() {
WorkbackCommunicator communicator = new WorkbackCommunicator();
communicator.run();
}
});
s.start();
try {
Thread.sleep(1000L * 60L * 2L);
} catch (InterruptedException e) {
;
}
s.stop();
return Response.noContent().build();
}
@GET
@Path("stop")
@Produces(MediaType.APPLICATION_JSON)
public Response stop_workback_communicator() throws MalformedURLException {
s.stop();
return Response.noContent().build();
}
目前'invoke_workback'方法可以,'stop_workback'方法不行
我比较好奇的是:
- 在 Web 服务中调用调度程序是否像这种不良做法?
- 如果是这样,如何有效地实现这一功能?
- 如果没有,我怎样才能创建一个管理我的调度程序实例的服务接口?这还有必要吗?
编辑:
进一步研究了这个问题,我注意到有一个叫做 'ServletContextListener' 的东西可以用来在服务器启动和关闭时启动或终止调度程序。所以我现在想的是测试该功能,并保留我们的服务,这将允许我们在应用程序仍处于 运行ning 时管理调度程序。
我仍然对这个主题的一些外部观点感兴趣,但是我们确实找到了一个看起来会相当有效的解决方案。我们所做的是实现一个 'ServletContextListener',它在服务器启动时在上下文启动时启动我们的调度程序,并在服务器停止时在上下文销毁时停止调度程序。
我们只需将侦听器作为条目添加到我们项目的 WEB-INF 文件夹中的 web.xml 文件中:
<listener>
<listener-class>com.mmm.marketing.utils.SchedulerServletContextListener</listener-class>
</listener>
我们还编写了一个 Web 服务,允许我们根据需要手动停止和启动调度程序单例。