JBoss 7.1.1 및 servlet-api 2.5를 사용하고 있습니다.ServletContextListener.contextDestroyed에서 JNDI 조회
응용 프로그램 종료시 JNDI에있는 일부 개체를 종료해야합니다.
public class MyServletContextListener implements ServletContextListener {
...
@Override
public void contextDestroyed(ServletContextEvent sce) {
((TaskClient) new InitialContext().lookup("myName")).disconnect();
}
}
을하지만 예외를 얻을 :
나는이 목적을 위해 ServletContextListener
을 사용하고 내가 응용 프로그램이 모든 것이 괜찮 실행되고있는 객체를 조회하려고하면
Error looking up myName, service service jboss.naming.context.java.myName is not started
합니다.
도움 주셔서 감사합니다.
public class MyJbpmServletContextListener implements ServletContextListener {
public static final String TASK_CLIENT_JNDI_NAME = "myJbpmTaskClient";
private Log logger = SLF4JLogFactory.getLog(getClass());
@Override
public void contextInitialized(ServletContextEvent sce) {
try {
TaskClient tc = ...
// long initialization of TaskClient
InitialContext context = new InitialContext();
context.bind(TASK_CLIENT_JNDI_NAME, client);
} catch (NamingException exception) {
logger.error("Cannot bind task client", exception);
}
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
try {
((TaskClient) new InitialContext().lookup(TASK_CLIENT_JNDI_NAME)).disconnect();
} catch (NamingException exception) {
logger.error("Cannot obtain task client", exception);
}
}
}
목적은 경로 TASK_CLIENT_JNDI_NAME
때 응용 프로그램이 실행을 다음에 액세스 : 나는 JNDI에 데이터를 바인딩하는 방법
갱신
. 하지만 contextDestroyed
라고 할 때 나는 NamingException
입니다.
언제 어떻게 파괴되는지 모르겠습니다. 나는 리바 인하거나 바인드 해제하지 않는다고 확신합니다.
는
UPDATE2 또한 JNDI 경로 java:comp/myName
, java:comp/env/myName
, java:/myName
, java:jboss/myName
을 사용했습니다. 동작은 동일합니다. 응용 프로그램이 실행될 때 객체를 검색 할 수 있으며 ServletContextListener.contextDestroyed
메서드가 호출 될 때 객체를 찾을 수 없습니다.
응용 프로그램을 어떻게 종료합니까? JBoss 인스턴스를 중지합니까? – WeMakeSoftware
@Funtik JBoss 인스턴스를 종료하고 응용 프로그램의 배포를 취소하면 동작이 동일합니다. –
응용 프로그램을 종료하겠다고 언급했습니다. 어떻게 그걸합니까? JBoss 관리 콘솔을 사용하고 있습니까? 아니면 그냥 JBoss의 전체 인스턴스를 종료 하시겠습니까? – WeMakeSoftware