9.3. 声明性事务划分


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

OSGi 声明事务允许您在蓝图中的以下范围定义事务策略:

另请参阅: 第 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>
Copy to Clipboard Toggle word wrap

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

9.3.2. 顶级声明

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

<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>
Copy to Clipboard Toggle word wrap

在前面的示例中,Required 事务策略应用于 ID 与模式匹配的所有 bean 的所有方法。

9.3.3. tx:transaction 属性的描述

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

bean

(仅限顶级)指定事务策略应用到的 bean ID(组合或空格分隔)的列表。例如:

<blueprint ...>
    <tx:transaction bean="accountFoo,accountBar" value="..." />
</blueprint>
Copy to Clipboard Toggle word wrap

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

<blueprint ...>
    <tx:transaction bean="account*,jms*" value="..." />
</blueprint>
Copy to Clipboard Toggle word wrap

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

method

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

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

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

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

value

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

  • 必需 - 支持当前的事务;如果不存在,则创建一个新事务。
  • 强制 - 支持当前事务;如果不存在当前事务,则抛出异常。
  • RequiresNew - 创建一个新事务,并暂停当前事务(如果存在)。
  • 支持 - 支持当前的事务;如果不存在,则以非交易方式执行。
  • NotSupported - 不支持当前的事务,而是始终以非事务方式执行。
  • Never - 不支持当前的事务 ; 如果当前事务存在,则抛出异常。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat