x:batch 조치는 JSP SQL 조치 세트를 그룹화하는 데 사용됩니다. 그룹화하는 이유는 두 가지입니다. 하나는 모두 지정할 때까지 x:updateRow, x:insertRow 및 x:deleteRow 조치 세트 처리를 지연하기 위해서입니다. 다른 이유는 조치 세트가 동일 데이터베이스 연결을 사용하도록 하기 위해서입니다.
JSP 페이지가 x:repeat 요소 내에서 x:insertRow 또는 x:deleteRow 조치를 사용할 경우, 올바른 결과를 얻으려면 x:repeat 요소를 x:batch 조치 본문에 놓아야 합니다. 그렇게 하지 않으면 잘못된 행이 갱신 또는 삭제되거나 행에서 잘못된 위치에 삽입될 수 있습니다. x:insertRow 및 x:deleteRow 조치는 결과 세트에서 후속 행의 번호 매김을 변경합니다. 이 조치를 지연하면 현재 행 번호를 사용하여 이들을 행의 대상으로 지정할 수 있습니다. 행 번호는 x:batch 끝에서 모든 조치가 처리될 때까지 변경되지 않습니다.
모든 조치를 x:batch 내에 위치시킬 수 있지만, x:updateRow, x: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 조치에는 다음과 같은 속성이 있습니다.
참조된 조치는 데이터베이스와의 연결을 작성하는 데 필요한 정보를 제공합니다. 일괄처리된 모든 조치는 동일 연결을 사용하여 수행됩니다. x:batch 내부의 임의 조치에서 connectionSpec 속성을 지정할 경우, 오류 플래그가 표시됩니다.
connectionSpec 또는 connectionSpecRef 중 하나를 지정할 수 있으며 둘 다 지정할 수는 없습니다.
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를 사용하면 단일 데이터베이스 트랜잭션 내에서 이를 수행할 수 있습니다.
<x:batch connectionSpec="conn1" singleTransaction="true"> <x:deleteRow name="select1"/> <x:insertRow name="select2"/> </x:batch>