Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ServletContextListener.ContextListener中的JNDI查找_Java_Jndi_Jboss7.x_Servlet Listeners - Fatal编程技术网

Java ServletContextListener.ContextListener中的JNDI查找

Java ServletContextListener.ContextListener中的JNDI查找,java,jndi,jboss7.x,servlet-listeners,Java,Jndi,Jboss7.x,Servlet Listeners,我正在使用JBoss7.1.1和ServletAPI2.5 我必须在应用程序关闭时关闭JNDI中的一些对象 我使用ServletContextListener的目的是: public class MyServletContextListener implements ServletContextListener { ... @Override public void contextDestroyed(ServletContextEvent sce) {

我正在使用JBoss7.1.1和ServletAPI2.5

我必须在应用程序关闭时关闭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 当应用程序运行时,可以通过以下路径TASK\u CLIENT\u JNDI\u NAME访问该对象。但当调用ContextDestroy时,我有NamingException

我不知道它是怎么被摧毁的,什么时候被摧毁的。我只确定我没有重新绑定或解除绑定

更新2


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

在我看来像JBoss bug,我创建了如何关闭应用程序?您是否停止JBoss实例?@Funtik如果我关闭JBoss实例并取消部署应用程序,行为是相同的。您已经提到要关闭应用程序。你是怎么做到的?您是否使用JBoss管理控制台进行此操作?或者你只是关闭整个JBoss实例?@Funtik我通过两种方式关闭应用程序:第一种是使用maven插件的standart undeploy,但我认为使用管理控制台的undeploy是相同的,第二种是关闭整个JBoss实例。两种方法的工作方式不一样。@GrigoryKalabin可能有点傻,但当应用程序运行时,您能从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);
        }
    }
}