7.12. Jakarta Enterprise Beans on OpenShift 的 Remoting

要使 JBoss EAP 能够在 OpenShift 上的不同 JBoss EAP 集群之间正确地使用企业 bemoting 调用,您必须了解 OpenShift 上的企业 bean remoting 配置选项。

注意

在 OpenShift 上部署时,请考虑使用 EAP 操作器。EAP 操作员使用 StatefulSet 来处理企业 bean remoting 和事务恢复处理。StatefulSet 确保持久性存储和网络主机名稳定性,即使 pod 重启后也是如此。

使用企业级 bean 远程调用和事务传播联系时,需要网络主机名稳定性。即使 pod 重启,OpenShift EAP 实例也必须在相同的主机名下访问。事务管理器(一个有状态组件)将持久的事务数据绑定到特定的 JBoss EAP 实例。由于事务日志绑定到特定的 JBoss EAP 实例,它必须在同一实例中完成。

要在使用 JDBC 事务日志存储时防止数据丢失,请确保您的数据库提供了数据一致性的读取和写入。当数据库通过多个实例水平扩展时,一致的数据读取和写入非常重要。

企业 bean 远程调用者有两个选项来配置远程调用:

您必须根据企业 bean 远程调用配置方法重新配置代表目标节点地址的值。

注意

远程调用的目标企业级名称必须是第一个 pod 的 DNS 地址。

StatefulSet 的行为取决于 pod 的排序。pod 以预定义的顺序命名。例如,如果您将应用扩展到三个副本,您的 pod 的名称为 eap-server-0eap-server-1eap-server-2

EAP 操作器也使用 无头服务 来确保特定的 DNS 主机名被分配给 pod。如果应用使用 EAP 操作器,则使用名称(如 eap-server-headless )创建一个无头服务。在本例中,第一个 pod 的 DNS 名称为 eap-server-0.eap-server-headless

使用 hostname eap-server-0.eap-server-headless 可确保企业 bean 调用到达连接到集群的任何 EAP 实例。bootstrap 连接用于初始化 Jakarta Enterprise Beans 客户端,它将 EAP 集群的结构收集为下一步。

7.12.1. 在 OpenShift 上配置 Jakarta Enterprise Beans

您必须配置作为企业级补救的调用者的 JBoss EAP 服务器。目标服务器必须配置有权限的用户,才能接收企业 bean 远程调用。

先决条件

  • 您已使用 EAP 操作器和支持的 OpenShift S2I 镜像,用于在 OpenShift 中部署和管理 JBoss EAP 应用实例。
  • 集群设置正确。有关 JBoss EAP 集群的更多信息,请参阅集群部分。

流程

  1. 在目标服务器上创建一个用户,并有权接收企业 bean 远程调用:

    $JBOSS_HOME/bin/add-user.sh
  2. 配置调用 JBoss EAP 应用服务器。

    1. 使用自定义配置功能,在 $JBOSS_HOME/standalone/configuration 中创建 eap-config.xml 文件。如需更多信息,请参阅 自定义配置
    2. 使用 wildfly.config.url 属性配置调用器 JBoss EAP 应用服务器:

      JAVA_OPTS_APPEND="-Dwildfly.config.url=$JBOSS_HOME/standalone/configuration/eap-config.xml"
      注意

      如果您的配置使用以下示例,请将 >>PASTE_…​_HERE<< 替换为您配置的用户名和密码。

      配置示例

      <configuration>
         <authentication-client xmlns="urn:elytron:1.0">
            <authentication-rules>
               <rule use-configuration="jta">
                  <match-abstract-type name="jta" authority="jboss" />
               </rule>
            </authentication-rules>
            <authentication-configurations>
               <configuration name="jta">
                  <sasl-mechanism-selector selector="DIGEST-MD5" />
                  <providers>
                     <use-service-loader />
                  </providers>
                  <set-user-name name="PASTE_USER_NAME_HERE" />
                  <credentials>
                     <clear-password password="PASTE_PASSWORD_HERE" />
                  </credentials>
                  <set-mechanism-realm name="ApplicationRealm" />
               </configuration>
            </authentication-configurations>
         </authentication-client>
      </configuration>