Oracle UCP 和 NullPointerException
Posted
技术标签:
【中文标题】Oracle UCP 和 NullPointerException【英文标题】:Oracle UCP and NullPointerException 【发布时间】:2014-08-18 13:51:57 【问题描述】:我正在尝试将 Oracle 通用连接池 (UCP) 与 tomcat6 集成。服务器配置如下:
server.xml
<Resource name="jdbc/MyDB"
auth="Container"
factory="oracle.ucp.jdbc.PoolDataSourceImpl"
type="oracle.ucp.jdbc.PoolDataSource"
description="Oracle Universal Connection Pool"
connectionFactoryClassName="oracle.jdbc.pool.OracleDataSource"
minPoolSize="1"
maxPoolSize="5"
inactiveConnectionTimeout="20"
connectionPoolName="UCPPool"
validateConnectionOnBorrow="true"
sqlForValidateConnection="select 1 from DUAL"
fastConnectionFailoverEnabled="true"
onsConfiguration="nodes=test11grac1.example.com:6200,test11grac2.example.com:6200"
user="test"
password="XXXX"
url="jdbc:oracle:thin:@test11g-cluster.example.com:1521/testdb"/>
context.xml
<ResourceLink name="jdbc/MyDB" global="jdbc/MyDB" />
最初,此配置运行良好。连接平均分布在两个 RAC 实例之间,当一个实例出现故障时,所有后续请求都将定向到正在工作的一个。
经过一夜的空闲时间,对连接池的所有请求都导致以下异常:
Caused by: java.lang.NullPointerException: null
at oracle.ucp.jdbc.oracle.OracleJDBCConnectionPool.createOnePooledConnection(OracleJDBCConnectionPool.java:1260) ~[ucp.jar:11.2.0.3.0]
at oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnectionWithoutCountingRequests(UniversalConnectionPoolImpl.java:339) ~[ucp.jar:11.2.0.3.0]
at oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnectionAndValidate(UniversalConnectionPoolImpl.java:168) ~[ucp.jar:11.2.0.3.0]
at oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnection(UniversalConnectionPoolImpl.java:143) ~[ucp.jar:11.2.0.3.0]
at oracle.ucp.jdbc.JDBCConnectionPool.borrowConnection(JDBCConnectionPool.java:157) ~[ucp.jar:11.2.0.3.0]
at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:931) ~[ucp.jar:11.2.0.3.0]
at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:873) ~[ucp.jar:11.2.0.3.0]
at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:863) ~[ucp.jar:11.2.0.3.0]
at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:46) ~[hibernate-entitymanager-3.4.0.GA.jar:3.4.0.GA]
什么可能导致此异常,是否有任何解决方法?
【问题讨论】:
你把mysql驱动加到tomcat lib文件夹了吗? ucp.jar、ons.jar和oracle jdbc驱动jar都在tomcat lib目录下。 【参考方案1】:在将 ojdbc6.jar
和 ucp.jar
升级到最新 (12c) 版本后。问题神奇地消失了。
【讨论】:
以上是关于Oracle UCP 和 NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章
markdown springboot中的Oracle UCP配置
Oracle 的 ucp.jar 应该驻留在 Tomcat 的 lib 还是应用程序的 war 中?缺少 ResultSetMetaData。使用 Oracle 实现 Tomcat 应用程序的干净重新