8.11. 集群环境中的 Jakarta Enterprise Beans 事务
如果客户端代码调用集群 Jakarta Enterprise Beans,则会自动设置集群关联性。如果您在客户端管理事务,您可以选择以 集群中的特定节点为目标, 或者 允许客户端精细选择集群节点来处理事务。本节描述了这两个选项。
Jakarta Enterprise Beans Transactions 以特定节点为目标
您可以针对集群中的特定节点来按照以下步骤处理事务。
在创建
InitialContext时,使用PROVIDER_URL属性指定目标集群节点地址。props.put(Context.PROVIDER_URL, "remote+http://127.0.0.1:8080"); ... InitialContext ctx = new InitialContext(props);
props.put(Context.PROVIDER_URL, "remote+http://127.0.0.1:8080"); ... InitialContext ctx = new InitialContext(props);Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在客户端中,从
InitialContext查找 thetxn:RemoteUserTransaction。UserTransaction ut = (UserTransaction)ctx.lookup("txn:RemoteUserTransaction");UserTransaction ut = (UserTransaction)ctx.lookup("txn:RemoteUserTransaction");Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以通过将
PROVIDER_URL属性设置为服务器的 URL,然后查找 uptxn:User,如下代码示例所示:Transaction,然后查找 ttxn:UserTransactionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在实际调用发生之前,
UserTransaction不会绑定到任何特定的目的地。在调用时,此UserTransaction绑定到整个事务生命周期中的相应目标。在开始
UserTransaction前,您不需要知道节点名称或目的地。org.jboss.ejb.client.EJBClient.getUserTransaction()方法为您提供一个远程UserTransaction,它可根据第一次调用自动选择其目的地。从 Java 命名和目录接口查找远程UserTransaction的效果也相同。注意org.jboss.ejb.client.EJBClient.getUserTransaction()方法已弃用。- 当事务开始时,所有 Jakarta Enterprise Beans 调用都会在交易期间绑定到该特定节点,从而建立服务器关联性。
- 当事务结束时,服务器关联性会被释放,Jakarta 企业 Bean 代理会返回到一般的集群关联性。
Jakarta Enterprise Beans Transactions Lazily 选择节点
您可以允许客户端在与事务相关的第一次调用期间轻松选择集群节点来处理事务。这允许在群集间对事务进行负载平衡。要使用这个选项,请按照以下步骤操作。
-
不要在
InitialContext中指定用于调用 Jakarta Enterprise Beans 的PROVIDER_URL属性。 在客户端中,从
InitialContext查找 thetxn:RemoteUserTransaction。UserTransaction ut = (UserTransaction)ctx.lookup("txn:RemoteUserTransaction");UserTransaction ut = (UserTransaction)ctx.lookup("txn:RemoteUserTransaction");Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 当事务开始时,将自动选择一个集群节点,建立服务器关联性,并在交易期间将所有 Jakarta Enterprise Beans 调用与该特定节点绑定。
- 当事务结束时,服务器关联性会被释放,Jakarta 企业 Bean 代理会返回到一般的集群关联性。