9.3. 宣言型トランザクションによる境界

ブループリント XML を使用する場合、ブループリント XML ファイルでトランザクションポリシーを宣言して、トランザクションの境界を定めることもできます。たとえば、Required ポリシーなどで適切なトランザクションポリシーを Bean または Bean メソッドに適用すると、特定の Bean または Bean メソッドが呼び出されるたびにトランザクションが開始されるようにすることができます。bean メソッドの最後に、トランザクションがコミットされます。このアプローチは、トランザクションが Enterprise Java Bean で処理される方法と似ています。

OSGi 宣言的トランザクションでは、Blueprint ファイルの以下のスコープでトランザクションポリシーを定義できます。

tx:transaction 属性の説明」 も参照してください。

9.3.1. bean レベルの宣言

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 のすべてのメソッドに適用されます。ここで、メソッド属性はすべての 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 がパターン account* に一致するすべての Bean のメソッドに適用されます。

9.3.3. tx:transaction 属性の説明

tx:transaction 要素は以下の属性をサポートします。

bean

(トップレベルのみ) トランザクションポリシーが適用される Bean ID(コンマまたはスペース区切り) の一覧を指定します。以下に例を示します。

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

ワイルドカード文字 * も使用できます。これは、各リストエントリーで最大 1 度表示される可能性があります。以下に例を示します。

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

Bean 属性を省略すると、デフォルトで * に設定されます (Blueprint ファイルのすべての非合成 Bean と一致)。

メソッド

(トップレベルおよび Bean レベル) トランザクションポリシーが適用されるメソッド名 (コンマまたはスペース区切り) の一覧を指定します。以下に例を示します。

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

ワイルドカード文字 * も使用できます。これは、各リストエントリーで最大 1 度表示される可能性があります。

method 属性を省略すると、デフォルトで * に設定されます (該当する Bean のすべてのメソッドと一致)。

value

(トップレベルおよび Bean レベル) トランザクションポリシーを指定します。ポリシー値のセマンティクスは、以下のように EJB 3.0 仕様で定義されているポリシーと同じです。

  • Required - 現在のトランザクションをサポートします。存在しない場合は新しいトランザクションを作成します。
  • Mandatory - 現在のトランザクションをサポートします。現在のトランザクションが存在しない場合に例外を出力します。
  • RequiresNew — 新しいトランザクションを作成し、現在のトランザクションが存在する場合は一時停止します。
  • Supports - 現在のトランザクションをサポートします。存在しない場合は非トランザクションを実行します。
  • NotSupported - 現在のトランザクションをサポートしません。むしろ常に非トランザクションで実行します。
  • Never - 現在のトランザクションはサポートしません。現在のトランザクションが存在する場合は例外を出力します。