【问题标题】:Adding ActiveMQ as a JMS Provider, Topic Connection Factory and Topic definitions添加 ActiveMQ 作为 JMS 提供者、主题连接工厂和主题定义
【发布时间】:2020-12-27 16:30:31
【问题描述】:

我正在尝试将 ActiveMQ 添加为 Websphere Application Server 中的 JMS 提供程序。

我已按照ActiveMQ 5.11 with WebSphere Application Server 8.5 此处描述的说明进行操作并适应了该主题。

很遗憾,我不确定需要在外部 JNDI 名称中为主题连接工厂和主题定义添加什么。

根据 IBM 文档:

"External JNDI Name 用于将队列绑定到的 JNDI 名称 应用服务器名称空间。

按照惯例,使用完全限定的 JNDI 名称;例如,在 jms/Name 形式,其中 Name 是资源的逻辑名称。

此名称用于链接平台绑定信息。这 绑定将部署描述符定义的资源关联起来 将模块的实际(物理)资源绑定到 JNDI 中 平台。”

据我了解,这应该是我在应用程序中用来访问 WAS 中定义的资源的名称。

我还在我的部署描述符中添加了资源作为资源。

任何帮助将不胜感激。

问候

【问题讨论】:

    标签: websphere activemq


    【解决方案1】:

    假设您通过资源引用(在部署描述符中定义)访问资源,配置的 JNDI 名称应与资源引用中定义的查找名称匹配。

    例如,如果您的资源引用如下所示,

      <resource-ref>
        <res-ref-name>java:comp/env/jms/topicConnectionFactoryRef</res-ref-name>
        <res-type>javax.jms.TopicConnectionFactory</res-type>
        <lookup-name>jms/myTopicConnectionFactory</lookup-name>
      </resource-ref>
    

    或者如果您的资源引用缺少查找名称,而您有一个带有绑定名称的 ibm-web-bnd.xml 文件,

      <resource-ref name="java:comp/env/jms/topicConnectionFactoryRef"
                    binding-name="jms/myTopicConnectionFactory">
      </resource-ref>
    

    然后将 jms/myTopicConnectionFactory 指定为 JNDI 名称。 应用程序代码将能够做到:

    TopicConnectionFactory tcf = InitialContext.doLookup("java:comp/env/jms/topicConnectionFactoryRef");
    

    应用程序代码还可以执行 JNDI 名称的直接查找,如下所示(尽管使用资源引用是首选,因为它更符合规范和跨应用服务器的标准),

    TopicConnectionFactory tcf = InitialContext.doLookup("jms/myTopicConnectionFactory");
    

    这同样适用于 javax.jms.Topic。 如果部署描述符中的资源环境引用如下所示,

      <resource-env-ref>
        <resource-env-ref-name>java:comp/env/jms/topicRef</resource-env-ref-name>
        <resource-env-ref-type>javax.jms.Topic</resource-env-ref-type>
        <lookup-name>jms/myTopic</lookup-name>
      </resource-env-ref>
    

    或者如果您的资源引用缺少查找名称,而您有一个带有绑定名称的 ibm-web-bnd.xml 文件,

      <resource-ref name="java:comp/env/jms/topicRef" binding-name="jms/myTopic">
      </resource-ref>
    

    然后将 jms/myTopic 指定为主题的 JNDI 名称。 应用程序代码将能够做到:

    Topic topic = InitialContext.doLookup("java:comp/env/jms/topicRef");
    

    一些优化/特殊情况: 如果您既没有查找名称也没有绑定名称,那么 WebSphere Application Server 通过资源引用名称计算默认绑定。如果您的资源引用是这种情况,那么您将拥有一个部署描述符,如下所示,没有任何绑定文件,

      <resource-ref>
        <res-ref-name>jms/myTopicConnectionFactory</res-ref-name>
        <res-type>javax.jms.TopicConnectionFactory</res-type>
      </resource-ref>
    

    在上述情况下,将 jms/myTopicConnectionFactory 指定为 JNDI 名称。 应用程序将能够将其查找为,

    TopicConnectionFactory tcf = InitialContext.doLookup("java:comp/env/jms/myTopicConnectionFactory");
    

    【讨论】:

      猜你喜欢
      • 2012-01-14
      • 2015-05-02
      • 1970-01-01
      • 2015-12-13
      • 2015-04-06
      • 1970-01-01
      • 2011-10-20
      • 2013-11-10
      • 2018-01-15
      相关资源
      最近更新 更多