题
我试图创造只是连接与今后使用JNDI。
我
排队名为'的例子。A'。
根据 今后的文件触及JNDI, 如果我想要使用ConectionFactories和队列(主题)通过JNDI,我必须把jndi。性文件,在我的类路径。因为我已经理解,今后类路径是%说%/conf目录的默认。我并没有改变。所以我有这个酒店对我的队列:
的队列中。MyQueue=的例子。一个
我已经创建了java客户类来说,它使用JNDI如下:
Properties jndiParameters = new Properties() ; jndiParameters.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory"); jndiParameters.put(Context.PROVIDER_URL, "tcp://localhost:61616"); Context context = new InitialContext(jndiParameters); ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory"); Queue queue = (Queue) context.lookup("MyQueue");
但它无法找到我的队列,它将例外:内命名。NameNotFoundException:MyQueue
哪里是我的misstakes?
解决方案
问题是,你是明确的创造性以及通过他们进入InitialContext构造。这意味着jndi。性能上班的道路不会被读取。
你的码应该是这样的:
Context context = new InitialContext();
ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory");
Queue queue = (Queue) context.lookup("MyQueue");
其他提示
你可以设定静态的性质以及检索他们从一个文件,因为这样的:
InputStream is = getClass().getResourceAsStream("/my.jndi.properties");
Properties jndiParameters = new Properties();
jndiParameters.load(is);
jndiParameters.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
jndiParameters.put(Context.PROVIDER_URL, "tcp://localhost:61616");
Context ctx = new InitialContext(jndiParameters);
...
这一工作,只要你设置的静态工具之后你载的资源。有益的,如果你在装载的供应商网址的其他地方的实例。
不隶属于 StackOverflow