JBoss7.1.1とservlet-api2.5を使用しています。
アプリケーションのシャットダウン時にJNDIにあるいくつかのオブジェクトをシャットダウンする必要があります。
私はServletContextListener
この目的で使用しています:
public class MyServletContextListener implements ServletContextListener {
...
@Override
public void contextDestroyed(ServletContextEvent sce) {
((TaskClient) new InitialContext().lookup("myName")).disconnect();
}
}
しかし、私は例外を受け取ります:
myName、サービスサービスの検索中にエラーが発生しました jboss.naming.context.java.myNameが開始されていません
アプリケーションの実行中にオブジェクトを検索しようとすると、すべて問題ありません。
助けてくれてありがとう。
アップデート
データを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