这并不能直接回答您的问题,但我有两个建议。首先,既然我知道您正在使用 Spring,我建议您停止使用您自己的ServiceLocator
来查找 JNDI 数据源,正如您在上一个问题中提到的那样。相反,您应该为此使用 Spring 工具,然后将数据源注入您的 bean。要获取 JDNI 数据源,请使用 Spring's 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>
这确实是推荐的方法(有关不同选项的更多详细信息,请查看使用 JDBC 访问数据一章)。
PS:我不知道com/iplanet/ias/admin/common/ASException
从哪里来,但它显然是 iPlanet 本身之一。如果您真的想找出答案,请在 iPlanet 安装的所有 jar 中搜索,尤其是在其启动脚本中引用的那个。但我认为,在那之后你将面临 JNDI 问题,请注意。