以下代码中的第二个 JNDI 查找在作为针对 Glassfish 的独立应用程序(已配置为通过 JNDI公开 aQueueConnectionFactory
和 a )运行时失败并出现异常。DataSource
但是,删除该行后代码可以正常工作jndiContext.close()
。
在实际代码中,调用close()
是由 Spring 在 a 中进行的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);
}
}