有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在容器外部为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) 个答案