我有一个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控制台,此队列似乎没有消费者。
有任何想法吗?
看起来您的AS id可能不正确,它应该采用以下形式:<activationSpec id="app1/module1/MyMessageDrivenBean">
,其中包含应用程序,模块和消息驱动bean的正确名称。
在这里查看更多有关配置AS的详细信息Configuring JCA activation specifications