MDB nie wysyla Message

0

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");

        }
    }
}
0

Jak sie okazalo jakis inny MDB, ktory byl na serwerze kradl wiadomosci z errorQueue :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1