过去几天,我一直在为此苦苦挣扎。我正在尝试在容器外部测试DAO,但是在运行测试用例时出现错误:
创建名称为bean的错误
类中定义的“ SqlMapClient”
路径资源
[applicationContext.xml]:调用
初始化方法失败;嵌套的
例外是
java.lang.NoClassDefFoundError:
com / iplanet / ias / admin / common / ASException
我正在使用NB来运行测试。人们一直在说,我需要上述类位于测试用例的运行时类路径中。但是,我绝对找不到那个罐子实际上在哪里...?我已经将我的项目lib文件夹中的容器classpath + jars上的所有jars包含到了单元测试的运行时classpath中。仍然我得到同样的错误。
谷歌搜索此JAR也不起作用。
也许有人在那里知道从哪里可以买到那个怪胎罐。希望能解决我的问题。
最佳答案
这不能直接回答您的问题,但是我有两个建议。首先,既然我知道您正在使用Spring,我建议停止使用您自己的ServiceLocator
来查找JNDI数据源,如您在先前的question中所提到的那样。相反,您应该为此使用Spring工具,然后将数据源注入到您的bean中。要获取JDNI数据源,请使用Spring的JndiObjectFactoryBean
,如下所示:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:/comp/env/jdbc/myDS</value>
</property>
</bean>
然后,在容器外运行时(通常在运行测试时),我的建议是不要使用JNDI数据源。相反,您应该使用Spring工具以另一种方式为DAO提供数据源(例如使用
DriverManagerDataSource
,在运行测试时不需要真正的连接池)。这样一来,您无需启动iPlanet就可以进行测试,而这对于测试是有意义的(并且您不想测试iPlanet的连接池,而是想测试DAO)。因此,创建要在测试期间使用的
applicationContext-test.xml
,并使用其他配置进行数据访问。下面是DriverManagerDataSource
的示例配置:<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="..."/>
<property name="url" value="..."/>
<property name="username" value="..."/>
<property name="password" value="..."/>
</bean>
这实际上是推荐的方法(有关不同选项的更多详细信息,请参见Data access using JDBC章)。
PS:我不知道
com/iplanet/ias/admin/common/ASException
的来源,但这显然是iPlanet本身之一。如果您真的想查找,请搜索iPlanet安装的所有jar,尤其是其启动脚本中引用的jar。但我认为,那之后,您将面临JNDI问题。