导致OracleUcpConnectionManager.getConnection(" some_resource_name")失败的原因是什么?

时间:2011-12-19 15:52:56

标签: oracle spring configuration junit

我的某些代码在OracleUcpConnectionManager.getConnection("some_resource_name")的测试中调用了SQLException,其中Invalid Universal Connection Pool configuration表示:.getConnection。我已经检查过,同样的代码在生产中被调用,并且它可以工作。资源名称(传递给WEB-INF的字符串对于测试代码和生产代码都是相同的。我假设它必须是一些通过spring自动发生的配置,所以我在{{{ 1}}并尝试将其添加到测试中:

//manually scan the application context (this is done with XML configuration in the normal application)
//thanks: http://static.springsource.org/spring/docs/3.1.0.RC1/spring-framework-reference/htmlsingle/spring-framework-reference.html#beans-java-instantiating-container-scan
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("some.package.here");
context.refresh();

在我的dispacther-servlet.xml中基于此:

<context:component-scan base-package="some.package.here" />

注意:此处的context:前缀定义为xmlns:context="http://www.springframework.org/schema/context"

没有任何(明显的)效果。

我也一直在oracle的网站上筛选几天,并且没有发现与该错误有太大关系(错误代码是UCP-45006顺便说一句(see: error codes on oracle's site)和搜索因为那对我来说并没有太大的影响)

我还认为这个问题可能很方便:OracleDataSource vs. Oracle UCP PoolDataSource,但我目前在.xml.properties个文件中没有任何配置(这是一个预先存在的项目)和(如前所述).getConnection(String)在生产中运行代码时工作正常,但在作为JUnit测试运行时则不行。

我应该在日志中找到什么吗?我不确定下一步该尝试什么。

更新:它在oracle.ucp.jdbc.PoolDataSourceImpl.setConnectionFactoryClassName(导致SQLExcpetion)和(此处为奖励)失败,我找到the javadocs for that

更新更新:我们的属性文件具有'setConnectionFactoryClassName'所需的值,似乎是在常规项目中加载,但在测试时却没有。在搜索了一下后,它似乎是自动加载的,在我们向JVM传递了这个参数:-DapplicationProperties="C:\full\path\to\our\file.properties"之后。现在来弄清楚Spring是否处理那个或者java ...

更新更新更新:我可以验证属性文件的位置是否已传递给测试,(thanks to this SO question

0 个答案:

没有答案