【问题标题】:Weblogic EJB connection to external Tibco EMS JMS QueueWeblogic EJB 连接到外部 Tibco EMS JMS 队列
【发布时间】:2015-04-10 19:29:50
【问题描述】:

我正在尝试将 Weblogic (10.3) MDB 连接到 Tibco EMS JMS 队列。我已经使用简单的 Java/Spring JNDI 连接从队列中读取,所以我知道外部 JNDI 查找名称是有效的。 我的 WL 国外服务器详情:

JNDI Initial Context Factory: com.tibco.tibjms.naming.TibjmsInitialContextFactory
JNDI Connection URL: tcp://ems-dit-am-uat-1.app.xxx.net:30055
JNDI Properties:
java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory
java.naming.provider.url=tcp://ems-dit-am-uat-1.app.xxx.net:30055
java.naming.security.principal=rdsuat
java.naming.factory.url.pkgs=com.tibco.tibjms.naming
(password entered in Properties Credential box).

目的地:

Name, Local JNDI Name and Remote JNDI name all set to Q.NY.DERIV.DRD.RFI

连接工厂:

Name, Local JNDI Name and Remote JNDI name all set to DRDRFIQueueConnectionFactory
(which simply changes the default connection factory port).
User/password also set here (same as before).

weblogic-ejb-jar.xml

    <weblogic-enterprise-bean>
    <ejb-name>MessageReceiver</ejb-name>
    <message-driven-descriptor>
        <pool>
            <max-beans-in-free-pool>2</max-beans-in-free-pool>
        </pool>
        <destination-jndi-name>Q.NY.DERIV.DRD.RFI</destination-jndi-name>
        <connection-factory-jndi-name>DRDRFIQueueConnectionFactory</connection-factory-jndi-name>
    </message-driven-descriptor>
</weblogic-enterprise-bean>

我得到的错误是: 消息驱动的 EJB:MessageReceiver 无法连接到 JMS 目标:Q.NY.DERIV.DRD.RFI。错误是: 无法获取分发目的地信息。目标 JNDI 名称为 Q.NY.DERIV.DRD.RFI,提供者 URL 为空

我已经尝试将配置移动到 weblogic-ejb-jar.xml 中(即:

    <weblogic-enterprise-bean>
    <ejb-name>MessageReceiver</ejb-name>
    <message-driven-descriptor>
        <pool>
            <max-beans-in-free-pool>2</max-beans-in-free-pool>
        </pool>
        <destination-jndi-name>Q.NY.DERIV.DRD.RFI</destination-jndi-name>
        <initial-context-factory>com.tibco.tibjms.naming.TibjmsInitialContextFactory</initial-context-factory>
        <provider-url>tcp://ems-dit-am-uat-1.app.xxx.net:30055</provider-url>
        <connection-factory-jndi-name>DRDRFIQueueConnectionFactory</connection-factory-jndi-name>
    </message-driven-descriptor>
</weblogic-enterprise-bean>

但我得到一个不同的错误: 异常激活模块:EJBModule(rfiloader.jar) 无法部署 EJB:来自 rfiloader.jar 的 MessageReceiver:无法找到 tcp://ems-dit-am-uat-1.app.xxx.net:30055 的 EndPointFinder

...有什么想法吗?

谢谢 克里斯

【问题讨论】:

    标签: jms ejb weblogic tibco ems


    【解决方案1】:

    终于实现了 - 由于 Weblogic 10.3 中的一个错误,这并不像应有的那么简单。

    1. 使用所有常规详细信息(目标和连接工厂的本地/远程 JNDI 查找名称)创建一个外部服务器。

    2. 创建一个与远程 EMS 用户同名的本地 WL 用户,包括密码。

    3. 创建 ejb 凭证映射(不是安全凭证映射)

      • 通过单击相关部署执行此操作,单击列表中的相关 ejb 名称,然后单击“安全”选项卡,然后单击“凭据映射”选项卡。
      • 为 WLS 和远程用户添加相同的名称(此处似乎不需要密码)。

    在配置文件中添加以下部分:

    weblogic-ejb-jar.xml

    在此文件的底部,在结束 'weblogic-enterprise-bean' 标记之后和结束 'weblogic-ejb-jar' 标记之前添加以下内容:

    <security-role-assignment>
        <role-name>rficonsumer</role-name>
        <principal-name>rdsuat</principal-name>
    </security-role-assignment>
    

    “rficonsumer”角色仅存在于这 2 个配置文件中,只要在此处描述的所有 3 个部分中保持一致,就可以是任何角色。 主体名称“rdsuat”必须与在 WL 管理控制台部分中创建的用户匹配,并且因此必须与 EMS 队列用户匹配。

    ejb-jar.xml

    1. 在相关 MDB 的“消息驱动”标记部分中,在结束“消息驱动”标记之前的末尾添加以下部分:

      rficonsumer

    2. 在文件的最后,在结束 'enterprise-beans' 标记之后,在结束 'ejb-jar' 结束标记之前添加以下内容:

      rficonsumer

    【讨论】:

    • 感谢您再次关注此问题。