У меня есть проект JSF2 с Spring. Он разработан на затмении с прикрепленным к нему котом. Это довольно просто и в основном с настройками по умолчанию.
Но у нас есть несколько фоновых потоков, которые выглядят так:
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()
:
<bean
id="crawlingService"
class="com.berggi.myjane.service.CrawlingServiceImpl"
autowire="byName"
scope="singleton"
destroy-method="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, что совершенно нормально.
Есть идеи?