[Seasar-user:962] Re: 複数のdataSourceとS2TestCase

Yasuo Higa higa
2004年 8月 27日 (金) 16:43:31 JST


<[E-MAIL ADDRESS DELETED]> の、
   "[Seasar-user:960] 複数のdataSourceとS2TestCase" において、
   "Hikaru Taniguchi <[E-MAIL ADDRESS DELETED]>"さんは書きました:

ひがです。

> tanigonです。
> 
> (以下 @S2.0.16)
> 
> いま 複数のDataSourceを使うような j2ee.dicon状態になっていて(実際に接続
> 先のデータベースも複数に渡る)、これをテストする時に 
> 
> ...TooManyRegistrationRuntimeException: 
> [ESSR0045]interface javax.sql.DataSourceに複数のコンポーネントが登録されています
> 
> 		if (container_.hasComponentDef(DataSource.class)) {
> 			dataSource_ = (DataSource) container_
> 					.getComponent(DataSource.class);
> 		} else if (container_.hasComponentDef(DATASOURCE_NAME)) {
> 			dataSource_ = (DataSource) container_
> 					.getComponent(DATASOURCE_NAME);
> 
> ここみたいなのですが、複数のDataSourceを入れている場合に確実に 1つ目の
> if()で例外になってしまい dataSource_ がセットされないのですが、 2つ目の
> if()と順序を入れ替えるのをS2TestCaseの標準とする、ってのはダメでしょうか。

修正します。
> 
> あと、今回のテストケースの場合、複数のデータベースに跨ってテスト用のデー
> タを準備する必要がありますが、S2TestCaseの仕様上一つのDataSourceしか補助
> ?対象としてくれないので、protectedな setterかなにかがあると助かるのです
> がいかがでしょうか (現状 datasource_ は private scope)
> 
TestCaseの中にprivate DataSource dataSource2_とか作れば済むような。
> 
> # 複数のdataSourceを使うようなクラスの試験の場合 testHogeTx()なんかでト
> # ランザクション勝手によろしく!が使えないんですよね、多分。やっぱムリが
> # あるのかなあ... > dataSource
> 
複数データソースがあっても同じトランザクションマネージャに
登録されていれば、大丈夫(両方ロールバックする)だと思います。
---
Yasuo Higa <[E-MAIL ADDRESS DELETED]>
INFORMATION SERVICES INTERNATIONAL-DENTSU,LTD.



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