私はSpringでJSF2プロジェクトを持っています。それはそれに付随する風猫と日食で開発されています。これはかなり単純で、ほとんどの場合デフォルト設定です。バックグラウンドスレッドのためTomcatがコンテキストをリロードできない
しかし、我々は次のようになり、いくつかのバックグラウンドスレッドを持っている:私はこのすべてを可能にするより良い方法があることを知っている
<bean
id="crawlingService"
class="com.berggi.myjane.service.CrawlingServiceImpl"
autowire="byName"
scope="singleton"
destroy-method="destroy"/>
:
public class CrawlingServiceImpl implements CrawlingService, InitializingBean{
private final Runnable crawlingRunnable = new Runnable() {
@Override
public void run() {
//...
}
};
public void startCrawling() {
crawlingThread = new Thread(crawlingRunnable);
crawlingThread.start();
}
public void stopCrawling(){
if (crawlingThread!=null)
crawlingThread.interrupt();
crawlingThread = null;
}
@Override
public void afterPropertiesSet() throws Exception {
startCrawling();
}
public void destroy(){
stopCrawling();
}
}
はここdestroy()
メソッドを呼び出している人です完了しました。しかし、これは私のコードではなく、私はそれを書き直したくありません。
私の問題は以下の通りです:
: を私は(毎回)クラスを変更したりすると、私は(非常にまれ)サーバは、それをリロードしようとするが、それは次のエラーで失敗したXHTMLファイルを変更したときINFO: Illegal access: this web application instance has been stopped already. Could not load org.apache.xml.dtm.ref.DTMManagerDefault. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1562)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
at org.apache.xml.dtm.ObjectFactory.findProviderClass(ObjectFactory.java:508)
...
at package.CrawlingServiceImpl.crawl(CrawlingServiceImpl.java:92)
at package.CrawlingServiceImpl$1.run(CrawlingServiceImpl.java:39)
at java.lang.Thread.run(Thread.java:680)
注:スタックトレースを確認してください。これらの例外はたくさんあります。
次に、欠落しているjdbcドライバの例外がありますが、これはまったく問題ありません。
アイデア?
のいずれかに適切に死ぬことを拒否している私は弾丸をかむと、それを書き換えたいと思いたいです。これは、実際にJava EE Webアプリケーションでバックグラウンドプロセスを実行する悪い方法です。 – BalusC
私は同僚と議論しなければなりません。ところで、JSFとSpringでバックグラウンドジョブを実装するより良い方法は何ですか? – mist