0

Quartzジョブをクラスパスに動的に追加できるように動的Webプロジェクトをデプロイしようとしています。これが私の考えです。

'完全修飾クラスパスを含むXMLファイルから構成を読み取り、クラスでClass.forName()を使用して、構成XMLからそのクラスのインスタンスを作成すると、Tomcatに配置された動的に追加されたクラスにアクセスできるようになります。 TOMCAT_HOME/libディレクトリ'。

この更新の前は、アプリケーションは正常に機能していましたが、これらの新しく外部化されたクラスが戦争に含まれていました。ただし、次の理由により、これを行うことはできなくなりました。

  1. 新しい仕事が必要になるたびに戦争を再展開したくない。
  2. 継続的に実行する必要のあるジョブがあるため、サーバーを停止して新しいジョブを追加することはできません。

ただし、class.forName()メソッドを実行すると、NoClassDefFoundErrorが発生します。私はすでにcatalina.propertiesで、Tomcatのlibディレクトリがcommon.loaderプロパティにあることを確認しました。

私の質問は、Tomcat共通ライブラリのjar内のクラスをWARクラスに認識させるにはどうすればよいかということです。何か案は?ありがとう。

添加:

@BalusC:私は実際に、ユーザーがXML構成ファイルを編集して新しいジョブを追加できるWebベースの管理画面をすでに開発しました。ただし、ジョブの別のインスタンスだけでなく、まったく新しいジョブを追加するには、この新しいジョブのコード定義が必要です。これをjarファイルに配置して、tomcat libディレクトリにドロップし、class.forName()で取得できるようにします。

4

1 に答える 1

0

うまくいけば、Tomcat はコンテキストを自動的にリロードしたり、クラスローダーに jar を自動的にロードしたりしません。制御不能な動作を引き起こす可能性があります。

WebAppClassLoaderを介して jar を明示的にロードしないと、(Tomcat コンテキストごとに管理されるクラス) でこれらの新しいクラスにアクセスすることはできませんURLClassLoader。jar への絶対パスを使用することをお勧めします。いくつかの暗い理由で、相対パスに問題がありました。

Tomcat のインストール パスと、たとえば lib ディレクトリを知りたい場合は、環境変数catalina.homecatalina.base環境変数を使用できます。

ハイ

于 2012-12-10T20:15:28.487 に答える