8.11. 集群环境中的 EJB 事务


如果客户端代码调用集群 EJB,则会自动设置集群关联性。如果您在客户端管理事务,您可以选择以集群中的特定节点为目标,或者 允许客户端精细选择集群节点来处理事务。本节描述了这两个选项。

EJB 事务针对特定节点

您可以针对集群中的特定节点来按照以下步骤处理事务。

  1. 在创建 InitialContext 时,使用 PROVIDER_URL 属性指定目标集群节点地址。

    props.put(Context.PROVIDER_URL, "remote+http://127.0.0.1:8080");
    ...
    InitialContext ctx = new InitialContext(props);
    Copy to Clipboard Toggle word wrap
  2. 在客户端中,从 InitialContext 查找 the txn:RemoteUserTransaction

    UserTransaction ut = (UserTransaction)ctx.lookup("txn:RemoteUserTransaction");
    Copy to Clipboard Toggle word wrap

    您可以通过将 PROVIDER_URL 属性设置为服务器的 URL,然后查找 up txn:User Transaction,然后查找 ttxn:UserTransaction,如下代码示例所示:

    final Hashtable<String, String> jndiProperties = new Hashtable<>();
    jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
    jndiProperties.put(Context.PROVIDER_URL, "remote+http://localhost:8080");
    final Context context = new InitialContext(jndiProperties);
    
    SecuredEJBRemote reference = (SecuredEJBRemote) context.lookup("txn:UserTransaction");
    Copy to Clipboard Toggle word wrap

    在实际调用发生之前,UserTransaction 不会绑定到任何特定的目的地。在调用时,此 UserTransaction 绑定到整个事务生命周期中的相应目标。

    在开始 UserTransaction 前,您不需要知道节点名称或目的地。org.jboss.ejb.client.EJBClient.getUserTransaction() 方法为您提供一个远程 UserTransaction,它可根据第一次调用自动选择其目的地。从 Java 命名和目录接口查找远程 UserTransaction 的效果也相同。

    注意

    org.jboss.ejb.client.EJBClient.getUserTransaction() 方法已弃用。

  3. 当事务开始时,在事务期间,所有 EJB 调用都会绑定到该特定节点,从而建立服务器关联性。
  4. 事务结束时,服务器关联性将被释放,EJB 代理返回到一般集群关联性。

EJB 事务 Lazily 选择节点

您可以允许客户端在与事务相关的第一次调用期间轻松选择集群节点来处理事务。这允许在群集间对事务进行负载平衡。要使用这个选项,请按照以下步骤操作。

  1. 不要在用于调用 EJB 的 InitialContext 中指定 PROVIDER_URL 属性。
  2. 在客户端中,从 InitialContext 查找 the txn:RemoteUserTransaction

    UserTransaction ut = (UserTransaction)ctx.lookup("txn:RemoteUserTransaction");
    Copy to Clipboard Toggle word wrap
  3. 当事务开始时,将自动选择一个群集节点,建立服务器关联性,并在事务期间将所有 EJB 调用与该特定节点绑定。
  4. 事务结束时,服务器关联性将被释放,EJB 代理返回到一般集群关联性。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat