diff --git a/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java b/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java index cb2f09cbf2..4f0324478f 100644 --- a/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java +++ b/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java @@ -156,22 +156,34 @@ } public HiveConnection(String uri, Properties info) throws SQLException { - setupLoginTimeout(); try { - connParams = Utils.parseURL(uri, info); - } catch (ZooKeeperHiveClientException e) { - throw new SQLException(e); + setupLoginTimeout(); + try { + connParams = Utils.parseURL(uri, info); + } catch (ZooKeeperHiveClientException e) { + throw new SQLException(e); + } + jdbcUriString = connParams.getJdbcUriString(); + // JDBC URL: jdbc:hive2://:/dbName;sess_var_list?hive_conf_list#hive_var_list + // each list: =;= and so on + // sess_var_list -> sessConfMap + // hive_conf_list -> hiveConfMap + // hive_var_list -> hiveVarMap + host = Utils.getCanonicalHostName(connParams.getHost()); + port = connParams.getPort(); + sessConfMap = connParams.getSessionVars(); + isEmbeddedMode = connParams.isEmbeddedMode(); + + setupHiveConnection(uri, info); + } + catch (Throwable e) { + LOG.error("Error creating HiveConnection. Closing the connection.", e); + close(); + throw e; } - jdbcUriString = connParams.getJdbcUriString(); - // JDBC URL: jdbc:hive2://:/dbName;sess_var_list?hive_conf_list#hive_var_list - // each list: =;= and so on - // sess_var_list -> sessConfMap - // hive_conf_list -> hiveConfMap - // hive_var_list -> hiveVarMap - host = Utils.getCanonicalHostName(connParams.getHost()); - port = connParams.getPort(); - sessConfMap = connParams.getSessionVars(); - isEmbeddedMode = connParams.isEmbeddedMode(); + } + + private void setupHiveConnection(String uri, Properties info) throws SQLException { if (sessConfMap.containsKey(JdbcConnectionParams.FETCH_SIZE)) { fetchSize = Integer.parseInt(sessConfMap.get(JdbcConnectionParams.FETCH_SIZE)); @@ -862,17 +874,19 @@ public void clearWarnings() throws SQLException { @Override public void close() throws SQLException { - if (!isClosed) { - TCloseSessionReq closeReq = new TCloseSessionReq(sessHandle); - try { + try { + if (!isClosed) { + TCloseSessionReq closeReq = new TCloseSessionReq(sessHandle); client.CloseSession(closeReq); - } catch (TException e) { - throw new SQLException("Error while cleaning up the server resources", e); - } finally { - isClosed = true; - if (transport != null) { - transport.close(); - } + } + } + catch (TException e) { + throw new SQLException("Error while cleaning up the server resources", e); + } + finally { + isClosed = true; + if (transport != null && transport.isOpen()) { + transport.close(); } } }