我很难理解以下JMS示例的JNDI部分。
public static void main(String[] args) {
try {
// Gets the JNDI context
Context jndiContext = new InitialContext();
// Looks up the administered objects
ConnectionFactory connectionFactory = (ConnectionFactory)
jndiContext.lookup("jms/javaee7/ConnectionFactory");
Destination queue = (Destination) jndiContext.lookup("jms/javaee7/Queue");
// Sends a text message to the queue
try (JMSContext context = connectionFactory.createContext()) {
context.createProducer().send(queue, "Text message sent at " + new Date());
}
} catch (NamingException e) {
e.printStackTrace();
}
}
我得到这个例子的书没有提到使JNDI查找成为可能的设置。例如,在
中ConnectionFactory connectionFactory = (ConnectionFactory)
jndiContext.lookup("jms/javaee7/ConnectionFactory");
是否应该运行某种服务器,以便jndiContext
能够获得ConnectionFactory
个对象?一般来说,上面的JNDI查找需要什么样的设置才能工作?
非常感谢。
答案 0 :(得分:10)
通常,JNDI是一种服务,它提供应用程序要使用的一组对象。此服务通常由应用程序服务器或Web服务器或专用LDAP服务器提供。 如果您要学习的教程在Web应用程序的上下文中解释了JMS教程,那么很可能在应用程序服务器(例如Glassfish,JBoss)或Web服务器(例如Tomcat)中进行一些设置。 访问JNDI的方式也取决于提供者。通常,这涉及配置文件(属性文件或XML文件)。 使用JMS的另一种方法是使用专用的JMS提供程序,如ActiveMQ。这样,您就不需要任何应用程序服务器。您的应用程序可以只是一个独立的Java应用程序(即不一定是Web应用程序)。这里解释了通过JNDI访问ActiveMQ提供的对象:https://activemq.apache.org/jndi-support.html。 一般JNDI教程:http://docs.oracle.com/javase/tutorial/jndi/