2016-06-10 101 views
0

我正在嘗試使用JMS執行一個簡單的發件人 - 接收器示例。我無法運行JMS示例

我已經寫在Eclipse中的代碼,但是當我做了我的查找收到此錯誤:

需要在環境或系統屬性指定的類名,或者作爲一個小程序參數,或應用程序資源文件:java.naming.factory.initial的

在這裏你可以找到的代碼:

接收機:

public class Receiver { 
    static Context ictx = null; 

    public static void main(String[] args) throws Exception { 
     ictx = new InitialContext(); 
     Queue queue = (Queue) ictx.lookup("queue"); 
     QueueConnectionFactory qcf = (QueueConnectionFactory) ictx.lookup("qcf"); 
     ictx.close(); 

     QueueConnection qc = qcf.createQueueConnection(); 
     QueueSession qs = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); 
     QueueReceiver qrec = qs.createReceiver(queue); 
     TextMessage msg; 
     qc.start(); 

     int i; 
     for (i = 0; i < 10; i++) { 
      msg = (TextMessage) qrec.receive(); 
      System.out.println("Msg received: " + msg.getText()); 
     } 

     qc.close(); 
    } 
} 

發件人:

public class Sender { 
    static Context ictx = null; 

    public static void main(String[] args) throws Exception { 
     ictx = new InitialContext(); 
     Queue queue = (Queue) ictx.lookup("queue"); 
     QueueConnectionFactory qcf = (QueueConnectionFactory) ictx.lookup("qcf"); 
     ictx.close(); 

     QueueConnection qc = qcf.createQueueConnection(); 
     QueueSession qs = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); 
     QueueSender qsend = qs.createSender(queue); 
     TextMessage msg = qs.createTextMessage(); 

     for (int i = 0; i < 10; i++) { 
      msg.setText("Test number " + i); 
      qsend.send(msg); 
     } 

     qc.close(); 
    } 
} 

哪裏出錯?我需要在像Glassfish這樣的服務器上運行它嗎?

回答

0

您需要一個底層實現,如Apache ActiveMQ,glassfish或任何其他JMS供應商。根據所選產品的不同,需要爲程序設置相應的罐和隊​​列。

0

您正在使用查找來創建資源,如connectionfactory和隊列。要使用查找,您需要預先配置jndi資源。

如果你的意圖是隻執行一個簡單的生產者 - 消費者(發送器 - 接收器)JMS例如,你可以看看使用ActiveMQ的消息傳送經紀人這個簡單的例子:http://activemq.apache.org/hello-world.html