3

以下代码中的第二个 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);          
    }
}

4

1 回答 1

0

您的 JNDI 实现可能只支持 InitialContext 对象的单个静态实现。您可以使用sun上的文档来确定如何找出 JNDI 上下文工厂的实际具体类型,然后找到详细说明 close 功能的实现文档。

于 2009-08-28T08:21:25.770 回答