JNDI查找如何在此JMS示例中工作?

时间:2014-04-13 00:39:26

标签: java jms jndi

我很难理解以下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查找需要什么样的设置才能工作?

非常感谢。

1 个答案:

答案 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/