나는 자바 세계에서 새롭고, 또한 바람둥이 세계에서 새롭다. 따라서 문제는 다음과 같습니다.tomcat을 사용하여 클래스를 데몬으로 설정하는 방법은 무엇입니까?
Java 클래스를 데몬으로 실행해야합니다. 이 클래스는 tomcat 요청과 comunicate 할 수 있어야합니다.
과거에는 C에서이 작업을 수행했을 때 이진 파일을 백그라운드 프로세스로 실행했습니다.
진행 방법을 알려주시겠습니까?
감사합니다.
나는 자바 세계에서 새롭고, 또한 바람둥이 세계에서 새롭다. 따라서 문제는 다음과 같습니다.tomcat을 사용하여 클래스를 데몬으로 설정하는 방법은 무엇입니까?
Java 클래스를 데몬으로 실행해야합니다. 이 클래스는 tomcat 요청과 comunicate 할 수 있어야합니다.
과거에는 C에서이 작업을 수행했을 때 이진 파일을 백그라운드 프로세스로 실행했습니다.
진행 방법을 알려주시겠습니까?
감사합니다.
답변에 두 부분이있는 것 같습니다. 첫 번째는 데몬이 Tomcat 컨테이너로 시작되는지 확인하고 다른 하나는 스레드가 제대로 구성되어 있는지 확인하여 종료 후 tomcat 인스턴스를 활성 상태로 유지하지 못하게하는 것입니다.
스레딩에 관한 부분이 더 간단하기 때문에 먼저 이해할 것입니다. 스폰하는 모든 스레드는 데몬 스레드 여야합니다 (예 : Thread.setDaemon(true)). O'reilly's Exploring Java's Chapter on Threads에서 인용 :
을 많은 경우에, 우리가 정말 원하는 것은 응용 프로그램에서 간단하고,주기적인 작업을 수행 백그라운드 스레드 를 만드는 것입니다. setDaemon() 메소드를 사용하여 다른 응용 프로그램 스레드가 남아 있지 않을 때 이어야하며 삭제되어야하는 스레드를 데몬 스레드로 표시 할 수 있습니다. 일반적으로 Java 인터프리터는 모든 스레드가 을 완료 할 때까지 계속 실행됩니다. 그러나 데몬 쓰레드가 살아있는 유일한 쓰레드 인 경우 인터프리터가 종료됩니다.
라이브 데몬이 아닌 스레드를 사용하면 tomcat이 완전히 종료되지 않습니다. 그 이유는 톰캣이 셧다운 메시지를받을 때까지 하나의 비 데몬 스레드가 계속 실행되기 때문입니다.이 시점에서 스레드는 중지됩니다. 데몬이 아닌 다른 쓰레드가 있다면, JVM은 계속 퍼팅을 계속하게 될 것이고, 커맨드 라인에서 프로세스를 죽여야 할 것이다.
이제 서비스를 생성하기 위해 서블릿 컨테이너의 수명주기에 착수합니다. 여기에는 두 단계가 있습니다. Jim Garrison이 제안한대로 ServletContextListener
을 구현해야합니다. 컨테이너를로드하도록 지시해야합니다.
1 단계 :하십시오 ServletContextListener
구현 :
public class MyDaemonServletContextListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce) {
Thread th = new Thread() {
public void run() {
// implement daemon logic here.
}
};
th.setDaemon(true);
th.start();
}
public void contextDestroyed(ServletContextEvent sce) {
// you could notify your thread you're shutting down if
// you need it to clean up after itself
}
}
2 단계 :
<listener>
<listener-class>MyDaemonServletContextListener</listener-class>
</listener>
을 그리고 그렇게해야한다 : 당신의 web.xml
에 선언 여기에 두 가지가 있습니다.
서블릿 컨텍스트 시작 및 종료시 호출 될 ServletContextListener
이 필요하다고 생각합니다. 거기에서 데몬 스레드를 시작하고 중지 할 수 있습니다.
감사합니다 stevevls, 당신이 말하는 것을 이해합니다. 하지만, 내가 바람둥이에게 어떻게 말할 수 있니? "이봐, 수업 X는 시작하자마자 데몬이야." – subzero
@ 서브 제로 오케이 ... 나는 내 대답을 다시 썼다. 희망이 도움이됩니다. – stevevls