使用jms-java接收对象
谁能帮帮我吗。我的问题是: 我尝试用jms发送一个对象,这部分工作正常,用jms接收它。 我的目标很简单。3个字符串、3个int和一个布尔值 不存在连接或类似问题。我收到了这个东西,但好像我一个接一个地收到了所有的东西 这是我的留言聆听者:使用jms-java接收对象,java,object,jms,jms-topic,Java,Object,Jms,Jms Topic,谁能帮帮我吗。我的问题是: 我尝试用jms发送一个对象,这部分工作正常,用jms接收它。 我的目标很简单。3个字符串、3个int和一个布尔值 不存在连接或类似问题。我收到了这个东西,但好像我一个接一个地收到了所有的东西 这是我的留言聆听者: MessageListener listner = new MessageListener() { public void onMessage(Message message) { ObectToS
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有关 下面是: 如果您想使用同一类对象,如
ObectToSend yo = (ObectToSend) myMessage.getObject();
我的第一个对象yo来自包com.test.jms中的类ObectToSend.java,第二个对象myMessage.getObject来自包com.test.jms2。所以我有一个例外,比如notfoundclass。无法投射对象
ObectToSend.java类应该在这两个项目中。但是你不能像我愚蠢的那样用相同的名字复制粘贴。
您需要为两个项目/包中使用的类创建一个jar,并将其添加到两个项目中
这样您就可以使用完全相同的类,而不是它的副本。你的两个对象是完全相同的 您也可以使用地图消息。实际上,您只有字符串、整数和布尔值。实际上,您不需要对象。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");
看看它有多简单?看起来您正在向JMS容器抛出运行时异常。捕获并记录堆栈跟踪.Thx以获取帮助,但我发现了错误。