ActiveMQInitialContextFactory与NamingContextFactory

时间:2011-11-15 22:08:23

标签: java jndi activemq

我正在创建一个java企业应用程序,它使用activemq将消息发送到独立的队列代理。

我目前通过jndi查找维护对长期资源的访问,这非常有效。我想继续使用ActiveMQ连接工厂和队列连接工厂的这种模式,但是在amq documentation中它指定我的jndi.properties应该具有:

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

虽然默认的jndi.properties(适用于我的简单对象和外观查找):

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

我可以和另一个一起使用吗?我能以某种方式拥有两个jndi.properties文件或两个初始上下文吗?

This问题显示了如何通过jndi配置activemq。我希望他们能够很好地一起玩。

1 个答案:

答案 0 :(得分:4)

您可以创建任意数量的InitialContext个对象。您只需将环境传递给constructor即可正确初始化它。

因此,您仍然可以安全地使用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是类路径资源,其内容类似于here