Java 8升级后,DriverManager无法返回连接 [英] DriverManager unable to return connection after Java 8 upgrade

查看:161
本文介绍了Java 8升级后,DriverManager无法返回连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个尝试连接到Impala和Oracle的应用程序.下面是定义的2个bean.

I have an application that tries to connect to Impala and Oracle. Below are the 2 beans defined.

Impala驱动程序-ImpalaJDBC41-2.5.41.jar Oracle驱动程序-ojdbc6.jar

Impala Driver - ImpalaJDBC41-2.5.41.jar Oracle Driver - ojdbc6.jar

<bean id="ID1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<property name="driverClassName" value="com.cloudera.impala.jdbc41.Driver"/>

<property name="url" value="jdbc:impala://impalahost:21050/;AuthMech=1;KrbRealm=myrealm;KrbServicName=impala;KrbHostFQDN=xxx" />

</bean>

<bean id="ID2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@//oraclehost:1523/DB" />
<property name="username" value="myuser" />
<property name="password" value="pwd" />
<property name="connectionProperties">
<props>
<prop key="defaultRowPrefetch">5000</prop>
</props>
</property>
</bean>

在获得带有bean引用-ID2的"Oracle"连接时,获取了此异常(令人惊讶的是,它涉及到cloudera驱动程序代码)-

While getting the "Oracle" connection with a bean reference - ID2, getting this exception (surprisingly it goes to cloudera driver code)-

==java.lang.NullPointerException
===Stack trace...
java.util.Hashtable.put(Unknown Source)
com.cloudera.jdbc.common.AbstractDriver.copyProperties(Unknown Source)
com.cloudera.jdbc.common.AbstractDriver.connect(Unknown Source)
java.sql.DriverManager.getConnection(Unknown Source)
java.sql.DriverManager.getConnection(Unknown Source) org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFrom 
DriverManager(DriverManagerDataSource.java:173) org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFrom 
Driver(DriverManagerDataSource.java:164) org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:149) org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:119) org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111) org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)

相同的配置在Java 1.7中可以正常工作

The same configurations work fine with Java 1.7

推荐答案

在加载Oracle驱动程序之前加载Impala驱动程序时,会发生此问题.因为在ojdbc6.jar(字母顺序)之前引用了ImpalaJDBC41-2.5.41.jar.因此,我有2个选项可以首先加载Oracle驱动程序,并且都可以正常工作-

The issue occurs when Impala driver is loaded before the Oracle driver is loaded; since ImpalaJDBC41-2.5.41.jar is referred before ojdbc6.jar (alphabetic order). So I had 2 options to get the Oracle driver loaded first and both work fine -

  1. 将Impala jar重命名为ZImpala,以便在ojdbc jar之后被引用

  1. rename Impala jar to ZImpala so that it gets referred after ojdbc jar

但是更干净,更好"的方法是通过在Jboss standalone.xml内将其配置为JDBC数据源,从而使用自定义模块加载Oracle驱动程序.

But the 'cleaner and better' approach was to load Oracle driver with custom module by configuring it as a JDBC Datasource inside Jboss standalone.xml; which will load Oracle driver even before our application EAR is deployed.

这篇关于Java 8升级后,DriverManager无法返回连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆