Quartz配置任务报错 Job class must implement the Job

Joker316701882 2016-07-28 04:13:31
最近在做一个java web小框架,功能是从web页面上传一个jar包,并输入需要执行的这个包里的类的方法和执行时间,服务器动态加载这个包,通过Quartz启动这个jar包里的任务。
这是用来上传的jar包里的类

public class MainJob implements Job {

@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("Job excuting...");
}
}

下面是用来响应上传动作的servlet
	public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String job_file=(String) request.getAttribute("job_file");
String job_name=(String) request.getAttribute("job_name");
String job_trigger=(String) request.getAttribute("job_trigger");
String job_group=(String) request.getAttribute("job_group");
URL[] urls = new URL[] {};
MyClassLoader classLoader = new MyClassLoader(urls, null);
classLoader.addJar(new URL("file:D:/tomcat/apache-tomcat-7.0.70/webapps/hyde-parachute-jobupload/WEB-INF/upload/"+job_file));
try {
Class<? extends Job> clazz =(Class<? extends Job>) classLoader.loadClass((String) request.getAttribute("job_class"));
System.out.println(clazz.toString());
for (Object o:clazz.getGenericInterfaces())
{
System.out.println(o.toString());
}

//SetQuartzJob 实例化的调度器为scheduler


JobDetail job = JobBuilder.newJob(clazz)
.withIdentity("job1", "group1")
.build();
CronTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("0/1 * * * * ?"))
.build();
scheduler.scheduleJob(job, trigger);
scheduler.start();

} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



classLoader.close();
request.getRequestDispatcher("/message.jsp").forward(request, response);
}

主要是红色的那一块,我明明已经通过classload动态加载了上传的jar包,并且那个包里的MainJob是实现了job接口的。但是
newJob()在执行时总是抛出异常
严重: Servlet.service() for servlet [UploadHandleServlet] in context with path [/hyde-parachute-jobupload] threw exception
java.lang.IllegalArgumentException: Job class must implement the Job interface.
at org.quartz.impl.JobDetailImpl.setJobClass(JobDetailImpl.java:311)
at org.quartz.JobBuilder.build(JobBuilder.java:103)
at com.classloader.DynamicLoadJar.doGet(DynamicLoadJar.java:79)
at com.classloader.DynamicLoadJar.doPost(DynamicLoadJar.java:116)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:747)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:485)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:410)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:337)
at com.upload.UploadHandleServlet.doGet(UploadHandleServlet.java:120)
at com.upload.UploadHandleServlet.doPost(UploadHandleServlet.java:125)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1082)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:623)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2517)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2506)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
绿色的代码段已经打印出来了这个clazz确实实现了job接口,以下是打印内容:
interface org.quartz.Job
。所以出现这个运行时错误很不能理解,希望哪位大神能够解答,不胜感激!
...全文
1886 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ydw_武汉 2017-03-02
  • 打赏
  • 举报
回复 1
没有实现或者是继承定时类
Munger6 2017-03-02
  • 打赏
  • 举报
回复
如果实现了的话,检查一下是否在WEB-app中和其他library中导入了重复的夹报路径;

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧