[英]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.