WebSphere で定義された JDBC リソースに依存する他のクラスを参照するクラスを参照する単体テストをいくつか作成しました。問題の単体テストは実際にはデータベースの読み取りまたは書き込みをトリガーしませんが、それらが参照するクラスは Spring によって作成され、Spring 構成ファイルはそれらに JDBC リソースを注入しようとします。Spring が失敗し、次のエラー メッセージが表示されます。
2013-07-31 13:46:17,008: アプリケーション コンテキストを読み込めませんでした org.springframework.beans.factory.BeanCreationException: クラスパス リソース [myApplication.xml] で定義された名前 'dataSource' を持つ Bean の作成中にエラーが発生しました: init メソッドの呼び出しに失敗しました。ネストされた例外は javax.naming.ServiceUnavailableException: 通信障害のため、初期コンテキストを取得できませんでした。プロバイダー URL が指定されていないため、"corbaloc:iiop:1.0@myMachineName.myCompany.com:2809/NameService" の既定のプロバイダー URL が使用されました。URL のブートストラップ アドレス情報が正しいこと、およびターゲット ネーム サーバーが実行中であることを確認してください。不正なブートストラップ アドレスまたは使用できないネーム サーバー以外の考えられる原因には、ネットワーク環境およびワークステーション ネットワーク構成が含まれます。[ルート例外は org.omg.CORBA.TRANSIENT: java.net.ConnectException: 接続が拒否されました: 接続: org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338) で org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473) で org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) で java.security.AccessController.doPrivileged(AccessController.java:224) で org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) で
Beanの定義dataSource
は単純です。
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/dataSource" />
</bean>
単体テストがアプリケーション コンテナーの外部で実行されている場合でも、Spring を WebSphere JNDI に正しく接続するにはどうすればよいですか?