Spring应用程序使用JNDI查找来获取数据源,如下所示:
@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()
返回T4CConnection
,其中OracleConnection
是必需的。尝试了几种获取oracleConnection
的方法,但似乎无法获取。任何帮助,将不胜感激。 最佳答案
我相信这与您的war / ear文件的内容有关。不要打包在Oracle驱动程序.jar文件中。
具体来说,如果您的war文件(或等效文件)中有ojdbc6.jar
,它将引起冲突。可以使用该jar进行编译,但是您不希望在类路径中使用它,因为默认情况下它已在Weblogic类路径中。
有关类似信息,请参见以下链接:here和here