2012-09-19 61 views
1

我正在使用JBoss 7.1.1和servlet-api 2.5。ServletContextListener.contextDestroyed中的JNDI查找

我不得不关闭应用程序关闭时位于JNDI中的一些对象。

我使用ServletContextListener这个目的:


public class MyServletContextListener implements ServletContextListener { 
    ... 

    @Override 
    public void contextDestroyed(ServletContextEvent sce) { 
     ((TaskClient) new InitialContext().lookup("myName")).disconnect(); 
    } 
} 

,但我得到异常:

Error looking up myName, service service 
jboss.naming.context.java.myName is not started

如果我试图查找时,应用程序运行一切正常的对象。

谢谢你的帮助。


更新

我如何将数据绑定到JNDI:


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应用程序运行时访问。但是当contextDestroyed叫我有NamingException

我不知道如何以及何时销毁。我只能确定我没有重新绑定或解除绑定。


UPDATE2

我也尝试过使用JNDI路径java:comp/myNamejava:comp/env/myNamejava:/myNamejava:jboss/myName。行为相同:在应用程序运行时可能会查找对象,并且在调用ServletContextListener.contextDestroyed方法时无法执行此操作。

+1

你怎么关闭应用程序?你停止了JBoss实例吗? – WeMakeSoftware

+0

@Funtik如果我关闭JBoss实例并取消部署应用程序,则行为是相同的。 –

+0

你已经提到你想关闭应用程序。你是怎样做的?你使用JBoss管理控制台吗?或者你只关闭了整个JBoss实例? – WeMakeSoftware

回答

0

看起来像JBoss的错误给我,我创建AS7-5746