oracle.jdbc.driver.T4CConnection无法转换为JBOSS EAP 6.1中的oracle.jdbc.OracleConnection

时间:2015-01-07 14:40:21

标签: jboss7.x classcastexception jboss-eap-6 ojdbc bfile

我已经在JBOSS 7.1.1 AS中部署了我的耳朵。 为了在应用程序中查看文档,我们使用BFILE。 使用下面的代码:

Connection con = this.jdbcTemplate.getDataSource().getConnection();
con = unwrapConnection(con);

if(null != con)
{
    System.out.println("Is conncetion Closed" + con.isClosed());
    PreparedStatement ps = con.prepareStatement(sql);
    ResultSet rs = ps.executeQuery();
    while(rs.next()) {
    {
        OracleResultSet ors = rs.unwrap(OracleResultSet.class);
        bfile = ors.getBFILE(1);
        fileName = rs.getString(2);
        docFormat = rs.getString(3);
    }
    bfileMap.put("EventDocDetails", bfile);
    bfileMap.put("Format", docFormat);
    bfileMap.put("FileName", fileName);
}

private static Connection unwrapConnection(Connection connection) throws SQLException {

    System.out
        .println("Datasource is maintained by Jboss so Unwarping Jboss JDBC Connection to oracle.jdbc.OracleConnection. Driver name is "
            + connection.getMetaData().getDriverName());
    return (oracle.jdbc.OracleConnection) ((WrappedConnection) connection)
        .getUnderlyingConnection(); 
}

我们正在使用Ojdc6.11.2.0.3 jar。 在耳朵的清单中,我有依赖org.jboss.ironjacamar.jdbcadapters

这适用于JBOSS AS 7.1.1

但同样的耳朵在JBOSS EAP 6.1中不起作用 我得到以下异常

oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection
19:54:51,395 ERROR [stderr] (http-/192.168.178.31:8080-5) java.lang.ClassCastException: oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection.

我很困惑,因为几乎所有事情都是一样的。

2 个答案:

答案 0 :(得分:0)

由于Jboss和您的应用程序(WAR或EAR)中存在两个相同的类,因此看起来像一个类加载问题。 在我的Jboss 6.3中,我发现jboss \ modules \ com \ oracle \ ojdbc6.jar里面有T4CConnection.class,这可能是问题的原因。如果它存在于您的jboss中,您可以尝试在jboss-deployment-structure.xml中排除该lib,如:

<deployment>
    <exclusions>
        <module name="com.oracle.ojdbc6"/>
    </exclusions>
</deployment>

希望它有所帮助。

答案 1 :(得分:0)

经过大量的讨论后,我从JBOSS的控制台中删除了JDBC驱动器并添加了一个新驱动器。它工作正常。