簡體   English   中英

使用jms java接收對象

[英]Receiving objects with jms java

有人可以幫助我嗎 這是我的問題:

我嘗試用jms發送一個對象(這部分工作)並用jms接收它。 我的目標非常簡單。 3個字符串,3個int和一個布爾值。

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

這是我的MessageListener:

 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

如果有人能告訴我什么問題會很棒。 我不明白。 帶有topic / queue / sync / async的textmessage工作得非常好。 它涉及到對象......似乎問題在於:yo =(ObectToSend)myMessage.getObject(); 但.....

對於JMS的未來用戶,我將回答我自己的問題。

由於JMS文檔中沒有解釋,因此很難找到任何信息。

我發現很多人都在問如何做,但從來沒有得到任何答案。 那是因為它不是JMS而是Java。

所以這里:

如果你想使用相同的classe(對象)之類的

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

我的第一個對象(yo)來自com.test.jms包中的類ObectToSend.java,而我的第二個對象(myMessage.getObject())來自com.test.jms2包。 所以我有一個例外,比如“notfoundclass”。 並且不能施放物體。

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

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

您還可以使用地圖消息。 實際上,你只有字符串,整數和布爾值。 你實際上不需要一個對象。 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");

看它有多簡單?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM