2014-04-13 37 views
6

Tôi gặp khó khăn trong việc hiểu phần JNDI của ví dụ JMS sau.Tìm kiếm JNDI hoạt động như thế nào trong ví dụ JMS này?

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(); 
    } 
} 

Cuốn sách mà tôi nhận được ví dụ này không đề cập đến thiết lập để thực hiện tra cứu JNDI này có thể. Ví dụ, trong

ConnectionFactory connectionFactory = (ConnectionFactory) 
     jndiContext.lookup("jms/javaee7/ConnectionFactory"); 

không nên có một số loại máy chủ đang chạy để các jndiContext có thể nhận được một tổ chức của một đối tượng ConnectionFactory? Nói chung, cần thiết lập loại thiết lập nào để tra cứu JNDI ở trên hoạt động?

Cảm ơn bạn rất nhiều.

+0

Nó sẽ không hoạt động mà không cần thiết lập nhiều hơn, trừ khi nó có nghĩa là một phần của webapp thay vì chương trình độc lập. Bạn sẽ cần phải xác định. Nhà máy ngữ cảnh ban đầu và URL ngữ cảnh để bắt đầu. Xem Hướng dẫn Oracle JBDI để biết ví dụ. – EJP

+0

@EJP tải 'ConnectionFactory'' jndi.properties' như thế nào? Mặc dù có [ví dụ về ldap] (https://docs.oracle.com/javase/jndi/tutorial/ldap/misc/url.html#MULTI) Tôi không thấy giải pháp nào trong hướng dẫn JNDI trả lời câu hỏi này. – Thufir

Trả lời

8

Nói chung, JNDI là một dịch vụ cung cấp tập các đối tượng được ứng dụng sử dụng. Dịch vụ này thường được cung cấp bởi máy chủ ứng dụng hoặc máy chủ web hoặc máy chủ LDAP chuyên dụng. Nếu hướng dẫn bạn đang cố làm theo giải thích hướng dẫn JMS trong ngữ cảnh của ứng dụng web, rất có thể sẽ có một số cài đặt được thực hiện trong máy chủ ứng dụng (ví dụ: Glassfish, JBoss) hoặc máy chủ web (ví dụ: Tomcat). Cách truy cập JNDI cũng phụ thuộc vào nhà cung cấp. Thông thường, điều này bao gồm một tệp cấu hình (tệp thuộc tính hoặc tệp XML). Một cách khác để sử dụng JMS là sử dụng một nhà cung cấp JMS chuyên dụng như ActiveMQ. Bằng cách này, bạn không cần bất kỳ máy chủ ứng dụng nào. Ứng dụng của bạn chỉ có thể là một ứng dụng java độc lập (tức là không nhất thiết phải là một ứng dụng web). Truy cập các đối tượng được cung cấp bởi ActiveMQ qua JNDI được giải thích ở đây: https://activemq.apache.org/jndi-support.html. Hướng dẫn chung của JNDI: http://docs.oracle.com/javase/tutorial/jndi/

Các vấn đề liên quan