Второй поиск JNDI в приведенном ниже коде завершается ошибкой, за исключением того, что он запускается как отдельное приложение для Glassfish (которое было настроено для предоставления QueueConnectionFactory
и DataSource
через JNDI). Тем не менее, код работает нормально, когда строка jndiContext.close()
удалена.
В реальном коде Spring делает вызов 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);
}
}