如何在没有激活规范或侦听器端口的情况下将消息驱动的 bean 连接到 WebSphere MQ 队列

How to connect message-driven bean to WebSphere MQ queue without activation specification or listener port

我的消息驱动 bean:

@MessageDriven(
    activationConfig = { @ActivationConfigProperty(
            propertyName = "destination",     propertyValue = "jms/mytestqueue"), @ActivationConfigProperty(
            propertyName = "destinationType", propertyValue = "javax.jms.Queue")
    })
public class MessageQueueInputBean implements MessageListener {
    @Override
    public void onMessage(Message msg) {

位于 Web 应用程序中

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <display-name>Test WebApp</display-name>

我的目标是将 MDB 连接到 MQ 队列和 MQ 连接工厂。然而,在这个星座中,我只得到了可怕的信息

REQUIRED_BINDING_NOT_FOUND for MDB

在 WebSphere 8.5.5 上部署时。

因此我创建了文件 ibm-ejb-jar-bnd.xml,这导致部署成功:

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd" version="1.0">
    <message-driven name="MessageQueueGuidewireBatchInputBean">
        <jca-adapter activation-spec-binding-name="jms/myTestActivationSpecification" />
    </message-driven>
</ejb-jar-bnd>

显然这个配置只允许jca-adapter,它指的是WAS中的"activation specification",或者监听端口。

我的问题是,据我所知,在目标系统(由不同公司的人维护)中没有激活规范。而是有一个队列和一个连接工厂。

是否可以仅参考队列和连接工厂部署 MDB?

没有。您不只是连接到端点。您还连接到一个线程池,其中的线程将用于分派您的 MDB(具有所有可用的正常服务质量和 API)。这就是为什么您需要激活规范或侦听器端口的额外构造。