9.3. 声明事务的划分


使用 Blueprint XML 时,您还可以通过在 Blueprint XML 文件中声明事务策略来分离事务。通过将适当的事务策略应用到 bean 或 bean 方法,例如 Required 策略,您可以确保在调用该特定 bean 或 bean 方法时启动事务。在 bean 方法的末尾,事务被提交。这个方法类似于事务在企业 Java Beans 中处理的方式。

OSGi 声明性事务允许您在 Blueprint 文件中的以下范围中定义事务策略:

另请参阅: 第 9.3.3 节 “tx:transaction 属性的描述”

9.3.1. bean-level 声明

要在 bean 级别上声明事务策略,请插入 tx:transaction 元素作为 bean 元素的子级,如下所示:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
        xmlns:tx="http://aries.apache.org/xmlns/transactions/v1.1.0">

    <bean id="accountFoo" class="org.jboss.fuse.example.Account">
        <tx:transaction method="*" value="Required" />
        <property name="accountName" value="Foo" />
    </bean>

    <bean id="accountBar" class="org.jboss.fuse.example.Account">
        <tx:transaction method="*" value="Required" />
        <property name="accountName" value="Bar" />
    </bean>

</blueprint>

在前面的示例中,所需的事务策略应用于 accountFoo bean 的所有方法,以及 accountBar bean,其中 method 属性指定通配符 *,以匹配所有 bean 方法。

9.3.2. 顶级声明

要在顶层声明事务策略,请插入 tx:transaction 元素作为 blueprint 元素的子,如下所示:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
        xmlns:tx="http://aries.apache.org/xmlns/transactions/v1.1.0">

    <tx:transaction bean="account*" value="Required" />

    <bean id="accountFoo" class="org.jboss.fuse.example.Account">
        <property name="accountName" value="Foo" />
    </bean>

    <bean id="accountBar" class="org.jboss.fuse.example.Account">
        <property name="accountName" value="Bar" />
    </bean>

</blueprint>

在上例中,Required 事务策略应用到 ID 与模式 匹配的每个 bean 的所有方法

9.3.3. tx:transaction 属性的描述

tx:transaction 元素支持以下属性:

Bean

(仅限顶级)指定事务策略应用到的 bean ID (命名空间或空格)列表。例如:

<blueprint ...>
    <tx:transaction bean="accountFoo,accountBar" value="..." />
</blueprint>

您还可以使用通配符字符 *,它在每个列表条目中最多可能会出现一次。例如:

<blueprint ...>
    <tx:transaction bean="account*,jms*" value="..." />
</blueprint>

如果省略 bean 属性,则默认为 * (匹配蓝图文件中所有非syntic Bean)。

方法

(顶级和 bean-level)指定事务策略应用到的方法名称列表(comma 或空格分开)。例如:

<bean id="accountFoo" class="org.jboss.fuse.example.Account">
    <tx:transaction method="debit,credit,transfer" value="Required" />
    <property name="accountName" value="Foo" />
</bean>

您还可以使用通配符字符 *,它在每个列表条目中最多可能会出现一次。

如果省略了 method 属性,则默认为 * (匹配适用 Bean 中的所有方法)。

value

(顶级和 bean-level)指定事务策略。策略值与 EJB 3.0 规格中定义的策略具有相同的语义,如下所示:

  • 必需 - 支持当前事务 ; 如果不存在,创建一个新事务。
  • 必需 - 支持当前事务;如果没有当前事务,则抛出异常。
  • RequiresNew - 创建新的事务,挂起当前事务(如果存在)。
  • 支持 - 支持当前事务;如果没有存在,则非事务执行。
  • NotSupported - 不支持当前事务,而是始终以非事务执行。
  • Never - 不支持当前事务 ; 如果当前事务存在,抛出异常。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.