代码之家  ›  专栏  ›  技术社区  ›  Simon Nickerson

为什么对initialcontext调用close()会中断jndi以供将来查找(glassfish)?

  •  3
  • Simon Nickerson  · 技术社区  · 15 年前

    下面代码中的第二个jndi查找在作为一个独立的应用程序对glassfish(已配置为公开 QueueConnectionFactory 和A DataSource 通过JNDI)。但是,当 jndiContext.close() 被移除。

    在真正的代码中,调用 close() 是春天做的 JndiObjectFactoryBean 所以我不能轻易地删除它。

    这是glassfish中的一个bug,还是我做错了什么(例如,配置错误或编码错误)?

    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);          
        }
    }
    
    
    1 回复  |  直到 14 年前
        1
  •  0
  •   Jherico    15 年前

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