Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee 未在WebLogic中的MQ ActivationSpecification上设置ejb-jar.xml中的激活配置属性_Jakarta Ee_Weblogic_Ibm Mq_Weblogic12c - Fatal编程技术网

Jakarta ee 未在WebLogic中的MQ ActivationSpecification上设置ejb-jar.xml中的激活配置属性

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被部署并

我试图在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被部署并且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>