0

アプリケーションにタスク スケジューラを実装しています。基本的に、あるタスクを 1 日に 4 回 (6 時間で 6 回など) 実行するようにスケジュールすることで、システムはそれを 00:00、06:00、12:00、18:00 にスケジュールします。

OK、Thread クラスを拡張するクラス (FlowJobController) があり、run() 実装では 60 秒から 60 秒でスレッドをスリープ状態にしておくため、実行するタスクがあるかどうかを確認するために再度実行されます。true の場合、ジョブを実行します。

基本的にそれの主要部分:

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();

私は何を間違っていますか?

4

1 に答える 1

0

最終的な後続のスタックトレースは、デバッグ目的でスローされたエラーと、不正アクセスの原因となったスレッドを終了しようとしたために発生し、機能に影響を与えません。

コードが意図的に例外をスローしたと言っている場合はIllegalStateException、それがその後の問題の原因である可能性があります。静的初期化でチェックを外した例外をスローし、その例外が伝播すると、クラスの初期化は失敗し、クラス(およびそれに依存するすべてのクラス)は使用できなくなります。この場合、Webアプリも停止したようです。

これが問題である場合、解決策は「それをしない」です。例外がスローされる原因となっているものを修正します。


もう1つの可能性は、これが単にクラスの欠落の問題であるということです。

ええと、私は日食環境に出くわしていて、それはクラスフォルダディレクトリにあり、それらのクラスが見つからないことについてのエラーは表示されないので、それは不可能に聞こえます(戦争に参加していないため)...

クラスローダーは、Eclipseクラスフォルダーを検索しません。Webコンテナ(Tomcat、Jettyなど)のwebappディレクトリを検索します。

于 2012-09-25T15:36:52.467 に答える