ActiveMQInitialContextFactory и NamingContextFactory - PullRequest
3 голосов
/ 16 ноября 2011

Я создаю Java-приложение для предприятия, которое использует activemq для отправки сообщений автономному посреднику очереди.

В настоящее время я поддерживаю доступ к долгоживущим ресурсам через поиск jndi, который работает довольно хорошо. Я хотел бы продолжить этот шаблон с фабриками соединений ActiveMQ и фабриками соединений с очередями, однако в документации amq указано, что мои jndi.properties должны иметь:

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory

в то время как jndi.properties по умолчанию (который работает с моими простыми поисками объектов и фасадов, имеет:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory

Могу ли я использовать один с другим? Могу ли я как-то иметь два файла jndi.properties или два начальных контекста?

Этот вопрос показывает, как настроить ТОЛЬКО activemq через jndi. Я хочу, чтобы они хорошо играли вместе.

1 Ответ

4 голосов
/ 16 ноября 2011

Вы можете создать любое количество InitialContext объектов, которое вы хотите. Вам просто нужно передать окружение его конструктору , чтобы правильно его инициализировать.

Таким образом, вы все еще можете безопасно использовать jndi.properties и инициализировать начальный контекст для activemq с помощью кода, который может выглядеть следующим образом:

public void setUpActiveMQResources() throws IOException, NamingException {
    InitialContext context = createInitialContext("/activemq.jndi.properties");
    // do what you want
}

public InitialContext createInitialContext(String resource) throws IOException, NamingException {
    InputStream is = getClass().getResourceAsStream(resource);
    Properties props = new Properties();
    try {
        props.load(is);
    } finally {
        is.close();
    }
    return new InitialContext(props);
}

activemq.jndi.properties в этом случае это ресурс classpath с содержимым вроде здесь

...