【问题标题】:JMS message consumption isn't happening outside of a beanJMS 消息消费不会发生在 bean 之外
【发布时间】:2012-01-17 03:22:01
【问题描述】:

我正在运行 Glassfish Web 进程,我需要一个非容器托管类 (EJBUserManager) 才能接收来自 MessageDrivenBean 的消息。该类具有javax.jms.Queues 和连接工厂,我可以写入队列。队列发送到正确接收代码的MessageDrivenBean (AccountValidatorBean),然后写回一条消息。但是EJBUserManager 尝试从队列中读取并且从未收到消息。

@Override
public boolean doesExist(String username) throws FtpException {
    LOGGER.finer(String.format("Query if username %s exists", username));

    QueueConnection queueConnection = null;
    boolean doesExist = false;

    try {
        queueConnection = connectionFactory.createQueueConnection();
        final UserManagerMessage userManagerMessage = 
            new UserManagerMessage(UserManagerQueryCommands.VALIDATE_USER, username);
        final Session session = queueConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        final ObjectMessage objectMessage = session.createObjectMessage(userManagerMessage);
        session.createProducer(accountValidatorQueue).send(objectMessage);
        session.close();
        queueConnection.close();
        queueConnection = connectionFactory.createQueueConnection();
        final QueueSession queueSession = 
            queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

        LOGGER.finest(String.format("Right before doesExist receive for username %s", username));
        final Message firstAttemptMessage = queueSession.createConsumer(userManagerQueue).receive(3000);
        final Message message = firstAttemptMessage != null ? 
                firstAttemptMessage : queueSession.createConsumer(userManagerQueue).receiveNoWait();
        LOGGER.finest(String.format("Right after doesExist receive for username %s", username));
        LOGGER.finest(String.format("Is the message null: %b", message != null));
        if (message != null && message instanceof StreamMessage) {

            final StreamMessage streamMessage = (StreamMessage) message;
            doesExist = streamMessage.readBoolean();
        }

    } catch (JMSException e) {
        e.printStackTrace();
    } finally {
        if (queueConnection != null) {
            try {
                queueConnection.close();
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    }

    return doesExist;
}

以上是来自EJBUserManager的代码。现在,它可以发送到accountValidatorQueue。它只是从未收到来自userManagerQueue

这是AccountValidatorBean的代码

private void validateUser(final String username) {
    QueueConnection queueConnection = null;
    final String doctype = doctypeLookupDAO.getDocumentTypeForUsername(username);
    LOGGER.finest(String.format("Doctype %s for username %s", doctype, username));


    try {
        queueConnection = queueConnectionFactory.createQueueConnection();
        final Session session = queueConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);


        //final StreamMessage message = session.createStreamMessage();
        //message.clearBody();
        //message.writeBoolean(doctype != null);
        //message.reset();
        final ObjectMessage message = session.createObjectMessage(Boolean.valueOf(doctype != null));

        final MessageProducer messageProducer = 
            session.createProducer(userManagerQueue);
        LOGGER.finest(String.format("Queue name %s of producing queue", userManagerQueue.getQueueName()));
        messageProducer.send(message);

        LOGGER.finest(String.format("Sending user validate message for user %s", username));
        messageProducer.close();
        session.close();
    } catch (JMSException e) {
        e.printStackTrace();

    } finally {
        if (queueConnection != null) {
            try {
                queueConnection.close();
            } catch (JMSException e1) {
                e1.printStackTrace();
            }
        }
    }
}

【问题讨论】:

    标签: glassfish queue jms


    【解决方案1】:

    已修复。我需要调用 QueueConnection.start() 来使用队列中的消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-08
      • 2020-03-18
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 2013-02-21
      • 2014-09-06
      • 2011-12-22
      相关资源
      最近更新 更多