안녕하세요 모두 난 클래스가 초기화 메소드를 xml불법 액세스 :이 웹 응용 프로그램 인스턴스가 이미 중지되었습니다.
<bean id="appStarter" class="com.myapp.myClass" init-method="init" destroy-method="destroy"/>
<bean id="appStarter" class="com.myapp.myClass" init-method="init" destroy-method="destroy"/>
myClass :
public class myClass{
private Thread t;
public void init() {
t = new Thread() {
@Override
public void run() {
while (true)
try {
doStuff();
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
};
t.start();
}
public void destroy() {
t.interrupt();
}
}
이 응용 프로그램을 시작할 때이 스레드가 잘 실행되는 및 모든 일을 잘 및 언젠가 후에 작동합니다. 나는 다음과 같은 예외가있어
INFO: Illegal access: this web application instance has been stopped already. Could not load com.sun.mail.imap.IMAPStore. 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:1273)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at javax.mail.Session.getService(Session.java:755)
at javax.mail.Session.getStore(Session.java:569)
at javax.mail.Session.getStore(Session.java:531)
at javax.mail.Session.getStore(Session.java:510)
doStuff 메서드 :
public void doStuff(){
Session sessioned = Session.getDefaultInstance(System.getProperties(),
null);
Store store = sessioned.getStore("imap");
store.connect(hostName, userName, password);
.
.
.
}
왜 어떤 아이디어를 모르겠습니까?
어떻게 이것을 영구히 고칠 수 있습니까? 이 문제의 근본 원인은 무엇입니까? 왜냐하면 내 제작 응용 프로그램이 충돌하기 때문입니다. 나는 항상 서버를 다시 시작하고 싶지 않습니다. 도움이 필요합니다. – vissu
두 번째로 Tomcat을 다시 시작하면 문제가 사라집니다. – Gruber
이것은 hotdeployment 문제 + 이미 시작된 스레드 일 가능성이 큽니다. 아마도 자신의 스레드가 아닌 타사 라이브러리의 스레드 일 것입니다. [내 대답을 참조하십시오] (http://stackoverflow.com/a/41503819/1075524). –