2009-05-03 2 views
4

디렉토리에서 수신 대기하는 매우 간단한 프로세스가 필요하며 은 해당 디렉토리에 새 파일이 생성 될 때 일부 작업을 수행합니다.바람둥이의 파일 수신기 프로세스

나는 그것을 수행하는 스레드 풀이 필요하다고 생각합니다.

이것은 일반적으로 사용하지만 나는 지금 사용할 수없는 스프링 프레임 워크를 사용하여 구현하기가 매우 쉽습니다. 바람둥이 만 사용할 수 있습니다. 어떻게 구현할 수 있습니까? 스레드를 "시작"시키는 엔트리 포인트는 무엇입니까?

서블릿이어야합니까?

감사

답변

4

, 여기에 다른 대답을 제공 .Daemons </리스너>

다음과 같은 ServletContextListener의 구현으로 데몬 클래스를 구현합니다

t 그는 코드가 5 초마다 호출되며, Tomcat은 앱이 종료 될 때 contextDestroyed를 호출합니다. 이 변수는 휘발성이 있습니다. 그렇지 않으면 멀티 코어 시스템에서 시스템 종료시 문제가 발생할 수 있습니다.

import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 

public class Daemons implements ServletContextListener { 
private volatile boolean active = true; 

Runnable myDeamon = new Runnable() { 

    public void run() { 
     while (active) { 
      try { 
       System.out.println("checking changed files..."); 
       Thread.sleep(5000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
}; 

public void contextInitialized(ServletContextEvent servletContextEvent) { 
    new Thread(myDeamon).start(); 
} 

public void contextDestroyed(ServletContextEvent servletContextEvent) { 
    active = false; 
} 
} 
1

당신은 그러나 이것은 좋은 생각이 아니다, 스레드를 시작하는 listener을 만들 수 있습니다. 웹 컨테이너에서 실행 중이면 자신의 스레드를 시작하면 안됩니다. Stack overflow에는 몇 가지 질문이 있습니다. Quartz (스케쥴러 프레임 워크)을 사용할 수 있지만 수용 가능한 해결책을 얻을 수 없다고 생각합니다.

어쨌든 설명하는 것은 웹 응용 프로그램이 아니라 데몬 서비스입니다. 웹 응용 프로그램에서 독립적으로이 기능을 구현하고 서로 통신 할 수있는 방법을 만들 수 있습니다.

1

java 전용 파일 알림은 Java 7에 추가됩니다. 여기에 part of the javadoc that describes it roughly이 있습니다.

파일 시스템에서 이벤트가 당신이이 중 하나 네이티브 플랫폼에 의존하는 프로그램을 만들 것입니다 가능한 경우

을 지금 기본 파일 이벤트 통지 기능에 직접에 매핑하기위한 것입니다 관찰 구현 그게 당신을 위해,

또는 대안으로 변화를 감지하기 위해 너무 자주 모든 디렉토리를 나열 어떤 종류의 폴링을 구현합니다.

당신이 지금 사용할 수있는 notification library가 있습니다 - 리눅스의 C 프로그램을 사용하여 sourceforge에서의 변경 사항을 감지합니다. Windows에서는 폴링을 사용합니다. 나는 그것이 효과가 있는지보기 위해 그것을 밖으로 시도하지 않았다. 어떻게 바람둥이의 데몬을 시작하는 방법 : web.xml에

먼저 등록하여 데몬 :

< 청취자> my.package.servlet

당신이 질문을 정제하기 때문에
+0

문제는 알림 문제가 아니며, 대신 tomcat에서 데몬을 시작하는 가장 좋은 방법은 무엇입니까? 스레드를로드하는 서블릿을 사용할 수없는 이유는 무엇입니까? –