quartz的job重新部署问题解决

  在weblogic平台上重新编译job并重新部署到weblogic后,默认情况下quartz不运行新job,还是运行以前的job,只是由于weblogic平台在重新部署类文件时他会破坏原来web应用的classload,而是为web应用建立新的classloader,所以getServletContext().getAttribute(QuartzInitializerServlet.QUARTZ_FACTORY_KEY, stdSchedulerFac)会得到java.lang.ClassCastException
        at jsp_servlet.__index._jspService(__index.java:158)
        at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
        at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:996)
        at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
        at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:315)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6452)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
        at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3661)
        at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2630)
        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)

类找不到的事情发生。

解决重新加载quartz办法:   
    Thread[] td = new Thread[Thread.activeCount()];
    int leng = Thread.enumerate(td);
    for (int i = 0; i < leng; i++) {
      if (!td[i].getName().startsWith("TestScheduler")) {
        continue;
      }
      td[i].stop();
    }

StdSchedulerFactory stdSchedulerFac = null;


try{
 stdSchedulerFac = (StdSchedulerFactory)application.getAttribute(QuartzInitializerServlet.QUARTZ_FACTORY_KEY);
}catch(Exception e) {
 stdSchedulerFac = null;
 e.printStackTrace();
}

if (stdSchedulerFac != null) {
 Scheduler scheduler = stdSchedulerFac.getScheduler();
 scheduler.shutdown(true);
 
}

stdSchedulerFac = new StdSchedulerFactory("quartz.properties");
 
Scheduler scheduler = stdSchedulerFac.getScheduler();
scheduler.start();
session.getServletContext().setAttribute(QuartzInitializerServlet.QUARTZ_FACTORY_KEY, stdSchedulerFac);


out.println("=========================================<br>");
out.println("当前线程数:"+Thread.activeCount()+"<br>");
out.println("=========================================<br>");
td = new Thread[Thread.activeCount()];
leng = Thread.enumerate(td);
for (int i = 0; i < leng; i++) {
  out.println(td[i].hashCode()+"####");
  out.println( td[i].getName()+"####");


//  out.println(td[i].toString());
  out.println("<br>");
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值