簡體   English   中英

為什么在InitialContext上調用close()會破壞所有未來查找的JNDI(Glassfish)?

[英]Why does calling close() on an InitialContext break JNDI for all future lookups (Glassfish)?

當作為針對Glassfish的獨立應用程序(已配置為通過JNDI公開QueueConnectionFactoryDataSource )運行時,下面代碼中的第二個JNDI查找失敗並出現異常。 但是,刪除行jndiContext.close()時代碼工作正常。

在實際的代碼,調用close()是由春在做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);          
    }
}

您的JNDI實現可能只支持InitialContext對象的單個靜態實現。 您可以使用sun中的文檔來確定如何找出JNDI上下文工廠的實際具體類型,然后找到詳細說明close的功能的實現文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM