以下のコードの 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);
}
}