繁体   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