3

以下のコードの 2 番目の JNDI ルックアップは、Glassfish ( JNDI 経由で aQueueConnectionFactoryおよび aを公開するように構成されている) に対してスタンドアロン アプリケーションとして実行すると、例外で失敗します。DataSourceただし、行jndiContext.close()が削除されると、コードは正常に機能します。

実際のコードでは、 への呼び出しclose()は で Spring によって行われているJndiObjectFactoryBeanため、簡単に削除することはできません。

これは Glassfish のバグですか、それとも何か間違っていますか (設定ミスやコーディングの誤りなど)?

import javax.naming.Context;
import javax.naming.InitialContext;

public class TestInitCtx {
    private final static String QUEUE_CONNECTION_FACTORY_JNDI_NAME = "QCF";
    private final static String DATA_SOURCE_JNDI_NAME = "DS";

    public static void main(String[] args) throws Exception {
        Context jndiContext = new InitialContext();
        jndiContext.lookup(QUEUE_CONNECTION_FACTORY_JNDI_NAME);

        // In Glassfish, this line causes the second lookup
        // to throw a com.sun.enterprise.connectors.ConnectorRuntimeException
        // (wrapping a NullPointerException)
        jndiContext.close();

        jndiContext = new InitialContext();
        jndiContext.lookup(DATA_SOURCE_JNDI_NAME);          
    }
}

4

1 に答える 1

0

JNDI 実装は、InitialContext オブジェクトの単一の静的実装のみをサポートする場合があります。Sun のドキュメントを使用して、 JNDIコンテキスト ファクトリの実際の具象型を確認する方法を決定し、次に、close の詳細が記載された実装ドキュメントを見つけることができます。

于 2009-08-28T08:21:25.770 に答える