<x:batch>

x:batch アクションは、一連の JSP SQL アクションのグループ化に使用されるものです。 これを行う理由に次の 2 つが考えられます。1 つは一連の x:updateRowx:insertRow、および x:deleteRow アクションを全部指定するまで、これらのアクションの処理を据え置くことです。 もう 1 つは一連のアクションで同じデータベース接続を使用させることです。

構文

ご使用の JSP ページで x:repeat 要素の内部の x:insertRow または x:deleteRow アクションを使用する場合は、正しい結果を得るために x:repeat 要素を x:batch アクションの本体内部に置く必要があります。 これに失敗すると、正しくない行が更新または削除されたり、行が正しくない場所に挿入されたりする結果となります。 x:insertRow および x:deleteRow アクションでは、結果セットの中の後続の行の番号付けが変更されます。 アクションを据え置くことによって、現在行番号を使用している行にアクションの目標を定めることができます。 行番号は、x:batch の終わりでアクションが全部、処理されるまで変りません。

任意のアクションを x:batch の内部に置くことができますが、据え置きされるのは x:updateRowx:insertRow、および x:deleteRow アクションのみです。 x:batch の内側には、いろいろな DBSelect および DBProcedureCall Bean に適用するアクションを置くこともできます。

x:batch の内部のアクションはすべて、同じデータベース接続を使用して実行されます。 バッチ・アクションがすべて、同じデータベース・トランザクション内で起こるように任意に指定することができます。 この場合、最後まで起こることはコミットしていません。 このトランザクション時に DataException が起こった場合は、コミットの代わりにロールバックが行われます。

<x:batch	
		connectionSpec = "connectionSpec_id"
		connectionSpecRef = "connectionSpecRef"
		singleTransaction = "true|false">
</x:batch>

x:batch アクションには以下の属性があります。

connectionSpec
x:dataSourceSpec または x:driverManagerSpec アクションの ID。 値には大/小文字の区別があり、値はスコープ内にある connectionSpec アクションと一致させる必要があります。

参照アクションにより、データベースへの接続に必要な情報が提供されます。 すべてのバッチ・アクションは同じ接続を使用して実行されます。 x:batch の内部のアクションのどれかに connectionSpec 属性を指定した場合は、これにエラーのフラグが付けられます。

connectionSpecRef
接続に必要な情報を得るために使用される DBConnectionSpec オブジェクトへの参照。

connectionSpec または connectionSpecRef のいずれかを指定することができますが、両方を指定することはできません。

singleTransaction
x:batch 内のすべてのアクションを 1 つのデータベース・トランザクションのスコープ内で実行するかどうかを指定します。 値の false を使用した場合は、バッチ・アクションのそれぞれの後に暗黙のコミットがあります。 デフォルト値の true を使用した場合は、バッチ・アクションの全部が終了するまでコミットは行われません。

x:batch アクションには、その本体内に JSP SQL タグをもつことができます。 据え置きされるアクションは次のとおりです。

この例では、select1 によって作り出された結果セットの行が繰り返し反復されます。 delete (削除) という名前の索引付き要求パラメーターが検査された場合は、行が削除されます。

<x:batch connectionSpec= "conn1">
	<x:repeat name="select1" over="rows"
index="rowNumber">
		<% if (request.getParameter("delete"+rowNumber)!= null)
			{ %><x:deleteRow />
		<% } %>
			</x:repeat>
</x:batch>									

この例では、select1 によって作り出された結果セットの行が削除され、select2 によって作り出された結果セットに行が挿入されます。 x:batch を使用して、これを 1 つのデータベース・トランザクション内で行うことができます。

<x:batch connectionSpec="conn1"
singleTransaction="true">
	<x:deleteRow name="select1"/>
	<x:insertRow name="select2"/>
</x:batch>									

フィードバック