2012-09-19 58 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