31.7. 部署 Generic Jakarta 消息传递资源适配器


JBoss EAP 可以配置为与第三方 Jakarta 消息传递提供商合作;然而,并非所有 Jakarta 消息传递提供商都生产用于与 Jakarta 应用平台集成的 Jakarta 消息传递器资源适配器。此流程涵盖配置 JBoss EAP 中包含的通用 Jakarta 消息传递资源适配器以连接 Jakarta 消息传递提供商所需的步骤。在此流程中,Tibco EMS 8 用作 Jakarta 消息传递供应商的示例。其他 Jakarta 消息传递提供商可能需要不同的配置。

重要

在使用通用 Jakarta 消息传递资源适配器之前,请检查 Jakarta 消息传递提供商,了解他们自己的资源适配器可用于 JBoss EAP。只有在 Jakarta 消息传递供应商不提供自己的资源适配器时,才应使用通用 Jakarta Messaging Jakarta Connectors 资源适配器。

在配置通用资源适配器前,您需要执行以下操作:

  • 您的 Jakarta 消息传递供应商服务器必须已经配置好并可供使用。提供商 Jakarta Messaging 实施所需的任何二进制文件都需要。
  • 您将需要了解下列 Jakarta 消息传递提供商属性的值,才能查找其 Jakarta 消息传递资源,如连接工厂、队列或主题。

    • java.naming.factory.initial
    • java.naming.provider.url
    • java.naming.factory.url.pkgs

在此流程中使用的 XML 示例中,这些参数分别写为 PROVIDER_FACTORY_INITIALPROVIDER_URLPROVIDER_CONNECTION_FACTORY。将这些占位符替换为您的环境的 Jakarta 消息传递供应商值。

  1. 创建并配置资源适配器模块。

    创建 JBoss EAP 模块,其中包含连接和与 Jakarta 消息传递提供商通信所需的所有库。此模块将命名为 org.jboss.genericjms.provider

    • 创建以下目录结构: EAP_HOME/modules/org/jboss/genericjms/provider/main
    • 将提供商 Jakarta 消息实施所需的二进制文件复制到 EAP_HOME/modules/org/jboss/genericjms/provider/main

      注意

      对于 Tibco EMS,所需的二进制文件是来自 Tibco 安装的 lib 目录的 tibjms.jar 和 tibcrypt.jar。

    • EAP_HOME/modules/org/jboss/genericjms/provider/main 中创建 module.xml 文件,以资源形式列出前面步骤中的 JAR 文件:

      <module xmlns="urn:jboss:module:1.5" name="org.jboss.genericjms.provider">
        <resources>
          <!-- all jars required by the Jakarta Messaging provider, in this case Tibco -->
          <resource-root path="tibjms.jar"/>
          <resource-root path="tibcrypt.jar"/>
        </resources>
        <dependencies>
          <module name="javax.api"/>
          <module name="javax.jms.api"/>
        </dependencies>
      </module>
      Copy to Clipboard Toggle word wrap
    • 使用以下命令在 ee 子系统中添加模块:

      /subsystem=ee:list-add(name=global-modules, value={"name" => "org.jboss.genericjms.provider", "slot" =>"main"}
      Copy to Clipboard Toggle word wrap
  2. 为 Jakarta 消息传递提供商创建和配置 Java 命名和目录接口外部上下文。

    Jakarta 消息传递资源(如连接工厂和目的地)在 Jakarta 消息传递提供商中查找。在 JBoss EAP 实例中添加外部上下文,以便对此资源的任何本地查找将自动在远程 Jakarta 消息传递提供程序上查找资源。

    注意

    在此过程中,EAP _HOME/standalone/configuration/standalone-full.xml 用作 JBoss EAP 配置文件。

    使用管理 CLI 创建外部 Java 命名和目录接口上下文,并包含其配置属性。以下示例中的属性应当替换为正确的值,以连接远程 Jakarta 消息传递提供程序。例如,一些 Jakarta 消息提供商(如 Tibco EMS)不支持 Java 命名和目录接口 查找(Name) 方法。在这些情况下,添加 org.jboss.as.naming.lookup.by.string 属性,值设为 true 以解决这个问题。检查适配器文档中有关必要属性及其值的信息。

    /subsystem=naming/binding="java:global/remoteJMS":add(binding-type=external-context,module=org.jboss.genericjms.provider,class=javax.naming.InitialContext,environment=[java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory,java.naming.provider.url=tcp://<hostname>:7222,org.jboss.as.naming.lookup.by.string=true])
    Copy to Clipboard Toggle word wrap

    在正确配置了外部上下文后,将对从 java:global/remoteJMS/ 起的资源的任何 Java 命名和目录接口查找在远程 Jakarta 消息传递提供商上完成。例如,如果消息驱动型 Bean 为 java:global/remoteJMS/Queue1 执行 Java 命名和目录接口查找,则外部上下文将连接到远程 Jakarta 消息传递提供程序,并且对 Queue1 资源执行查询。

    或者,您也可以在查找 Java 命名和目录接口名称时,无需 使用外部上下文即可向 远程服务器发出 Java 命名和目录接口查找。为此,可使用 CLI 创建一个引用 external-context 的新绑定,如下例所示:

    /subsystem=naming/binding=java\:\/jms\/queue\/myQueue:add(binding-type=lookup, lookup=java:global/remoteJMS/jms/queue/myQueue)
    Copy to Clipboard Toggle word wrap

    在上例中,对 java:/jms/queue/myQueue 进行 Java 命名和目录接口查找的应用将定位到远程服务器上名为 myQueue 的队列。

  3. 创建通用 Jakarta 消息传递资源适配器。

    使用管理 CLI 创建资源适配器

    /subsystem=resource-adapters/resource-adapter=generic-ra:add(module=org.jboss.genericjms,transaction-support=XATransaction)
    Copy to Clipboard Toggle word wrap
  4. 配置通用 Jakarta 消息传递资源适配器。

    使用管理 CLI 配置资源适配器 的连接定义 和其他元素。

    /subsystem=resource-adapters/resource-adapter=generic-ra/connection-definitions=tibco-cd:add(class-name=org.jboss.resource.adapter.jms.JmsManagedConnectionFactory, jndi-name=java:/jms/XAQCF)
    
    /subsystem=resource-adapters/resource-adapter=generic-ra/connection-definitions=tibco-cd/config-properties=ConnectionFactory:add(value=XAQCF)
    
    /subsystem=resource-adapters/resource-adapter=generic-ra/connection-definitions=tibco-cd/config-properties=JndiParameters:add(value="java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory;java.naming.provider.url=tcp://<hostname>:7222")
    
    /subsystem=resource-adapters/resource-adapter=generic-ra/connection-definitions=tibco-cd:write-attribute(name=security-application,value=true)
    Copy to Clipboard Toggle word wrap
  5. 配置 ejb3 子系统中默认的消息驱动型 Bean 池,以使用通用资源适配器。

    /subsystem=ejb3:write-attribute(name=default-resource-adapter-name, value=generic-ra)
    Copy to Clipboard Toggle word wrap

现在,通用 Jakarta 消息传递资源适配器已被配置并可供使用。以下是在创建新的消息驱动 Bean 时使用资源适配器的示例。

示例:使用通用资源适配器代码

@MessageDriven(name = "HelloWorldQueueMDB", activationConfig = {
  // The generic Jakarta Messaging resource adapter requires the  Java Naming and Directory Interface bindings
  // for the actual remote connection factory and destination
  @ActivationConfigProperty(propertyName = "connectionFactory", propertyValue = "java:global/remoteJMS/XAQCF"),
  @ActivationConfigProperty(propertyName = "destination", propertyValue = "java:global/remoteJMS/Queue1"),
  @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
  @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
  public class HelloWorldQueueMDB implements MessageListener {
  public void onMessage(Message message) {
  // called every time a message is received from the _Queue1_ queue on the Jakarta Messaging provider.
  }
}
Copy to Clipboard Toggle word wrap

重要

使用通用 Jakarta 消息传递资源适配器时,请确保您将会话设置为被转换,以避免出现潜在的 NullPointerException 错误。发生错误的原因是,当 Jakarta EE 规格指出未被处理它们时,通用 Jakarta 消息传递资源适配器尝试处理参数。这可以通过执行以下操作来实现: connection.createSession(true, Session.SESSION_TRANSACTED);

您还可以使用资源适配器的池连接工厂:

@Resource(lookup = "java:/jms/XAQCF")
private ConnectionFactory cf;
Copy to Clipboard Toggle word wrap

无法直接从外部上下文注入资源,但可以注入外部上下文并执行查找。例如,Tibco EMS 代理中部署的队列的查找如下所示:

@Resource(lookup = "java:global/remoteJMS")
private Context context;
...
Queue queue = (Queue) context.lookup("Queue1")
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat