1

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/myNamejava:/myNamejava:jboss/myNameServletContextListener.contextDestroyed

4

1 に答える 1

0

私にはJBossのバグのように見えます。AS7-5746を作成しました

于 2012-10-13T23:04:03.400 に答える