У меня есть сервер приложений 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, кажется, что в этой очереди нет потребителей.
Есть идеи?