7.8. OpenShift 上的 EJB 移除
要使 JBoss EAP 正确处理 OpenShift 上的不同 JBoss EAP 集群之间的 EJB 远程调用,您必须了解 OpenShift 上的 EJB 远程配置选项。
在 OpenShift 上部署时,请考虑使用 EAP 操作器:EAP 操作器使用 StatefulSet
来适当处理 EJB 远程处理和事务恢复处理。StatefulSet 确保
持久性存储和网络主机名的稳定性,即使在 pod 重启后也是如此。
当使用带有事务传播的 EJB 远程调用联系 JBoss EAP 实例时,需要保持网络主机名稳定性。即使 pod 重新启动,也必须在同一主机名下访问 JBoss EAP 实例。事务管理器是一个有状态的组件,可将持久交易数据绑定到特定的 JBoss EAP 实例。由于事务日志绑定到特定的 JBoss EAP 实例,它必须在同一实例中完成。
为防止使用 JDBC 事务日志存储时数据丢失,请确保您的数据库提供一致的数据读取和写入。当数据库横向扩展时,数据读写的一致性非常重要。
EJB 远程调用器有两个选项可用于配置远程调用:
- 定义远程出站连接。如需更多信息,请参阅配置远程出站连接。
- 将编程 JNDI 查找用于远程服务器上的 Bean。如需更多信息,请参阅 使用远程 EJB 客户端。
您必须根据 EJB 远程调用配置方法重新配置代表目标节点地址的值。
远程调用的目标 EJB 的名称必须是第一个容器集的 DNS 地址。
StatefulSet
强制取决于 pod 的顺序。容器集按照预定义的顺序命名。例如,如果您将应用缩放为三个副本,您的容器集的名称为 eap-server-0
、eap-server-1
和 eap-server-2
。
EAP 操作器也使用无头服务来确保为 pod 分配特定的 DNS 主机名。如果应用使用 EAP 操作器,则会使用名称(如 eap-server-headless
)创建无头服务。在本例中,第一个容器集的 DNS 名称为 eap-server-0.eap-server-headless
。
使用主机名 eap-server-0.eap-server-headless
可确保 EJB 调用到达与集群连接的任何 EAP 实例。Bootstrap 连接用于初始化 EJB 客户端,它将在下一步收集 EAP 集群的结构。
7.8.1. 在 OpenShift 中配置 EJB
您必须配置充当 EJB 远程调用者的 JBoss EAP 服务器。目标服务器必须配置有权接收 EJB 远程调用的用户。
先决条件
- 您已使用 EAP 操作器和支持的 JBoss EAP for OpenShift S2I 镜像在 OpenShift 上部署和管理 JBoss EAP 应用实例。
- 集群设置正确。有关 JBoss EAP 集群的更多信息,请参阅集群部分。
流程
在目标服务器中创建有权接收 EJB 远程调用的用户:
$JBOSS_HOME/bin/add-user.sh
配置调用者 JBoss EAP 应用服务器。
-
使用自定义配置功能,在
$JBOSS_HOME/standalone/configuration
中创建eap-config.xml
文件。如需更多信息,请参阅自定义配置。 使用
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>
-
使用自定义配置功能,在