java - ServletContextListener.contextDestroyed 中的 JNDI 查找

标签 java jndi jboss7.x servlet-listeners

我正在使用 JBoss 7.1.1 和 servlet-api 2.5。

我必须在应用程序关闭时关闭位于 JNDI 中的一些对象。

我正在使用ServletContextListener为此目的:


public class MyServletContextListener implements ServletContextListener {
    ...

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

但我得到了异常(exception):

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

If I try to lookup the object when application is running everything is fine.

Thank you for any help.


update

How I bind data to 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 .

我不知道它是如何以及何时被摧毁的。我只确定我没有重新绑定(bind)或取消绑定(bind)它。

<小时/>

更新2

我还尝试使用jndi路径java:comp/myName , java:comp/env/myName , java:/myName , java:jboss/myName 。行为是相同的:应用程序运行时可以查找对象,而 ServletContextListener.contextDestroyed 时则无法查找对象。调用的方法。

最佳答案

对我来说看起来像是一个 JBoss bug,我创建了 AS7-5746

关于java - ServletContextListener.contextDestroyed 中的 JNDI 查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12497538/

相关文章:

java - 如何查询Ldap以获取结果中的用户属性并将其用于自动填写JSF2.0表单

Java 等价于 C# 的 TimeSpan

java - 将值设置为对象数组

java - Spring 3 : Postpone bean instanciation

java - 了解用于 Java 批处理应用程序的 JNDI

java - Spring Datasource事务管理器问题

java - 从 MemoryClassLoader 加载库?

java - Hibernate 抛出 PK 违规错误

java - Log4j如何配置Log级别