2014-04-13 37 views
6

我很難理解以下JMS示例的JNDI部分。JNDI查找如何在此JMS示例中工作?

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

如果沒有更多的設置,它將無法工作,除非它意味着成爲webapp而不是獨立程序的一部分。你需要定義。初始上下文工廠和啓動的上下文URL。有關示例,請參閱Oracle JBDI教程。 – EJP

+0

@EJP'ConnectionFactory'如何加載'jndi.properties'?雖然有[ldap示例](https://docs.oracle.com/javase/jndi/tutorial/ldap/misc/url.html#MULTI),但我在JNDI教程中沒有看到解決方案,它可以回答這個問題。 – Thufir

回答

8

通常,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/