我正在创建一个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。我希望他们能够很好地一起玩。
答案 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