Witam
Zaimplementowalem sobie prosty przyklad z MessageDriver Bean dla celow naukowych.
Wiem, ze MDB odbiera wiadomosci. Co jakis czas pojawia sie komunikat w logach Glassfish w NetBeans: "INFO: MESSAGE BEAN: Message received: testowa". Tez dziwne ze raz sie pojawi raz nie.
Problem polega na tym, ze MDB nie przesyla wiadomosci z powrotem do clienta :/
Co moze byc nie tak?
MDB:
@MessageDriven(mappedName = "jms/TestQueue", activationConfig = {
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
public class TestBean implements MessageListener {
public TestBean() {
}
@Override
public void onMessage(Message message) {
try {
Connection conn = connectionFactory.createConnection();
conn.start();
Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
TextMessage msg = (TextMessage) message;
TextMessage msgToSend = session.createTextMessage();
if (msg.getText().contains("[0-9]")) {
msgToSend.setText("Number Not Allowed");
}
else {
msgToSend.setText("All OK");
}
MessageProducer producer = session.createProducer(errorQueue);
producer.send(msgToSend);
conn.close();
} catch (JMSException ex) {
ex.printStackTrace();
}
}
@Resource
private MessageDrivenContext context;
@Resource(mappedName="jms/errorQueue")
private Queue errorQueue;
@Resource(mappedName="jms/TestQueueFactory")
private javax.jms.ConnectionFactory connectionFactory;
}
Kod clienta:
public class Main implements MessageListener{
@Resource(mappedName = "jms/TestQueue")
private static Queue testQueue;
@Resource(mappedName = "jms/errorQueue")
private static Queue errorQueue;
@Resource(mappedName= "jms/TestQueueFactory")
private static ConnectionFactory testQueueFactory;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try {
Main m = new Main();
System.out.println("Test");
Connection conn = testQueueFactory.createConnection();
Session sess = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);
Session sessReceiver = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = sess.createProducer(testQueue);
MessageConsumer consumer = sessReceiver.createConsumer(errorQueue);
consumer.setMessageListener(m);
TextMessage message = sess.createTextMessage();
message.setText("testowa");
producer.send(message);
sess.commit();
sess.close();
conn.close();
}
catch (JMSException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void onMessage(Message message) {
try {
TextMessage msg = (TextMessage) message;
System.out.println(msg.getText());
}
catch (JMSException ex) {
System.out.println("blad");
}
}
}