Недавно я мигрировать из GlassFish 3.1.1 на 3.1.2 и я получил следующее сообщение об ошибкеGlassFish 3.1.2 - ResultSetWrapper40 не может быть приведен к oracle.jdbc.OracleResultSet
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 ресурс принадлежит к соединительным оракулу пулу со следующими парами
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
Драйвер оракула ojdbc6.jar, Oracle БД 10g.
Может ли кто-нибудь помочь мне в том, что происходит? На Glassfish 3.1.1 он работал нормально.
Спасибо. Я отключил обертку объекта JDBC, но также мне нужно было chenge DataSourceName из OracleConnectionPoolDataSource в OracleDataSource и тип ресурса в javax.sql.DataSource вместо javax.sql.ConnectionPoolDataSource. Существуют ли какие-либо последствия с использованием другого типа ресурса? – maxqua72
@ maxqua72 Почему бы просто не использовать стандартные методы JDBC. Ничто в коде не требует использования специальных методов Oracle. –
Да, я хочу, но я тоже хотел бы понять. Ваш ответ исправил мою проблему, но у меня все еще есть дыры, чтобы заполнить мои знания об этой теме. Благодарю. – maxqua72