Gwt 石英调度器不在战争中运行
我正在gwt web应用程序中使用quartz调度程序。我的应用程序结构如下所示 我有两个项目。一个是gwt web应用程序客户端项目(用于ui部分),另一个是用于服务器端调用的java项目(用于数据库交互)。在客户端项目中,我放置了一个服务器项目作为参考。在运行时,我从客户端创建了一个war,并将服务器项目的jar添加到war文件夹中 现在我在服务器端使用调度器来自动完成一些任务。在本地运行时(没有war),调度器工作正常 但在jboss服务器上运行war时,调度程序没有运行 我所有与调度程序相关的代码和Quartz.jar都在服务器端。在客户端项目中没有任何关于Quartz的参考。这就是问题所在吗 这是我的调度程序代码Gwt 石英调度器不在战争中运行,gwt,jboss,scheduling,quartz-scheduler,Gwt,Jboss,Scheduling,Quartz Scheduler,我正在gwt web应用程序中使用quartz调度程序。我的应用程序结构如下所示 我有两个项目。一个是gwt web应用程序客户端项目(用于ui部分),另一个是用于服务器端调用的java项目(用于数据库交互)。在客户端项目中,我放置了一个服务器项目作为参考。在运行时,我从客户端创建了一个war,并将服务器项目的jar添加到war文件夹中 现在我在服务器端使用调度器来自动完成一些任务。在本地运行时(没有war),调度器工作正常 但在jboss服务器上运行war时,调度程序没有运行 我所有与调度程序
public class QuartzJob implements Job {
public void execute(JobExecutionContext jobExecutionContext)
throws JobExecutionException {
JobDataMap map = jobExecutionContext.getJobDetail().getJobDataMap();
ActivityTransactionSettingsMap map2 = (ActivityTransactionSettingsMap) map
.get("task");
if (map2.getAutoCompleteDate() != null) {
WorkFlowFacade facade = new WorkFlowFacade();
facade.completeAutoCompleteTask(map2);
Scheduler scheduler=(Scheduler) map.get("scheduler");
try {
scheduler.shutdown();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
}
或者我需要只在客户端转移与调度程序相关的项目吗??
我不知道如何解决这个问题。
请帮帮我要让计划程序运行,应该有一些东西启动它。我不确定这个过程是如何发生的,但是您可以在servlet中编写这个调度程序
public class MySchedulerServlet extends GenericServlet {
private static final long serialVersionUID = 1477091380142883153L;
/**
* Constant to represent property for the cron expression.
*/
private static final String CRON_EXPRESSION = "0 0 0 ? * SUN";
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
// The Quartz Scheduler
Scheduler scheduler = null;
try {
// Initiate a Schedule Factory
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
// Retrieve a scheduler from schedule factory
scheduler = schedulerFactory.getScheduler();
// Initiate JobDetail with job name, job group and
// executable job class
JobDetail jobDetail = new JobDetail("RetryJob", "RetryGroup", QuartzJob.class);
// Initiate CronTrigger with its name and group name
CronTrigger cronTrigger = new CronTrigger("cronTrigger",
"triggerGroup");
// setup CronExpression
CronExpression cexp = new CronExpression(CRON_EXPRESSION);
// Assign the CronExpression to CronTrigger
cronTrigger.setCronExpression(cexp);
// schedule a job with JobDetail and Trigger
scheduler.scheduleJob(jobDetail, cronTrigger);
// start the scheduler
scheduler.start();
} catch (Exception e) {
e.printStackTrace();
}
}
public void service(ServletRequest serveletRequest,
ServletResponse servletResponse) throws ServletException, IOException {
}
}
在web.xml中,启动时加载sceduler。这对我有用
<servlet>
<servlet-name>QuartzInitializer</servlet-name>
<servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
<init-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>start-scheduler-on-load</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-name>MySchedulerServlet </servlet-name>
<servlet-class>com.servlet.MySchedulerServlet </servlet-class>
<load-on-startup>2</load-on-startup>
石英初始化器
org.quartz.ee.servlet.QuartzInitializerServlet
卸载时关机
真的
加载时启动调度程序
真的
1.
MySchedulerServlet
com.servlet.MySchedulerServlet
2.
我在本例中使用了线程
public class AutoCompleteTaskThread extends Thread {
private ActivityTransactionSettingsMap taskMap;
public AutoCompleteTaskThread(ActivityTransactionSettingsMap map) {
this.taskMap = map;
}
@Override
public void run() {
try {
new AutoCompleteTaskScheduler().ScheduleJob(taskMap);
} catch (Exception e) {
e.printStackTrace();
}
}
}
如下所示,在本地计算机中,它工作正常。但对于jboss服务器,它不工作。我使用了AutoCompleteTaskThread类的一个实例,并在此基础上调用了start方法
private void addAutoCompleteTask(ActivityTransactionSettingsMap newTask) {
AutoCompleteTaskThread thread = new AutoCompleteTaskThread(newTask);
thread.start();
}
在这里,我为我想要启动新线程的任何新任务启动了一个线程。据我所知,调度程序与您的GWT代码无关。调度程序的触发器是什么?这是触发器。Trigger Trigger=newTrigger().withIdentity(“Trigger”).startAt(tomaroDate.build();我不知道你来了。它应该从第二天开始连续运行吗?这就是你需要的吗?这只是一个示例…它将在特定日期开始。同样的问题是,谁在调用线程的start方法?
private void addAutoCompleteTask(ActivityTransactionSettingsMap newTask) {
AutoCompleteTaskThread thread = new AutoCompleteTaskThread(newTask);
thread.start();
}