[
https://issues.apache.org/jira/browse/HIVE-6363?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Brian Muray updated HIVE-6363:
------------------------------
Labels: JDBC unit-test (was: )
Release Note: The HIVE JDBC driver now throws an SQLException when given an
invalid URL. Previously, it through an IllegalArgumentException, which was not
compatible with java.sql.DriverManager in OpenJDK 1.7. As a result of the
change, the HIVE JDBC driver can now be used when other JDBC drivers are
present in the classpath.
Status: Patch Available (was: Open)
Fixed Bug. Replaced IllegalArgumentException with SQLException per JDBC
standard.
> IllegalArgumentException is thrown instead of SQLException
> ----------------------------------------------------------
>
> Key: HIVE-6363
> URL: https://issues.apache.org/jira/browse/HIVE-6363
> Project: Hive
> Issue Type: Bug
> Components: JDBC
> Affects Versions: 0.12.0, 0.11.0, 0.10.0
> Reporter: chandra sekhar gunturi
> Priority: Critical
> Labels: JDBC, unit-test
> Attachments: HIVE-6363.patch.1.txt
>
> Original Estimate: 24h
> Remaining Estimate: 24h
>
> parseURL in the following code is throwing IllegalArgumentException
> http://svn.apache.org/viewvc/hive/trunk/jdbc/src/java/org/apache/hive/jdbc/Utils.java?view=markup
>
> This is going to break other JDBC based connectors because
> java.sql.DriverManager doesn’t catch IllegalArgumentException while probing
> for correct Driver for a given URL.
> A simple test case can have class.forName(org.apache.hive.jdbc.HiveDriver)
> (Loading hiveserver2 JDBC driver) followed by
> class.forName(org.apache.hadoop.hive.jdbc.HiveDriver)(Loading hiveserver JDBC
> driver).
> In this case hiveserver connection will fail with BAD URL format for
> hiveserver. If you reverse the driver loading to hiveserver followed by
> hiveserver2, both the connections will be successful.
> Following code in java.sql.DriverManager is causing the issue
> [[
> // Worker method called by the public getConnection() methods.
> private static Connection getConnection(
> // Walk through the loaded registeredDrivers attempting to make a connection.
> // Remember the first exception that gets raised so we can reraise it.
> for(DriverInfo aDriver : registeredDrivers) {
> // If the caller does not have permission to load the driver then
> // skip it.
> if(isDriverAllowed(aDriver.driver, callerCL)) {
> try {
> Connection con = aDriver.driver.connect(url, info);
> if (con != null) {
> // Success!
> println("getConnection returning " + aDriver.driver.getClass().getName());
> return (con);
> }
> } catch (SQLException ex) {
> if (reason == null) {
> reason = ex;
> }
> }
> } else {
> println(" skipping: " + aDriver.getClass().getName());
> }
> }
> }
> ]]
> Marking it as critical because this is going to restrict consuming JDBC
> driver in production environment where many drivers are loaded on requirement
> rather than statically loading all drivers.
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)