我编写了一些引用类的单元测试,这些类引用了其他类,这些类依赖于 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)
dataSource
bean的定义很简单:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/dataSource" />
</bean>
即使单元测试在应用程序容器之外运行,如何让 Spring 正确连接到 WebSphere JNDI?