2015-07-20 66 views
1

有人能幫助我。這裏是我的問題:用jms接收對象java

我嘗試發送的對象與JMS(這部分作品),並與JMS接受它。 我的對象很簡單。 3個字符串,3個int和一個布爾值。

這是沒有問題的connexion或類似的東西。我收到這個東西,但好像我一個接一個地收到了所有東西。

這裏是我的消息監聽:

MessageListener listner = new MessageListener() { 
      public void onMessage(Message message) { 

       ObectToSend yo=null; 

       try { 
        if (message instanceof ObjectMessage) { 
         ObjectMessage myMessage = (ObjectMessage) message; 
         System.err.println("test"); 
         yo = (ObectToSend) myMessage.getObject(); 
         System.err.println("test2"); 
         System.err.println(yo.entite + " " + yo.error + " " + yo.idGloreg + " " + yo.indPerso + " " + yo.nom + " " + yo.prenom + " " + yo.nom); 
        } 
       } catch (JMSException e) { 
        System.out.println("Caught:" + e); 
        e.printStackTrace(); 
       } 
      } 
     }; 

,我的發送部分:

Serializable ObectTest = new ObectToSend("pro", "enc", 134, 10, true, "yayaya", 0); 

     MessageProducer producer = session.createProducer(topic); 
     producer.setDeliveryMode(DeliveryMode.PERSISTENT); 

     ObjectMessage message = session.createObjectMessage(); 

     message.setObject(ObectTest); 
     connection.start(); 
     producer.send(message); 

最後在這裏我想送(在receiver.java和sender.java)什麼:

public static class ObectToSend implements Serializable{ 

    private static final long serialVersionUID = 1L; 
    String prenom; 
     String nom; 
     int idGloreg; 
     int indPerso; 
     boolean ok; 
     String entite; 
     int error; 

     ObectToSend(String prenomP, String nomP, int idGloregP, int indPersoP, boolean okP, String entiteP, int errorP){ 
      prenom = prenomP ; 
      nom= nomP; 
      idGloreg = idGloregP; 
      indPerso = indPersoP; 
      ok = okP; 
      entite= entiteP; 
      error = errorP; 
     } 
    } 

我的控制檯:

test 
test 
test 
test 
test 
test 
test 

如果有人能告訴我什麼問題會很好。我不明白。我的主題/隊列/同步/異步的textmessage工作得很好。它來對象和.... 看來問題在這裏: yo =(ObectToSend)myMessage.getObject(); 但.....

+0

看起來你正在拋出一個'RuntimeException'回到JMS容器。抓住並記錄堆棧跟蹤。 –

+2

Thx爲您的幫助,但我發現我的錯誤。 –

回答

2

對於JMS的未來用戶,我會回答我的問題。

這是真的很難找到任何信息,因爲它不是JMS文檔中解釋。

我發現很多人問如何做,但從來沒有任何答案。這是因爲它不是歸咎於JMS,而是歸咎於Java。

所以這裏有雲:

如果您想使用相同的CLASSE(對象),如

ObectToSend yo = (ObectToSend) myMessage.getObject(); 

我的第一個對象(喲)是從包COM類ObectToSend.java。 test.jms和我的第二個對象(myMessage.getObject())來自com.test.jms2包。所以我有一個像「notfoundclass」的異常。並且不能投射物體。

類ObectToSend.java應該在兩個項目中。但是你不能只複製同名的粘貼(我愚蠢地做了什麼)。 您需要創建一個在項目/包中使用的類的jar,並將其添加到兩個項目中。

這樣你就可以使用完全相同的類而不是它的副本。和你的2個物體完全一樣。

1

您也可以使用地圖信息。事實上,你只有字符串,整數和布爾值。你實際上不需要一個對象。 MapMessage在這裏適合你,並且簡單得多。

這裏是個例:

// create mapMessage 
message = session.createMapMessage(); 
       // Here insert variables in properties of the message 
       // This can be filtred with selector 
       message.setStringProperty("entity", entity); 
       message.setStringProperty("messageFrom", messageFrom); 

       // Here insert variables in body of the message 
       //This CAN'T be filtred (what you want I think) 
       message.setString("title", title); 
       message.setString("description", description); 


// Get map message 

MapMessage mapMessage = (MapMessage) message; 
// Here get variables of your message 
        String title = mapMessage.getString("title"); 
        String description = mapMessage.getString("description"); 

看到它是多麼簡單?