0

最近、glassfish 3.1.1から3.1.2に移行しましたが、次のエラーが発生しました

java.lang.ClassCastException: com.sun.gjc.spi.jdbc40.ResultSetWrapper40 cannot be cast to oracle.jdbc.OracleResultSet

ラインで

oracle.sql.BLOB bfile = ((OracleResultSet) rs).getBLOB("filename");

次のルーチンで:

public void fetchPdf(int matricola, String anno, String mese, String tableType, ServletOutputStream os) {
    byte[] buffer = new byte[2048];
    String query = "SELECT filename FROM "
                + tableType + " where matricola = " + matricola
                + " and anno = " + anno
                + ((tableType.equals("gf_blob_ced") || tableType.equals("gf_blob_car")) ? " and mese = " + mese : "");

    InputStream ins = null;

    //--------
    try {

        Connection conn = dataSource.getConnection();
        //Connection conn = DriverManager.getConnection(connection, "glassfish", pwd);
        java.sql.Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(query);
        if (rs.next()) {
            logger.info("select ok " + query);
            oracle.sql.BLOB bfile = ((OracleResultSet) rs).getBLOB("filename");

            ins = bfile.getBinaryStream();

            int length;
            while ((length = (ins.read(buffer))) >= 0) {
                os.write(buffer, 0, length);
            }

            ins.close();

        } else {
            logger.info("select Nok " + query);
        }
        rs.close();
        stmt.close();
        //conn.close();

    } catch (IOException ex) {
        logger.warn("blob file non raggiungibile: "+query);
    } catch (SQLException ex) {
        logger.warn("connessione non riuscita");
    }
}

Glassfish接続プールを使用しています

@Resource(name = "jdbc/ape4")
    private DataSource dataSource;

jdbc / ape4リソースは、次のパラメータを持つOracle接続プールに属しています。

NetworkProtocol tcp
LoginTimeout    0
PortNumber  1521
Password    xxxxxxxx
MaxStatements   0
ServerName  server
DataSourceName  OracleConnectionPoolDataSource
URL jdbc:oracle:thin:@server:1521:APE4
User    glassfish
ExplicitCachingEnabled  false
DatabaseName    APE4
ImplicitCachingEnabled  false

oracleドライバーはojdbc6.jar、oracleDBは10gです。

誰かが私に何が起こっているのか助けてもらえますか?Glassfish 3.1.1では、正常に機能していました。

4

1 に答える 1

3

このコードで標準のJDBCAPIを使用しない必要はありません。Oracle固有の機能を使用していないためrs.getBlob("filename").getBinaryStream()、同様に機能します。

これを維持することを主張する場合は、データソースのJDBCオブジェクトラッピングオプションをオフにしてください。

于 2012-06-07T05:38:53.803 に答える