Flex Gateway新着情報
Governance新着情報
Monitoring API Managerデータベース用 Anypoint Connector (Database Connector) を使用すると、トランザクションのコンテキストでデータベース操作を実行できます。各操作に [Transactional action (トランザクションアクション)] 項目があります。この項目を使用して、アクティブなトランザクションに関して、操作で実行できる結合アクションの種別を指定します。
次の例は、Studio で [Transactional action (トランザクションアクション)] 項目を設定する方法 (Select 操作の場合と、Try スコープコンポーネントを使用して操作をグループ化する場合の両方) を示しています。
項目を設定する手順は、次のとおりです。
Studio のフローで、[Select] 操作を選択します。
コネクタ設定画面で、[Advanced (詳細)] タブをクリックします。
[Transactional action (トランザクションアクション)] 項目を次のいずれかのオプションに設定します。
ALWAYS_JOIN
メッセージの受信時にトランザクションが進行中であると想定します。トランザクションがない場合、エラーが発生します。
JOIN_IF_POSSIBLE
現在のトランザクションが使用可能な場合、そのトランザクションを結合します。それ以外の場合、トランザクションは実行されません。
NOT_SUPPORTED
存在するトランザクションの外部で実行します。
次のスクリーンショットは、Studio の設定を示しています。
XML エディターでは、transactionalAction
設定は次のように記述されます。
<db:select doc:name="Select" transactionalAction="ALWAYS_JOIN">
<db:sql ><![CDATA[SELECT * FROM PLANET WHERE name = :name]]></db:sql>
</db:select>
場合によっては、複数のクエリを同じトランザクションのコンテキストでアトミックに実行する必要があります。これらのクエリを、すでに存在するトランザクションのコンテキストで実行した場合、クエリは同じトランザクションに属します。
次の例は、銀行口座振替中に 2 つの Database Connector の Update 操作を使用して、1 つの口座から金額を引き、別の口座に加えるが、この 2 つの操作のいずれかが失敗した場合、両方の操作をロールバックすることを示しています。アクティブなトランザクションがない場合は、Try スコープコンポーネントを使用して操作をグループすることでトランザクションを開始できます。
[Mule Palette (Mule パレット)] ビューで「try
」を検索し、[Try] スコープコンポーネントを選択します。
[Try] スコープコンポーネントを Studio キャンバスにドラッグします。
[Update] 操作を [Try] スコープコンポーネントの内部にドラッグします。
操作の設定画面の [General (一般)] タブで、[Connector configuration (コネクタ設定)] 項目の横にあるプラス記号 (+) をクリックし、グローバル要素設定項目にアクセスします。
データベース接続情報を指定し、[OK] をクリックします。
実行する SQL クエリを [SQL Query Text (SQL クエリテキスト)] 項目に設定します (例: UPDATE ACCOUNT set BALANCE = BALANCE - :money where ID = :source
)。
[Input Parameters (入力パラメーター)] 項目を {‘money’ : payload.money, ‘source’: payload.source}
に設定します。
別の [Update] 操作を [Try] コンポーネント内の最初の [Update] 操作の右にドラッグします。
[Connector configuration (コネクタ設定)] 項目を、以前に作成したデータベース接続に設定します。
実行する SQL クエリを [SQL Query Text (SQL クエリテキスト)] 項目に設定します (例: UPDATE ACCOUNT set BALANCE = BALANCE + :money where ID = :target
)。
[Input Parameters (入力パラメーター)] 項目を {‘money’ : payload.money, ‘target’’: payload.target}
に設定します。
フローの [Try] スコープコンポーネントを選択します。
コンポーネント設定画面で、[Transactional action (トランザクションアクション)] 項目を ALWAYS_BEGIN
に設定します。
次のスクリーンショットは、Studio の設定を示しています。
XML エディターでは、transactionalAction
設定は次のように記述されます。
<try transactionalAction="ALWAYS_BEGIN">
<db:update config-ref="db">
<db:sql>UPDATE ACCOUNT set BALANCE = BALANCE - :money where ID = :source</db:sql>
<db:input-parameters>#[{'money' : payload.money, 'source': payload.source}]</db:input-parameters>
</db:update>
<db:update config-ref="db">
<db:sql>UPDATE ACCOUNT set BALANCE = BALANCE + :money where ID = :target</db:sql>
<db:input-parameters>#[{'money' : payload.money, 'target'': payload.target}]</db:input-parameters>
</db:update>
</try>