使用 jms java 接收对象

Receiving objects with jms java

有人可以帮助我吗?这是我的问题:

我尝试用 jms 发送一个对象(这部分有效)并用 jms 接收它。 我的对象很简单。 3 个字符串、3 个整数和一个布尔值。

不存在连接或类似问题。我收到了物品,但好像我一件一件地收到了所有东西。

这是我的 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 发送的短信效果非常好。它谈到反对和...... 看来问题出在这里: yo = (ObectToSend) myMessage.getObject(); 但是.....

对于 JMS 的未来用户,我将回答我自己的问题。

JMS 文档中没有解释,因此很难找到任何信息。

我发现很多人问如何去做,但从来没有任何答案。那是因为它与 JMS 无关,而是与 Java.

相关

就是这样:

如果您想使用与

相同的 classe(对象)
ObectToSend yo = (ObectToSend) myMessage.getObject();

我的第一个对象 (yo) 来自包 com.test.jms 中的 class ObectToSend.java,我的第二个对象 (myMessage.getObject() ) 来自包 com.test.jms2。所以我有一个像 "notfoundclass" 这样的例外。并且不能投射物体。

class ObectToSend.java 应该在两个项目中。但是你不能只复制同名的粘贴(我愚蠢地做了)。 您需要为 projects/packages 中使用的 class 创建一个 jar,并将其添加到两个项目中。

这样您就可以使用完全相同的 class 而不是它的副本。而你的 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");

看到它有多简单了吗?