Jakarta ee 未在WebLogic中的MQ ActivationSpecification上设置ejb-jar.xml中的激活配置属性
我试图在WebLogic Server内部配置IBM MQ资源适配器(MQ-RA),以便通过MQ-RA提供的激活规范(ActSpec)从MQ队列管理器(QMgr)向消息驱动bean(MDB)发送入站消息 我遇到的问题是,我在ejb-jar.XML部署描述符中为MDB指定的Jakarta ee 未在WebLogic中的MQ ActivationSpecification上设置ejb-jar.xml中的激活配置属性,jakarta-ee,weblogic,ibm-mq,weblogic12c,Jakarta Ee,Weblogic,Ibm Mq,Weblogic12c,我试图在WebLogic Server内部配置IBM MQ资源适配器(MQ-RA),以便通过MQ-RA提供的激活规范(ActSpec)从MQ队列管理器(QMgr)向消息驱动bean(MDB)发送入站消息 我遇到的问题是,我在ejb-jar.XML部署描述符中为MDB指定的activation-config属性XML定义(特别是ConnectionFactoryLookup和DestinationLookup)没有由WebLogic在MQ-RA提供的ActSpec对象上设置。因此,当MDB被部署并
activation-config属性
XML定义(特别是ConnectionFactoryLookup和DestinationLookup)没有由WebLogic在MQ-RA提供的ActSpec对象上设置。因此,当MDB被部署并且WebLogic根据JCA规范调用endpointActivation
时,它无法连接到MQ队列管理器(QMgr)-因为它试图使用默认连接选项进行连接,而不是使用ConnectionFactoryLookup属性引用的JNDI CF中定义的连接选项
我的理解是,在创建/激活消息端点实例时,EJB容器(WebLogic)应该根据activation config属性
条目向MQ-RA提供一个已配置的ActSpec,该ActSpec上设置了配置信息
因此,我的问题是:
为什么ejb-jar.xml文件中的这些激活配置属性项没有在从MQ-RA创建的ActSpec上设置
(略作旁白:如果我部署一个用于出站消息传递的简单Servlet应用程序,那么这一切都很好,EJB应用程序在从JNDI查找ConnectionFactory和目的地后,使用部署的MQ-RA将消息发送到MQ QMgr。因此,看起来MQ-RA部署正常,其类可用。)
下面,我将解释到目前为止我是如何设置WebLogic服务器的,以及我是如何部署EJB应用程序和MQ-RA的。如果有人能给我提供一些建议或朝着正确的方向轻推,以便我能够成功地针对WebLogic中的MQ-RA部署我的MDB应用程序,我将不胜感激!:-)
使用的产品版本:
WebLogic V12.2.1.2.0
MQ服务器和RA V9.0.0.0
采取的配置步骤:
创建了基于文件的JNDI存储(.bindings)以保存MQ JMS ConnectionFactory和MQ JMS目标对象
在WLS中定义了一个“外部JNDI提供程序”,其初始上下文工厂“com.sun.JNDI.fscontext.RefFSContextFactory”指向my.bindings文件
创建了两个外部JNDI链接,其本地JNDI名称(jms/CF和jms/Dest)映射到my.bindings文件中的远程JNDI名称
将MQ-RA(通过WLS管理控制台上的安装按钮)“部署为应用程序”(而不是库),将其命名为JNDI“mqrajndi”,并将“启用类的全局访问”设置为true
以下是要部署的MDB应用程序的ejb-jar.xml中的一个片段,其中显示了激活配置属性
设置消息驱动
父项的子元素:
目的地了望台
jms/Dest
连接因子lookup
jms/CF
在ejb-jar.xml附带的weblogic-ejb-jar.xml文件中,我使用部署MQ-RA后指定的JNDI名称将MDB绑定到MQ-RA:
基本的
mqrajndi
将MDB作为应用程序部署,并观察到它在endpointActivation
调用期间无法连接到我的QMgr,异常为JMSWMQ0018:无法连接到连接模式为“Client”且主机名为“localhost(1414)”的队列管理器“”
再玩一会儿,我找到了解决办法。在此处发布答案以防对其他人有所帮助:-)
我的ejb-jar.xml文件中列出的激活配置属性
属性都以大写字符开头,例如:
<activation-config-property-name>DestinationLookup</activation-config-property-name>
使WebLogic在MQ-RA ActSpecImpl对象实例上设置它们,以便正确配置
我在服务器日志中找不到任何文档或引用来说明ActSpec属性的第一个字符的大小写很重要,或者任何内容都被忽略了。所以这很烦人,grrrrr
解决这个问题之后,我遇到的第二个小问题是java.lang.ClassCastException,JNDI中的JMS连接工厂通过“connectionFactoryLookup”激活配置属性引用。当我使用基于文件的(.bindings)JNDI时,它没有创建JMS MQ连接工厂实例的权限,因此无法从中提取连接信息。删除此属性并在ejb-jar.xml文件中显式设置主机名、端口和通道:
<activation-config-property>
<activation-config-property-name>port</activation-config-property-name>
<activation-config-property-value>1418</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>channel</activation-config-property-name>
<activation-config-property-value>WEBLOGIC.SVRCONN</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>hostName</activation-config-property-name>
<activation-config-property-value>myhost.mydomain.com</activation-config-property-value>
</activation-config-property>
港口
1418
频道
WEBLOGIC.SVRCONN
主机名
myhost.mydomain.com
你有没有在ejb-jar.xml中使用ejb_3_2 xsd?不确定您是否需要WebLogicEJBJAR中的资源适配器jndi名称。还要注意,在您的描述中,您颠倒了CF JNDI和队列JNDI名称,感谢您指出ejb-jar.xml中的输入错误。在这篇文章中,我简化了他们的JNDI全名,但弄错了。它们在我的实际ejb-jar.xml:-)中是正确的。我需要WebLogicEJBJAR中的资源适配器jndi名称来将MDB应用程序绑定到已部署的MQ-RA。没有它,WebLogic甚至都不会尝试激活它。我跟着。我尝试了ejb_3_2 xsd和ejb_2_1 xsd,但两种方法都不适用于我?为什么需要资源适配器?我使用以下链接实现了这样的MDB:但我肯定遗漏了什么。您是否有与您观察到的JMSWMQ0018
错误一起出现的链接MQ异常?在您尝试连接的同时,队列管理器AMQERR01.LOG是否有任何内容?链接的异常只是一个so
<activation-config-property>
<activation-config-property-name>port</activation-config-property-name>
<activation-config-property-value>1418</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>channel</activation-config-property-name>
<activation-config-property-value>WEBLOGIC.SVRCONN</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>hostName</activation-config-property-name>
<activation-config-property-value>myhost.mydomain.com</activation-config-property-value>
</activation-config-property>