[Seasar-user:5502] Re: S2JDBCのバッチ更新処理について
Seto Azusa
[E-MAIL ADDRESS DELETED]
2006年 12月 15日 (金) 23:31:00 JST
せとあずさです。
On Thu, 14 Dec 2006 20:04:53 +0900
藤本 正人 <[E-MAIL ADDRESS DELETED]> wrote:
> S2JDBCのバッチ更新を使用して複数行のレコードをinsertしています。
> diconファイルにBasicBatchHandlerを1つだけ定義した状態だと正常に動作する
> のですが、複数のバッチ更新処理を定義すると
> TooManyRegistrationRuntimeExceptionが発生してしまいます。
> 複数のバッチ更新処理を定義する方法がありましたら、教えてください。
都合によりSeasar2.3系で検証していますが、以下のような例でどうでしょう?
# DBはS2Dao-CodeGenのを使ってます。
----------------------------------------
テストプログラム
----------------------------------------
package sample;
import java.util.ArrayList;
import java.util.List;
import org.seasar.extension.jdbc.BatchHandler;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
public class Test {
private List handlerlist;
public void setHandlerList(List list) {
this.handlerlist = list;
}
public void test() {
BatchHandler handler = (BatchHandler) handlerlist.get(0);
// 10レコード追加
List list = new ArrayList();
for (int j = 0; j < 10; j++) {
Object obj = new Object[] { new Integer(j), new Integer(j + 1) };
list.add(obj);
}
handler.execute(list);
handler = (BatchHandler) handlerlist.get(1);
// 10レコード追加
list = new ArrayList();
for (int j = 11; j < 20; j++) {
Object obj = new Object[] { new Integer(j), new Integer(j + 1) };
list.add(obj);
}
handler.execute(list);
}
public static void main(String[] args) {
SingletonS2ContainerFactory.init();
Test test = (Test) SingletonS2ContainerFactory.getContainer()
.getComponent("test");
test.test();
}
}
----------------------------------------
query.dicon
----------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.3//EN"
"http://www.seasar.org/dtd/components23.dtd">
<components>
<include path="j2ee.dicon"/>
<component name="handlerList" class="java.util.ArrayList">
<initMethod name="add" >
<arg>insertBumonHandler</arg>
</initMethod>
<initMethod name="add" >
<arg>insertBumonHandler2</arg>
</initMethod>
</component>
<component name="insertBumonHandler"
class="org.seasar.extension.jdbc.impl.BasicBatchHandler">
<property name="batchSize">1000</property>
<property name="sql"><![CDATA["
INSERT INTO EMP
( EMPNO
, MGR
)
VALUES
( ?
, ?
)
"]]></property>
</component>
<component name="insertBumonHandler2"
class="org.seasar.extension.jdbc.impl.BasicBatchHandler">
<property name="batchSize">1000</property>
<property name="sql"><![CDATA["
INSERT INTO EMP
( EMPNO
, MGR
)
VALUES
( ?
, ?
)
"]]></property>
</component>
</components>
--
せとあずさ
[E-MAIL ADDRESS DELETED]
http://www.fieldnotes.jp/d/
Seasar-user メーリングリストの案内