2014-12-03 46 views
3

Spring應用程序如下:錯誤使用JNDI查找獲取數據源鑄造T4CConnection到的OracleConnection

@Bean(name = "dataSource1", destroyMethod = StringUtils.EMPTY) 
    public DataSource dataSource() { 
     final JndiDataSourceLookup lookup = new JndiDataSourceLookup(); 
     lookup.setResourceRef(true); 

     return lookup.getDataSource(this.environment.getProperty(Constants.DB_JNDI_NAME_ES)); 
    } 

,並獲得來自數據源的連接如下:

@Autowired 
@Qualifier("dataSource1") 
private DataSource ds; 



Connection conn = null; 
conn = this.ds.getConnection(); 

但是當我傳遞連接StructDescriptor拋出classCastException如下:

StructDescriptor desc1 = StructDescriptor.createDescriptor( 「MSAF_DBA.AMOUNT_DUE_OBJ」 conn);在

java.lang.ClassCastException: weblogic.jdbc.wrapper.PoolConnection_oracle_jdbc_driver_T4CConnection cannot be cast to oracle.jdbc.OracleConnection 
    at oracle.sql.StructDescriptor.createDescriptor(StructDescriptor.java:101) 
    at oracle.sql.StructDescriptor.createDescriptor(StructDescriptor.java:72) 
    at com.ceiwc.es.policyholder.dao.PolicyHolderDaoImpl.getAmountDue(PolicyHolderDaoImpl.java:290) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 

我的理解是getConnection()回報作爲地方需要OracleConnection一個T4CConnection。嘗試了幾種方法來獲得oracleConnection,但似乎不能得到它。任何幫助,將不勝感激。

回答

3

我相信這與你的戰爭/耳朵文件的內容有關。不要打包在Oracle驅動程序.jar文件中。

具體而言,如果您的war文件(或等效文件)中有ojdbc6.jar,則會導致衝突。使用該jar進行編譯是很好的,但是你不會在你的類路徑中需要它,因爲默認情況下它已經在Weblogic類路徑中。

看到這些鏈接,類似的信息:herehere

+3

如果您正在使用Maven,使這個罐子_provided_。另外,在管理控制檯中,您需要**取消選擇數據源的連接池/高級下的_Wrap數據類型_複選框。 – NuAlphaMan 2014-12-04 15:22:24