在容器外部为JUnit测试注入JNDI数据源时发生java错误
在为DAO类编写测试类时,我使用以下代码在容器外部为Junit测试注入JNDI数据源:
SharedPoolDataSource dataSource;
@BeforeClass
public static void setUpDataSource() throws Exception {
try {
SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();
DriverAdapterCPDS cpds = new DriverAdapterCPDS();
cpds.setDriver("oracle.jdbc.OracleDriver");
cpds.setUrl("jdbc:oracle:thin:@xxxxx:1521:xxxxx");
cpds.setUser("myUsername");
cpds.setPassword("myPass");
dataSource = new SharedPoolDataSource();
dataSource.setConnectionPoolDataSource(cpds);
dataSource.setMaxActive(10);
dataSource.setMaxWait(50);
builder.bind("jboss/datasources/myDatasource", dataSource);
builder.activate();
} catch (NamingException ex) {
ex.printStackTrace();
}
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
dataSource.close();
}
正如您所注意到的,我有一个tearDownAfterClass()
方法,在执行测试后关闭数据源
我有多个DAO类,我为它们编写了测试类。在每门考试课上,我都写了同样的setUpDataSource()
&tearDownAfterClass()
创建并关闭数据源
单独运行时,测试运行良好。但是,当一起运行时,第一个测试类会成功运行,但后续的测试类会以IllegalStateException: Pool not open
失败
如果我不在测试类中调用datasource.close()
,就不会出现这个问题。我对Datasource
池不太了解,但这是预期的行为吗?如果我关闭了一个数据源,并且再次创建该数据源,为什么它会说池没有打开
共 (0) 个答案