我的某些代码在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)