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