2011-11-18 2 views
8

Java 웹 응용 프로그램을 개발 중입니다. 응용 프로그램은 Lucene 색인에 연결됩니다. IndexSearcher의 싱글 톤 인스턴스를 만듭니다. 이 인스턴스는 일부 파일을 엽니 다. 웹 응용 프로그램을 재배포하면 IndexSearcher의 이전 인스턴스에서 열린 파일은 계속 열리고 다른 인스턴스는 재배포 된 응용 프로그램에서 만들어집니다. 몇 번 재배포하면 시스템은 "너무 많은 파일 열기"예외를 던지기 시작합니다. 다시 배포하기 전에 이전 인스턴스를 닫고 이전 파일을 닫을 수 있지만 그 작업을 수행 할 방법을 알 수는 없습니까? load-on-startup과 비슷한 un-deploy시 호출되는 web.xml의 지시문이 있습니까? jboss 서버에서 웹 응용 프로그램을 실행하고 있습니다.Java 웹 응용 프로그램에서 전개 취소 메소드 호출

답변

17

ServletContextListener을 구현하십시오.

@WebListener 
public class LuceneConfig implements ServletContextListener { 

    @Override 
    public void contextInitialized(ServletContextEvent event) { 
     // Do your job here during webapp startup. 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent event) { 
     // Do your job here during webapp shutdown. 
    } 

} 

당신은, 당신은 다음과 같이 @WebListener 주석을 제거하고 web.xml에 수동으로 등록해야합니다 (하지만 2 년 밖에 이미) 아직 서블릿 3.0에없는 경우 :

<listener> 
    <listener-class>com.example.LuceneConfig</listener-class> 
</listener> 
+0

등록없이 바로 작동합니다. 페이 라라 4.1 (173 빌드)에 Mojarra 2.3.3 사용. – Roland

+1

물론 정상적으로 작동합니다. Payara 4.x는 Servlet 3.1 기반입니다. 그렇다면'@WebListener'는 정상적으로 작동합니다. 응답으로, 아직 Servlet 3.0을 사용하지 않을 때는 작동하지 않습니다. JSF impl/version은 여기서 중요한 역할을하지 않으므로 관련이 없습니다. 서블릿 버전 만 관련됩니다. – BalusC

+0

명확하게 해주셔서 감사합니다. – Roland

2

javax.servlet.ServletContextListener을 구현하고 해당 클래스를 에 <listener>으로 등록하면 컨텍스트가 언로드되기 전에 contextDestroyed() 메서드가 호출됩니다.

관련 문제