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/myName
,java:comp/env/myName
,java:/myName
,java:jboss/myName
。行爲相同:在應用程序運行時可能會查找對象,並且在調用ServletContextListener.contextDestroyed
方法時無法執行此操作。
你怎麼關閉應用程序?你停止了JBoss實例嗎? – WeMakeSoftware
@Funtik如果我關閉JBoss實例並取消部署應用程序,則行爲是相同的。 –
你已經提到你想關閉應用程序。你是怎樣做的?你使用JBoss管理控制檯嗎?或者你只關閉了整個JBoss實例? – WeMakeSoftware