我正在使用Jboss-seam 2.2.2,using和我有一些石英工作。在应用程序执行期间,我必须验证是否有特定的作业正在运行。
我已经有权访问这些作业,但每个作业都有一个由quartz创建的名称。下面是seam注入的代码:
@In("org.jboss.seam.async.dispatcher")
private QuartzDispatcher quartzDispatcher;为了获得正在运行的作业,我有以下代码:
Scheduler scheduler = quartzDispatcher.getScheduler();
List<JobExecutionContext> currentJobs;
currentJobs = scheduler.getCurrentlyExecutingJobs();
for (JobExecutionContext jobCtx: currentJobs){
System.out.println(jobCtx.getJobDetail().getName());
}有谁知道如何使用jboss-seam为石英工作命名?我做了一些研究,在jira上找到了这张票:https://issues.jboss.org/browse/JBSEAM-4399
发布于 2013-05-23 23:14:04
Seam为每个作业生成一个基于UUID的唯一名称,没有直接的方法覆盖它。您的替代方案是:
使用找到的补丁,这需要使用您自己的自定义调度程序构建一个自定义代码added.
scheduleWithQuartzService方法并使用您自己的方案命名作业(查看org.jboss.seam.async.QuartzDispatcher的源代码,您将看到它调用了一个为作业生成新的唯一名称的nextUniqueName()方法,您需要从其他地方获取作业名称,最终通过尝试查看作业是否基于其名称运行的annotation).
org.quartz.JobListener的quartz事件侦听器,并在作业开始和结束执行时在全局哈希表或类似的东西中注册。然后在哈希表中查找作业以获取其状态,而不是按名称进行搜索。但是,这仅在您的调度程序未群集时才有效(quartz将仅通知本地节点中的侦听程序,其他节点不会知道作业已被触发)。https://stackoverflow.com/questions/15439658
复制相似问题