最近在学习JMS,用的ActiveMQ,在创建连接和主题的时候发现可以用JNDI来搞,网上有段代码如下:
- Java code
public Chat(String topicFactory,String topicName,String username) throws Exception { //使用jndi.properties文件获得一个JNDI连接 InitialContext ctx = new InitialContext(); //查找一个JMS连接工厂并创建连接 TopicConnectionFactory conFactory =(TopicConnectionFactory)ctx.lookup(topicFactory); TopicConnection connection = conFactory.createTopicConnection(); //创建两个JMS会话对象 TopicSession pubSession = connection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE); TopicSession subSession = connection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE); //查找一个JMS主题 Topic chatTopic =(Topic)ctx.lookup(topicName); 。 。 。 }
这里对方法lookup比较困惑,不知道那个参数该传什么,所以去网上查了下资料,发现JNDI是这么说的:它为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。命名服务提供了一种为对象命名的机制,这样你就可以在无需知道对象位置的情况下获取和使用对象。只要该对象在命名服务器上注册过,且你必须知道命名服务器的地址和该对象在命名服务器上注册的JNDI名。就可以找到该对象,获得其引用,从而运用它提供的服务。命名服务提供名称—对象的映射。目录服务提供有关对象的信息,并提供定位这些对象所需的搜索工具。
好,现在就以上情况,我想问几个问题:
1、lookup的参数该传什么进去,为什么?
2、这里说JNDI为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。那么JMS算什么?命名还是目录?还是其他?
3、命名服务器是什么?怎样在命名服务器上注册对象?
最好有JMS+JDNI使用的例子,谢谢~
PS:我使用的IDE是MyEclipse。。
------解决方案--------------------------------------------------------
1、lookup的参数该传什么进去,为什么?
lookup 的参数是 JNDI 的名字,在 Java EE 6 之前,各种服务器提供的 EJB/JMS 等的 JNDI 命名规则不统一。这个名字需要由服务端提供。JNDI 的名字就相当于文件系统中某个文件的路径名。
2、这里说JNDI为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。那么JMS算什么?命名还是目录?还是其他?
JMS 是 J2EE 中的标准服务之一—— Java 消息服务,与 JNDI 无关。
3、命名服务器是什么?怎样在命名服务器上注册对象?
命名服务器,第一次听说,我想可以认为是管理 JNDI 资源的容器。一般通过 J2EE 应用服务器的管理平台将对象绑定到 JNDI 上面去。
JNDI API 中包含两块,一块是命名服务,另一块是目录服务。对应于 J2SE 的 javax.naming 包及其子包中的 API。JNDI 中有很多东西,有兴趣的话可以去看看 JNDI Tutorial: http://java.sun.com/products/jndi/tutorial/
------解决方案--------------------------------------------------------
因为 JMS 规范规定其中的几个对象必须从 JNDI 上获得。
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
LZ,你创建了JNDI服务了么?!创建了后可以在里面注册JMS的服务,同时会提供一个名称,这个名称就是lookup的参数
------解决方案--------------------------------------------------------
JNDI,你到你的服务器上找总能找到对应的jndi name,比如weblogic、jboss
然后你就知道你要lookup什么了
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
lookup后面的参数就是应用服务器(如WEBLOGIC)JMS中配置的队列的(JNDI名称)