[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 メーリングリストの案内