从 ibm-ejb-jar-bnd.xmi 问题将 WebSphere 迁移到 OpenLiberty EJB 3 消息驱动的 Bean

问题描述 投票:0回答:1

在将我们的 2 war 迁移 Ear 从旧的 Websphere 8.x 部署到 OpenLiberty 期间,我遇到了有关 xmi 中意外元素的问题:

[ERROR   ] CWWKZ0002E: An exception occurred while starting the application NAMEOFEAR-1.0.0. The exception message was: com.ibm.ws.container.service.metadata.MetaDataException: com.ibm.wsspi.adaptable.module.UnableToAdaptException: com.ibm.ejs.container.EJBConfigurationException: com.ibm.wsspi.adaptable.module.UnableToAdaptException: com.ibm.ws.javaee.ddmodel.DDParser$ParseException: CWWKC2256E: Unexpected attribute listenerInputPortName encountered parsing element ejbBindings in the NAMEOFEAR-1.0.0.ear : NAMEOFJAR-1.0.0.jar : META-INF/ibm-ejb-jar-bnd.xmi deployment descriptor on line 4.

简单地删除listenerInputPortName属性就可以了,但我确信它会导致之后出现问题?

ibm-ejb-jar-bnd.xmi 看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<ejbbnd:EJBJarBinding xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ejb="ejb.xmi" xmlns:ejbbnd="ejbbnd.xmi" xmi:id="EJBJarBinding_1">
  <ejbJar href="META-INF/ejb-jar.xml#ejb-jar_ID"/>
  <ejbBindings xmi:type="ejbbnd:MessageDrivenBeanBinding" xmi:id="MessageDrivenBeanBinding_1" listenerInputPortName="SMTPMessageListenerPort">
    <enterpriseBean xmi:type="ejb:MessageDriven" href="META-INF/ejb-jar.xml#MessageDriven_1"/>
    <resRefBindings xmi:id="ResourceRefBinding_1" jndiName="mail/SMTPMailSession">
  </ejbBindings>
</ejbbnd:EJBJarBinding>

还有 ejb-jar.xml 示例:

<ejb-jar ...>
    <display-name>ejb</display-name>
    <enterprise-beans>
        <message-driven id="MessageDriven_1">
            <ejb-name>SMTPSender</ejb-name>
            <ejb-class>com.smtp.SMTPSendBean</ejb-class>
            <transaction-type>Container</transaction-type>
            <message-destination-type>javax.jms.Queue</message-destination-type>
            <activation-config>
              ...
            </activation-config>
            <resource-ref id="ResourceRef_1">
              ...
            </resource-ref>
        </message-driven>
    </enterprise-beans>
</ejb-jar>

JMS-resources.xml(我正在使用config-drop ins):

<?xml version="1.0" encoding="UTF-8"?>
<server>
 ...


    <jmsQueueConnectionFactory jndiName="jms/CompanySMTPMessageConnectionFactory">
        <properties.mqJMS
                ...
                transportType="CLIENT"/>
    </jmsQueueConnectionFactory>

    <jmsQueue jndiName="jms/SMTPMessageQueue">
        <properties.mqJMS baseQueueName="Q2"/>
    </jmsQueue>
</server>

我不确定如何将其迁移到 EJB 3.1 并在 OpenLiberty 中运行/部署。

java websphere ejb open-liberty message-driven-bean
1个回答
0
投票

OpenLiberty 中没有

listener port
。 MDB 正在使用
ActiveSpecifications
。您必须更新绑定才能使用 AS 或在
server.xml
中进行。检查在 OpenLiberty 中使用 mdb 的文档(取决于您使用的 jms 提供程序) - https://www.ibm.com/docs/en/was-liberty/base?topic=liberty-deploying-message-driven-beans-内

根据您的附加信息进行更新
查看定义的资源,您似乎正在使用 WebSphere MQ 并希望您的 MDB 连接到队列(尽管您没有提供它们的名称 - 您必须检查 ListenerPorts 配置)。
以下是您需要的一些更改:

<!-- jmsActivationSpec configs -->
<jmsActivationSpec id="my-app-name/MyMessageDrivenBean">
    <properties.mqJms destinationRef="jms/MyQueue"
                      destinationType="javax.jms.Queue"
                      channel="DEV.APP.SVRCONN"
                      hostName="${ibm.mq.hostname}"
                      port="1414"
                      queueManager="QM1"
                      transportType="CLIENT" />
</jmsActivationSpec>

如果您的 QM 需要身份验证,您需要添加这些额外的属性:

                      userName="${ibm.mq.username}"
                      password="${ibm.mq.password}"
activeSpec 中的

id
必须遵循以下命名约定“应用程序名称/模块名称/bean 名称”,在您的情况下,它应该是
id=NAMEOFEAR-1.0.0/ejb/CompanyEventLog

您应该也可以通过

xmi
绑定文件定义此绑定,但我手头没有示例,因为它很旧。您需要 IBM Rational Application Developer,它仍然应该有 xmi 文件的编辑器。

xml
格式中,它看起来像这样:

<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_1.xsd" 
    (http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_1.xsd%27) version="1.1">
    
    <message-driven name="PriceChangeMDBBean">
            <jca-adapter activation-spec-binding-name="PriceChangeAS" destination-binding-name="jms/TriggerQ" />
    </message-driven>
</ejb-jar-bnd>

所以也许可以先尝试

server.xml
中的绑定。

© www.soinside.com 2019 - 2024. All rights reserved.