在将我们的 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 中运行/部署。
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 配置)。
以下是您需要的一些更改:
<feature>jmsMdb-3.2</feature>
<!-- 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
中的绑定。