欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

用Hibernate+Proxool连Oracle RAC时报“Could not obtain connection metadata”的解决办法

程序员文章站 2022-07-04 19:35:35
...

    项目中一个应用持久层配置为Hibernate+Proxool,在本地连单Oracle数据库没有问题,部署到现网Oracle RAC环境时总是报错

[WARN ] Could not obtain connection metadata

java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(ERR=1153)(VSNNUM=169870336)(ERROR_STACK=(ERROR=(CODE=1153)(EMFI=4)(ARGS='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.153.233)(PORT=1521))'))(ERROR=(CODE=305)(EMFI=1))))

at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)

.........

[ERROR] method:com.fsti.hibernate.util.HibernateUtil.<clinit>(HibernateUtil.java:24)

Initial SessionFactory creation failed.

org.hibernate.HibernateException: Hibernate Dialect must be explicitly set

at org.hibernate.dialect.DialectFactory.determineDialect(DialectFactory.java:57)

............

 

尝试配置了dialect,第二个错误没有了,但第一个错误还在。

    在网上搜索,有人讲是配置错误,我根据网上的使用文档仔细检查了好多遍,没发现啥问题;还好后来搜到一篇文章http://ml365.iteye.com/blog/876114,里面也是连RAC时出现错误,错误信息跟我们遇到的一模一样,这篇文章提到“之前有的是class12.jar,用这个驱动的话很不稳定,时好时坏,于是换了ojdbc.jar,好家伙!怎么折腾都没事!问题解决!”;我检查了这个应用,发现lib下既有classes12.jar,又有ojdbc14.jar,两个jar包中都有oracle.jdbc.driver.OracleDriver,看来问题可能就出在这里。

    写个读取数据的测试类部署到现网上,在命令行下执行这个类,如果在classpath里去掉ojdbc14.jar,保留classes12.jar,就出现前面遇到的Connection refused(DESCRIPTION=(ERR=1153)(VSNNUM=169870336)错误;如果执行时在classpath里去掉classes12.jar,保留ojdbc14.jar,没有出现问题,顺利读到了数据。

    这样一来,解决方法就出来了,只要将classes12.jarWEB-INF\lib下删除就可以。