2015-07-20 64 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"); 

看到它是多么简单?