为什么 HiveConnection 不支持 getHoldability()?将 C3P0 与 HiveDriver 一起使用

Why does not HiveConnection support getHoldability()? Using C3P0 with HiveDriver

我正在尝试将 C3P0 (com.mchange.v2.c3p0.ComboPooledDataSource) 与 HiveDriver (org.apache.hive.jdbc.HiveDriver) 一起使用。我有一个例外:

java.sql.SQLException: Method not supported
at org.apache.hive.jdbc.HiveConnection.getHoldability(HiveConnection.java:924)
at com.mchange.v2.c3p0.impl.NewPooledConnection.<init>(NewPooledConnection.java:106)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:159)

我找到了 HiveConnection (here)

的源代码
/*
 * (non-Javadoc)
 *
 * @see java.sql.Connection#getHoldability()
 */

@Override
public int getHoldability() throws SQLException {
    // TODO Auto-generated method stub
    throw new SQLFeatureNotSupportedException("Method not supported");
}   

我的问题:为什么 HiveConnection 选择抛出一个 SQLFeatureNotSupportedException ?而不是只返回其中之一?

ResultSet.HOLD_CURSORS_OVER_COMMIT
ResultSet.CLOSE_CURSORS_AT_COMMIT

这是一个错误吗?

一般来说,是否可以使用这样的连接池 as C3P0 with Hive (我实际上使用的是 Spark SQL)?

更新一 (2017-11-15)

我刚刚尝试了 dbcp2 (org.apache.commons.dbcp2.BasicDataSource) 并且成功了。我想不知何故 dbcp2 不会调用 Connection#getHoldability() 方法。

(我在这里回答我自己的问题。)

感谢Mark Rotteveel的建议,我现在也觉得问题确实是bug。我已经向 Apache 提交了错误报告 HIVE-18082 (here)。

在修复错误之前,一个临时解决方法是使用不同的连接池——DBCP2 而不是 C3P0。由于某种原因,前者没有调用 Connection#getHoldability(),因此不受 HiveConnection

中此错误的影响