WildFly 10 с WebSphere MQ 9: ошибка развертывания onMessage MDB - PullRequest
1 голос
/ 14 марта 2019
  1. У меня есть MDB для использования сообщения очереди в Jboss EAP 7.0.6 GA, IBM MQ 9
    package com.ryzorbent.demo.jms;

    import javax.ejb.ActivationConfigProperty;
    import javax.ejb.MessageDriven;
    import javax.ejb.TransactionAttribute;
    import javax.jms.JMSException;

    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.TextMessage;

    import org.jboss.ejb3.annotation.ResourceAdapter;

    @MessageDriven(name="EFRSTestMDB", activationConfig = {
            @ActivationConfigProperty(propertyName = "destinationType",propertyValue = "javax.jms.Queue"),
            @ActivationConfigProperty(propertyName = "useJNDI", propertyValue = "false"),
            @ActivationConfigProperty(propertyName = "hostName", propertyValue = "localhost"),
            @ActivationConfigProperty(propertyName = "port", propertyValue = "1414"),
            @ActivationConfigProperty(propertyName = "channel", propertyValue = "SYSTEM.DEF.SVRCONN"),
            @ActivationConfigProperty(propertyName = "queueManager", propertyValue = "EFRS_UAT"),
            @ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/queue/QUEUE"),
            @ActivationConfigProperty(propertyName = "transportType", propertyValue = "CLIENT")
        })

    @ResourceAdapter(value = "wmq.jmsra.rar")
    //@TransactionAttribute(value = "NoTransaction")

    public class EFRSTestMDB implements MessageListener {


        @Override
        public void onMessage(Message inMessage) {
            TextMessage message = (TextMessage)inMessage;
            try {
                System.out.println(String.format("Hello, %s", message.getText()));
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }

    }
Я скопировал wmq.jmsra.rar в ../standalone/deployments Добавил подсистему адаптеров ресурсов для очередей, каналов и т. Д. В автономный полный.xml Но я получаю ошибку ниже
java.lang.NoClassDefFoundError: Failed to link com/ryzorbent/demo/jms/EFRSTestMDB (Module "deployment.TestJbossMDB.jar:main" from Service Module Loader): javax/jms/MessageListener

Ответы [ 2 ]

1 голос
/ 14 марта 2019

wmq.jmsra.rar не содержит классов API JMS, таких как javax/jms/MessageListener из вашей ошибки.В Ограничения и известные проблемы говорится:

Внедрение адаптера ресурсов IBM WebSphere MQ 7.5 не загружает модуль javax.jms.api для вашего развертывания.Он также не обеспечивает поддержку новых аннотаций Jave EE 7, таких как @JMSConnectionFactoryDefinitions, @JMSDestinationDefinition.Для включения необходимо иметь подсистему Messaging-ActiveMQ в конфигурации.Если вы не хотите, чтобы сервер обмена сообщениями JBoss EAP запускался, добавьте пустую подсистему Messaging-ActiveMQ.

Таким образом, вы должны добавить JMS-файлы API, как описано выше.

0 голосов
/ 19 марта 2019

hПри использовании обмена сообщениями IBM MQ всегда начинайте с «полного» файла конфигурации сервера, такого как standalone-full.xml.«Полные» файлы конфигурации включают сообщения JMS.

В качестве примечания, я вижу, что ваша спецификация активации имеет:

        @ActivationConfigProperty(propertyName = "useJNDI", propertyValue = "false"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/queue/QUEUE"),

Итак, вы используете JNDI для false, но затем у вас есть пункт назначенияэто точно выглядит как имя JNDI.Если для useJNDI задано значение false, имя назначения - это имя очереди на стороне IBM MQ - обычно со всеми заглавными буквами, как у вашего администратора очередей и канала.

...