WebappClassLoader.loadClass中的非法访问

时间:2012-09-25 15:21:20

标签: java multithreading classloader

我在我的应用程序中实现了一个任务调度程序。基本上,我所做的是安排一些任务在一天内执行4次(如6小时内6次),因此系统将其安排到:00:00,06:00,12:00,18:00。

好的,我有一个类(FlowJobController),它扩展了Thread类,在run()实现中,我在60到60秒内保持睡眠状态,所以再次执行它以检查是否有任何要执行的任务。如果是的话,我就是我的工作。

基本上是它的主要部分:

rSet = pStmt.executeQuery();
while (rSet.next()) {
  long jobId = rSet.getLong("trf_codigo");
  String ruleName = rSet.getString("reg_nome");
  String ruleParameters = rSet.getString("trf_regra_parametros");

  Job job = new Job();
  job.setId(jobId);
  job.setRuleName(ruleName);
  job.setParameters(Functions.stringToList(ruleParameters, "\n"));

  FlowJob flowJob = new FlowJob(this, job);
  flowJob.start();
}
} catch (Exception ex) {
 logger.error(WFRSystem.DEFAULT_USER, system.getCode(), ex);
} finally {
  try {
    DBConnection.close(pStmt);
    DBConnection.close(rSet);

    // executede 60 in 60 sec
      Thread.sleep(60 * 1000);
  } catch (InterruptedException ex) {
      logger.error(WFRSystem.DEFAULT_USER, system.getCode(), ex);
  }
}

问题是:当pStmt.executeQUery()返回要执行的记录时,它会进入while并且错误出现在行中:Job job = new Job();

错误是:

Exception in thread "FlowJobController" java.lang.NoClassDefFoundError: wfr/com/Job
at wfr.com.FlowJobController.run(FlowJobController.java:112)

在此错误之前我收到此错误:

25/09/2012 12:00:09 org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already.  Could not load wfr.com.Job.

最终跟踪堆栈跟踪是由于出于调试目的而抛出的错误以及尝试终止导致非法访问的线程而引起的,并且没有任何功能影响。

java.lang.IllegalStateException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1566)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at wfr.com.FlowJobController.run(FlowJobController.java:112)

FlowJobController.java:112是Job job = new Job();

我做错了什么?

1 个答案:

答案 0 :(得分:0)

  

最终跟踪堆栈跟踪是由于出于调试目的而抛出的错误以及尝试终止导致非法访问的线程而引起的,并且没有任何功能影响。

如果您说您的代码故意抛出IllegalStateException异常,那么这可能是导致后续问题的原因。如果在静态初始化中抛出uncheck异常,并且该异常传播,则类初始化失败,并且类(以及依赖于它的所有类)都不可用。在这种情况下,它看起来也导致webapp停止。

如果这是问题,解决方案是“不要那样做”。修复导致抛出异常的任何内容。


另一种可能性是,这只是一个缺失的课程问题:

  

嗯,这听起来不可能(不参加战争)因为我正在进入eclipse环境并且它在类文件夹目录中并且没有显示关于没有找到这些类的错误...

类加载器不会查看Eclipse classes文件夹。它将查看Web容器上的webapp目录(Tomcat,Jetty,无论如何)。