안녕 얘들 아 두 개의 엔터프라이즈 애플리케이션 사이에 다리를 만들어야하는 애플리케이션을 개발해야하며이 두 애플리케이션 간의 통신을 설정하기 위해 JMS를 사용하고 있습니다. 여기서는 Message Driven Bean을 사용하여 한 응용 프로그램에서 다른 응용 프로그램으로 JMS 메시지를 보냅니다. 나는 한 응용 프로그램이 다른 응용 프로그램으로 메시지를 보낼 수 있지만 요청을 보낸 사람에게 응답을 보낼 수 없을 때 나는 때렸다.엔터프라이즈 Java 애플리케이션에서 jms 응답을 보내는 방법
private void sendJMSMessageToMyTestQueue(Message messageData) {
try {
context.createProducer().send(myTestQueue, messageData);
System.out.println("\tTime: " + System.currentTimeMillis() + " ms");
System.out.println("\tMessage ID: " + messageData.getJMSMessageID());
System.out.println("\tCorrel. ID: " + messageData.getJMSCorrelationID());
System.out.println("\tReply to: " + messageData.getJMSReplyTo());
//System.out.println("\tContents: " + messageData.getText());
} catch (JMSException ex) {
Logger.getLogger(HomeLoanJMS.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void recieveSync() {
Message msg = context.createConsumer(myTestQueue).receive();
if (msg instanceof TextMessage) {
try {
TextMessage tms = (TextMessage) msg;
System.out.println("Received reply ");
System.out.println("Received reply ");
System.out.println("\tTime: " + System.currentTimeMillis() + " ms");
System.out.println("\tMessage ID: " + tms.getJMSMessageID());
System.out.println("\tCorrel. ID: " + tms.getJMSCorrelationID());
System.out.println("\tReply to: " + tms.getJMSReplyTo());
System.out.println("\tContents: " + tms.getText());
System.out.println("Coming Reply: ---->>>>" + tms.getText());
} catch (JMSException ex) {
Logger.getLogger(HomeLoanJMS.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
@Override
public void sendMessage(String message) {
try {
TextMessage msg = context.createTextMessage(message);
// msg.setJMSType("Textmsg");
msg.setText(message);
msg.setJMSReplyTo(myTestQueue); //setting reply destination
sendJMSMessageToMyTestQueue(msg);
System.out.println("after reply");
// recieveSync();
} catch (JMSException ex) {
Logger.getLogger(HomeLoanJMS.class.getName()).log(Level.SEVERE, null, ex);
}
}
이 메시지가 응답자받을 때하지만 난 getReplyTo 대상을 인쇄 않지만 내가 응답을 구축하고 그것을 다시 보낼 때 대상 값이 null로 설정하고 응답이 실행되지 않습니다. 답장 코드는 다음과 같습니다
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
, @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "jms/myTestQueue")
})
public class TestingMDB implements MessageListener {
@EJB
private SavingBeanRemote savingBean;
@Resource(mappedName = "jms/myTestQueue")
private Queue myTestQueue;
@Inject
@JMSConnectionFactory("jms/myTestQueueConnectionFactory")
private JMSContext context;
public TestingMDB() {
}
@Override
public void onMessage(Message message) {
try {
if (message instanceof MapMessage) {
MapMessage mmsg = (MapMessage) message;
String id = mmsg.getString("messageType");
System.out.println(id);
String cid = mmsg.getString("C_ID");
System.out.println(cid);
} else if (message instanceof TextMessage && (message.getJMSReplyTo() != null)) {
TextMessage tm = (TextMessage) message;
System.out.println("Received request");
System.out.println("\tTime: " + System.currentTimeMillis() + " ms");
System.out.println("\tMessage ID: " + tm.getJMSMessageID());
System.out.println("\tCorrel. ID: " + tm.getJMSCorrelationID());
System.out.println("\tReply to: " + tm.getJMSReplyTo());
System.out.println("\tContents: " + tm.getText());
String contents = tm.getText();
Double balance = savingBean.getBalance("c0566664", "a4016692");
String text = (String)balance.toString();
Destination replyDestination = (Destination)message.getJMSReplyTo();
TextMessage replyMessage = context.createTextMessage();
replyMessage.setText(text);
replyMessage.setJMSCorrelationID(tm.getJMSMessageID());
context.createProducer().send(replyDestination, replyMessage);
System.out.println("Sent reply");
System.out.println("\tTime: " + System.currentTimeMillis() + " ms");
System.out.println("\tMessage ID: " + replyMessage.getJMSMessageID());
System.out.println("\tCorrel. ID: " + replyMessage.getJMSCorrelationID());
System.out.println("\tReply to: " + replyMessage.getJMSReplyTo());
System.out.println("\tContents: " + replyMessage.getText());
TextMessage tms = context.createTextMessage("Reply from Client");
for (int i = 0; i < 2; i++) {
try {
try {
System.out.println(message.equals(tm));
Thread.sleep(1000);
System.out.println(tm.getText());
System.out.println(tm.getText());
} catch (InterruptedException ex) {
Logger.getLogger(TestingMDB.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (JMSException ex) {
Logger.getLogger(TestingMDB.class.getName()).log(Level.SEVERE, null, ex);
}
}
} else {
System.out.println("error");
}
} catch (JMSException ex) {
Logger.getLogger(TestingMDB.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
그래서 나는 메시지를 보낼 수 있지만 회신을받을 수 없습니다. 내가 놓치거나 잘못한 것을 도와주세요. 감사합니다.