[Seasar-user:3432] S2Dao:動的DB接続

Matsumoto Chihiro [E-MAIL ADDRESS DELETED]
2006年 3月 27日 (月) 20:07:42 JST


初めての投稿になります。よろしくお願いします。

Windows XPに開発環境を設定、Windows Server2003にDBテストサーバを設定していま
す。
Eclipseのバージョンは3.1、j2seは1_4_10、s2-dao-1.0.31.zip、S2.3.7.zipを使用
しています。

S2DaoでMS-SQLserver 2000に接続しているのですが、
年次でデータベース名が変わるので、名前を動的に変更する必要があります。

j2ee.diconの書き方が悪いのか、Eclipseのパスの設定が悪いのか、
エラーが表示されます。

org.seasar.framework.exception.NoSuchConstructorRuntimeException: [ESSR0064]
クラス(org.seasar.framework.util.ResourceUtil)のコンストラクタ
(ResourceUtil())が見つかりません
	at org.seasar.framework.util.ClassUtil.getConstructor(ClassUtil.java:136)
	at 
org.seasar.framework.container.assembler.AbstractConstructorAssembler.assembleDefault(AbstractConstructorAssembler.java:89)

	at 
org.seasar.framework.container.assembler.AutoConstructorAssembler.doAssemble(AutoConstructorAssembler.java:41)

	at 
org.seasar.framework.container.assembler.AbstractConstructorAssembler.assemble(AbstractConstructorAssembler.java:50)

	at 
org.seasar.framework.container.deployer.SingletonComponentDeployer.assemble(SingletonComponentDeployer.java:67)

	at 
org.seasar.framework.container.deployer.SingletonComponentDeployer.deploy(SingletonComponentDeployer.java:51)

	at 
org.seasar.framework.container.deployer.SingletonComponentDeployer.init(SingletonComponentDeployer.java:96)

	at 
org.seasar.framework.container.impl.ComponentDefImpl.init(ComponentDefImpl.java:283)

	at 
org.seasar.framework.container.impl.S2ContainerImpl.init(S2ContainerImpl.java:361)

	at 
org.seasar.framework.container.impl.S2ContainerImpl.init(S2ContainerImpl.java:358)

	at 
org.seasar.framework.container.impl.S2ContainerImpl.init(S2ContainerImpl.java:358)

	at 
jp.co.hlc.TimeCard.main.InsertMasterTableBatch.start(InsertMasterTableBatch.java:63)

	at 
jp.co.hlc.TimeCard.main.InsertMasterTableBatch.main(InsertMasterTableBatch.java:287)

Caused by: java.lang.NoSuchMethodException: 
org.seasar.framework.util.ResourceUtil.<init>()
	at java.lang.Class.getConstructor0(Unknown Source)
	at java.lang.Class.getConstructor(Unknown Source)
	at org.seasar.framework.util.ClassUtil.getConstructor(ClassUtil.java:134)
	... 12 more

http://ml.seasar.org/archives/seasar-user/2006-March/005268.htmlを読んで、
j2ee.diconの設定は以下のようになっています。
<!--MSSQLSERVERデータソースの動的切り替え参照テキスト-->
<component name="msSQLdbname" 
class="org.seasar.framework.util.ResourceUtil">
  <!--<initMethod>@org.seasar.framework.util.ResourceUtil@ 
getProperties("jp/co/xxx/TimeCard/main/resources/msSQLdbname.properties")</initMethod>-->

  		<initMethod name="getProperties">
  			<arg>"jp/co/xxx/TimeCard/main/resources/msSQLdbname"</arg>
  		</initMethod>
</component>
<!--年次で可変にする-->
<component name="xaDataSourceMssqlRdb"
		class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
		<property name="driverClassName">
			"net.sourceforge.jtds.jdbc.Driver"
        </property>
        <!--<property name="URL">msSQLdbname.rdbURL</property>-->
        <property 
name="URL">"jdbc:jtds:sqlserver://192.168.20.xxx:xxxx/xxxxx2006;instance=MSSQLSERVER"</property>

        <property name="user">"sa"</property>
        <property name="password">""</property>
</component>

<<componentタグにclass指定をしていないとエラーになるのと、
@org.seasar.framework.util.ResourceUtil @ getProperties('abc.
properties')
をどのように使用してよいか勉強不足よりわからなかったため>>
メソッドのインジェクションをしようとしてみたところコンストラクタのエラーが出
ています。
投稿のとおりclassを指定しないとエラーになってしまうので、書いていますが間違
いでしょうか?

データソースを静的にj2ee.diconに書き込んでしまえば問題ないのですが、気になる
のは
s2daoのプロジェクトが単体だとエラーになってしまい、別プロジェクトのseasarの
(S2.3.7を解凍した)
ライブラリをパスに設定しないといけないことです。

もしかするとそのことが原因でseasar本体のutil.ResourceUtilを覗きに行けないの
ではないかと
も悩んでいます。

お時間があればよろしくお願いします。





Seasar-user メーリングリストの案内