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