我的應用程序中實現了一個任務調度器。基本上,我所做的是安排一些任務在一天內執行4次(如6小時內執行6次),因此係統會將其安排到:00:00,06:00,12:00,18:00。WebappClassLoader.loadClass中的非法訪問
好吧,我有一個擴展了Thread類的類(FlowJobController),並且在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()返回將要執行的記錄,它進入而並出現進行錯誤: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();
我到底做錯了什麼?
聽起來像你的'wfr.com.Job'類沒有可能進入你的戰爭或其他發行包。 – Gray
...或者您的Web應用程序已停止/取消部署,但您的線程仍在運行。 –
好吧,這聽起來不可能(不參加戰爭),因爲我正在運行到eclipse環境中,它在類文件夾目錄中,並且沒有顯示有關找不到這些類的錯誤... 關於「web應用程序「已停止,我不知道是什麼導致它 – Saeger