JMS и MessageDriven EJB Bean - PullRequest
       5

JMS и MessageDriven EJB Bean

1 голос
/ 06 февраля 2012

У меня проблема с управляемым сообщениями EJB.У меня также есть веб-служба приложений и EJB-приложение, которое содержит MessageDrivenBean.

Для отправки сообщения в JMS я использую ObjectMessage: Вот мой код:

        Connection connection = connectionFactory.createConnection();
        Session session = connection.createSession(false, 1);
        MessageProducer messageProducer = session.createProducer(queue);
        ObjectMessage outMessage = session.createObjectMessage();
        outMessage.setObject(((Serializable) operation));
        LOGGER.debug("Sending message...");
        messageProducer.send(outMessage);
        LOGGER.debug("Sending message: done.");
        messageProducer.close();
        session.close();
        connection.close();

Когда я вызываю свой веб-сервисЯ также называю этот метод.Сообщение поступает в MDB и начинает обрабатываться.Вот мой код MDB:

    @MessageDriven(mappedName = "jms/cbsDestination", activationConfig = {
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
    public class OperationsBackgroundService implements MessageListener {
          //Some code....
         public void onMessage(Message message) {
    LOGGER.debug("Got message: " + message.toString());
    if (message instanceof ObjectMessage) {

        ObjectMessage objectMessage = (ObjectMessage) message;
        Operation operation = null;
    }

Все нормально, я получаю сообщение, оно начинает обрабатываться и заканчивается, как я ожидаю.

Но проблема в том, что: когда я отправляю первое сообщение в MDB, он начинает его обрабатывать (ОК), затем, когда первое сообщение обрабатывается, я отправляю второе сообщение в свой MDB, и он также начинает его обрабатывать.Я знаю, что для JMS характерно то, что, если я отправляю одно сообщение и оно обрабатывает, другие сообщения ждут, пока первое не будет обработано.Или я что-то здесь упускаю?Пожалуйста помоги.Может быть, есть некоторые свойства, которые я забыл установить?

Заранее спасибо ID.

1 Ответ

1 голос
/ 06 февраля 2012

Ваш сервер приложений создал более одного экземпляра OperationsBackgroundService и зарегистрировал каждый экземпляр в качестве потребителя.Каждый потребитель может обрабатывать только одно сообщение за раз, но когда, скажем, 2 потребителя, 2 сообщения могут обрабатываться одновременно.Это функция, а не ошибка.

Если вы хотите добиться однопоточной обработки, просто попросите сервер приложений создать только одного потребителя на MDB.Обратитесь к документации сервера приложений, чтобы узнать, как это можно настроить.

...