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

阅读更多

    项目中一个应用持久层配置为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.(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下删除就可以。

你可能感兴趣的:(RAC,Connection,refused,Oracle)