【问题标题】:Receiving objects with jms java用jms java接收对象
【发布时间】:2015-10-09 18:52:04
【问题描述】:

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

我尝试用 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

如果有人能告诉我有什么问题,那就太好了。我不明白。我的主题/队列/同步/异步的短信工作得很好。它涉及到对象和...... 看来问题出在这里: 哟 = (ObectToSend) myMessage.getObject(); 但是.....

【问题讨论】:

  • 看起来您正在将 RuntimeException 扔回 JMS 容器。抓住它并记录堆栈跟踪。
  • 感谢您的帮助,但我发现了我的错误。

标签: java object jms jms-topic


【解决方案1】:

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

真的很难找到任何信息,因为它没有在 JMS 文档中解释。

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

就这样吧:

如果你想使用相同的类(对象)像

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

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

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

这样你就可以使用完全相同的类而不是它的副本。你的 2 个对象是完全一样的。

【讨论】:

    【解决方案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");
    

    看看它有多简单?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      • 2012-10-08
      • 2012-01-19
      • 1970-01-01
      相关资源
      最近更新 更多