Бины, управляемые сообщениями, в Open Liberty 19.0.0.3 не активируются при доступе к ActiveMQ - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть сервер приложений OpenLiberty, который обращается к Active MQ 5.15.18 через адаптер ресурсов, но я не могу правильно настроить спецификацию активации, поэтому MDB активируется при поступлении нового сообщения.

Приложение может помещать сообщения в очередь вывода, однако MDB не активируется, когда в очередь ввода поступают новые сообщения.Тот же код работает в локально созданных очередях через встроенного локального провайдера (WLP в качестве JMS-сервера, ActiveMQ не задействован).

Я пробовал несколько фрагментов кода, выбранных из-за переполнения стека, моя проблема выглядит примерно так: WebSphere Liberty ActiveMQ , но тот же рецепт не работает для меня.

Это мой код MDB:

@MessageDriven(name = "MyMDB",
        activationConfig = {  
           @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),  
           @ActivationConfigProperty(propertyName="destination", propertyValue="APP1_QIN"),  
           @ActivationConfigProperty(propertyName="acknowledgeMode", propertyValue="Auto-acknowledge")  
        })
public class MyMDB implements MessageListener {

    @PostConstruct
    public void postConstruct() {
        System.out.println("Init MDB");
    }

    @Override
    public void onMessage(Message message) {
        System.out.println("Message received in MDB: " + message);
    }

    @Resource
    MessageDrivenContext ejbcontext;
    @SuppressWarnings("unused")
    private void setMessageDrivenContext(EJBContext ejbcontext) {
    }

}

Ниже моего server.xml:

<server description="defaultServer">
    <featureManager>
        <feature>webProfile-7.0</feature>
        <feature>localConnector-1.0</feature>
        <feature>wasJmsClient-2.0</feature>
        <feature>jca-1.7</feature>
    </featureManager>

    ...

    <resourceAdapter id="ActiveMQResourceAdapter" location="/path/to/libs/activemq-rar-5.15.8.rar">
        <properties.ActiveMQResourceAdapter ServerUrl="tcp://localhost:61616" />
    </resourceAdapter>

    <jmsQueueConnectionFactory connectionManagerRef="QueueConnMgr" jndiName="jms/QCF">  
        <properties.ActiveMQResourceAdapter />      
    </jmsQueueConnectionFactory>    

    <jmsQueue id="APP1_QIN" jndiName="jms/APP1_QIN">
        <properties.ActiveMQResourceAdapter PhysicalName="APP1_QIN" />
    </jmsQueue>

    <jmsQueue id="APP1_QOUT" jndiName="jms/APP1_QOUT">
        <properties.ActiveMQResourceAdapter PhysicalName="APP1_QOUT" />
    </jmsQueue>

     <jmsActivationSpec id="MyMDB">     
        <properties.ActiveMQResourceAdapter/> <!--  destination="APP1_QIN"   -->
    </jmsActivationSpec>

    <connectionManager id="QueueConnMgr" maxPoolSize="5"/>
</server>

Я ожидаю, что MDB правильно активируется, как только приходят сообщения, но это не так.Кроме того, глядя на консоль ActiveMQ, кажется, что в этой очереди нет потребителей.

Есть идеи?

1 Ответ

0 голосов
/ 16 апреля 2019

Похоже, ваш идентификатор AS может быть неверным, он должен быть в следующей форме: <activationSpec id="app1/module1/MyMessageDrivenBean"> с правильным именем приложения, модуля и компонента, управляемого сообщениями.

Дополнительные сведения о настройке AS см. Здесь Настройка спецификации активации JCA

...