- - PR -
JBoss+Spring+JUnitでユニットテスト時、JNDIのDataSource名が参照できない
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-07-22 21:48
お世話になります。
WebLogicで稼動中のシステムをJBossへ移行したいと考えています。 JNDIやDataSourceなどの設定と一部ソース改修を行い、システムはJBoss上で稼動する状態になりました。 ところがEclipse上からユニットテストを実行すると、テストクラス起動時にjavax.naming.NameNotFoundExceptionが発生します。どうもJNDIに設定したDataSource名を参照できていないようです。DataSourceはJNDIの java: 名前空間に登録しているのですが、これはリモートからは参照できないものなのでしょうか? ちなみにDataSource名がJNDIのjava:名前空間に登録されていることは jmx-consoleで確認済みです。 ■applicationContext.xmlの抜粋 <bean id="myDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"><value>java:/myDataSource</value></property> </bean> ■*-ds.xml の抜粋 <datasources> <local-tx-datasource> <jndi-name>myDataSource</jndi-name> <connection-url>jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:sidxxx</connection-url> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <user-name>user</user-name> <password>pass</password> </local-tx-datasource> </datasources> ■環境 JBoss3.2.7 Spring1.1 Struts1.1 Eclipse2.1.3 JUnit1.1 以上をWindowsXP SP2の同一マシン上で検証。 試しに、global名前空間にいるJNDI名(XAConnectionFactoryなど)を指定してみると、NameNotFoundException ではなく org.springframework.beans.TypeMismatchException に変化しましたので、global名前空間であれば参照可能な状態だと思います。 またここの過去ログにちょっと似た事例 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=17003&forum=12&5 があったので、それを参考に JUnit JNDI DataSource helper package http://www.junit.org/news/extension/index.htm#JNDI を使用し JNDIを参照しない方法も試してみました。 このJNDI DataSource helperの導入にあたっての変更点は以下の通りです。 ・jrunittesthelper.jarを lib/ にコピー。 ・同 lib/ に jndi_unit_test_helper.properties を作成。 ・.classpathにjrunittesthelper.jarを追加。 ・テストクラスのコンストラクタにJNDIUnitTestHelper.init()呼び出し追加。 しかしテスト実行すると java.lang.UnsupportedOperationException: Method close() not yet implemented. が発生してしまいました。 JBoss+Spring、Eclipse+JUnitという、私が思うに珍しくないだろう組み合わせなのに、Web上にはなかなか有用な情報が見当たりません。皆様はどのようにユニットテストされているのでしょうか? ・単にJNDI設定ミスであり、java: 名前空間も参照できる? ・DataSourceをglobalに登録する? (書式が分からない) ・JUnit JNDI DataSource helper を正しく使うべき? どう対処すべきでしょうか? 宜しくお願いいたします。 | ||||
|
投稿日時: 2005-07-29 10:57
自己レスです。
結局解決策が見つからず、結果的にapplicationContext.xmlを稼動時用とユニットテスト用の2通り用意する方法をとることになりました。 まずJUnit JNDI DataSource helper は一部メソッド未実装のためSpring環境での使用は難しいと結論付けました。 そしてJBossのDataSourceについても、使用しているバージョン3.2.7では外部(別VM)から参照できないようです。ズバリ明確な情報があった訳ではないですが、web上の情報を総合してそう判断できました。ちなみにJBoss4.0.xだとDataSource定義(*-ds.xml)の<local-tx-datasource>内に <use-java-context>false</use-java-context> と書くことで外部から参照できるようですが、その場合にメモリリークらしき現象が起こる場合があるようなので(http://www.freeml.com/message/jboss-fan@freeml.com/0002393)、これも使用しないことにしました。 やっぱり公式ドキュメントを購入すべきかなと思いました。しかし公式ドキュメントの質はどうなんだろう。良いとも悪いとも、さっぱり評判を聞きませんね・・・。 | ||||
|
投稿日時: 2005-07-29 11:04
補足です。
具体的には、ユニットテスト時はDataSourceをJNDIから取得せず、applicationContext.xml中にDataSourceの記述をベタ書きする方向です。 これもまだ完璧に検証したわけではありませんが。 とりあえず報告しておきます。 |
1