[英]Why does calling close() on an InitialContext break JNDI for all future lookups (Glassfish)?
當作為針對Glassfish的獨立應用程序(已配置為通過JNDI公開QueueConnectionFactory
和DataSource
)運行時,下面代碼中的第二個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.