谁能帮帮我?我的问题是:
我尝试用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;
}
}
My console:
test
test
test
test
test
test
test
如果有人能告诉我是什么问题,那就太好了。我不明白。我的短信主题/队列/同步/异步工作得很好。它来到了object和....问题似乎在这里:yo = (objecttosend) myMessage.getObject();但是… 对于JMS的未来用户,我将回答我自己的问题。
很难找到任何信息,因为JMS文档中没有解释。
我发现很多人问怎么做,但从来没有任何答案。这是因为它与JMS无关,而与Java有关。所以它是这样的:
如果您想使用与
相同的类(对象)ObectToSend yo = (ObectToSend) myMessage.getObject();
我的第一个对象(yo)来自包com.test.jms中的obectsend .java类,我的第二个对象(myMessage.getObject())来自包com.test.jms2。所以我有一个类似于"notfoundclass"的异常。并且不能强制转换对象
类objectsend .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");