【问题标题】:Unwrap to OracleConnection展开到 OracleConnection
【发布时间】:2011-11-22 11:18:49
【问题描述】:

我有这段代码在使用 JBoss 5.1、Oracle 11、ojdbc6.jar 时可以正常运行。我正在根据需要获取 OracleConnection。

InitialContext ic = new InitialContext();
DataSource  ds = ( DataSource ) ic.lookup( "java:/" + dataSource );
Connection con = ds.getConnection();       
OracleConnection conn = con.unwrap( OracleConnection.class );

不再使用 JBoss 7、Oracle 11、ojdbc6.jar。 它是这样写的:

连接 不是 Oracle Connection 的包装类

如果你有任何想法,请帮忙。

【问题讨论】:

    标签: oracle connection jboss7.x


    【解决方案1】:

    我在 glassfish 中使用“oracle.jdbc.pool.OracleConnectionPoolDataSource”作为数据源类。

    使用类或者找jboss类。

    编辑并尝试:

    public OracleConnection getOracleConnection(Connection connection) throws SQLException {
        OracleConnection oconn = null;
        try {
            if (connection.isWrapperFor(oracle.jdbc.OracleConnection.class)) {
                oconn = (OracleConnection) connection.unwrap(oracle.jdbc.OracleConnection.class)._getPC();
            }
        } catch (SQLException e) {
            throw e;
        }
        return oconn;
    }
    

    【讨论】:

    • 这确实有效,但请注意,您应该始终关闭包装器 Connection 而不是未包装的 OracleConnection,因为这不会将连接释放回池。此外,您不应尝试关闭 OracleConnection,因为这将导致“连接已关闭”异常。
    【解决方案2】:

    尝试将其作为 WrappedConnection 访问,像这样

    Connection con = ds.getConnection();
    WrappedConnection wc = (WrappedConnection) con;
    OracleConnection conn =  (OracleConnection) wc.getUnderlyingConnection();
    

    【讨论】:

    • 究竟是什么不起作用?我想你得到了一个 ClassCastException,但是在哪里呢?如果它正在转换为 OracleConnection,请找出您使用 wc.getUnderlyingConnection() 获得的对象的真实类。
    猜你喜欢
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 2013-06-11
    • 1970-01-01
    相关资源
    最近更新 更多