Weblogic EJB连接到外部Tibco EMS JMS队列

时间:2011-07-25 14:54:50

标签: jms ejb weblogic tibco ems

我正在尝试将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找到EndPointFinder://ems-dit-am-uat-1.app.xxx.net:30055

......任何想法?

由于 克里斯

1 个答案:

答案 0 :(得分:2)

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

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

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

  3. 创建ejb凭据映射(NOT安全凭证映射)

    • 通过单击相关部署,单击列表中的相关ejb名称,然后单击Security选项卡,然后单击Credentials Mapping选项卡。
    • 为WLS和远程用户添加相同的名称(此处似乎不需要密码)。
  4. 在配置文件中添加以下部分:

    <强> 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'角色仅存在于这两个配置文件中,只要它在此处描述的所有3个部分中都是一致的,就可以是任何内容。 主体名称“rdsuat”必须与在WL管理控制台部分中创建的用户匹配,因此必须与EMS队列用户匹配。

    <强> EJB-jar.xml中

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

                   rficonsumer     

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

                   rficonsumer