2011-11-22 26 views
1

我有這段代碼,用於使用JBoss 5.1,Oracle 11,ojdbc6.jar正確運行。我根據需要獲得了OracleConnection。打開到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連接

如果您有任何想法,請幫助。

回答

0

嘗試訪問它作爲一個WrappedConnection,這樣

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

感謝,但我已經嘗試這樣做,是不工作... – mariu

+0

究竟不起作用?我想你會得到一個ClassCastException,但是在哪裏?如果它轉換爲OracleConnection,請查找使用wc.getUnderlyingConnection()獲得的對象的實際類。 – Viruzzo

3

我用 「oracle.jdbc.pool.OracleConnectionPoolDataSource」 作爲GlassFish中datasouce類。

使用該類或找到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; 
} 
+3

確實有效,但請注意,應始終關閉包裝器連接,而不要打開OracleConnection,因爲這不會將連接釋放回池中。 此外,您不應該嘗試關閉OracleConnection,因爲這會導致「連接已關閉」異常。 – Paris