Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.classcastexception com.ibm.ws.rsadapter.jdbc.wsjdbc连接与oracle.jdbc.oracleConnection不兼容_Java_Spring_Hibernate_Websphere - Fatal编程技术网

java.lang.classcastexception com.ibm.ws.rsadapter.jdbc.wsjdbc连接与oracle.jdbc.oracleConnection不兼容

java.lang.classcastexception com.ibm.ws.rsadapter.jdbc.wsjdbc连接与oracle.jdbc.oracleConnection不兼容,java,spring,hibernate,websphere,Java,Spring,Hibernate,Websphere,面向java.lang.classcastexception com.ibm.ws.rsadapter.jdbc.wsjdbc连接与websphere 8.5中的oracle.jdbc.oracleConnection不兼容。在weblogic中正确运行的应用程序 在使用JNDI在Websphere8.5上运行代码时,我遇到了这个异常。然而,同样的代码在Weblogic 8.1、Tomcat 5.5、JBoss 4.2.x上运行良好。 代码还可以通过使用数据源(WebSphereApplicat

面向java.lang.classcastexception com.ibm.ws.rsadapter.jdbc.wsjdbc连接与websphere 8.5中的oracle.jdbc.oracleConnection不兼容。在weblogic中正确运行的应用程序

在使用JNDI在Websphere8.5上运行代码时,我遇到了这个异常。然而,同样的代码在Weblogic 8.1、Tomcat 5.5、JBoss 4.2.x上运行良好。 代码还可以通过使用数据源(WebSphereApplicationServerV4)的JNDI正常运行

当我通过非JNDI运行应用程序时,代码也可以正常工作。但是,当我通过JNDI在Websphere中使用数据源配置时,下面提到的异常会出现

下面是即将发生的异常的堆栈跟踪

com.ibm.ws.rsadapter.jdbc.WSJdbcConnection incompatible with oracle.jdbc.OracleConnection
*java.lang.ClassCastException: com.ibm.ws.rsadapter.jdbc.WSJdbcConnection incompatible with oracle.jdbc.OracleConnection*
        at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:149)
        at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:115)
        at com.syfact.mo.administrator.pctr.LoadAction.loadPostalcodes(LoadAction.java:182)
        at com.syfact.mo.administrator.pctr.LoadAction.doAction(LoadAction.java:490)
        at com.syfact.web.servlet.Syfact.processStandardCommand(Syfact.java:370)
        at com.syfact.web.servlet.Syfact.doPost(Syfact.java:291)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:966)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:907)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:145)
        at com.syfact.ConnectionFilter.doFilter(ConnectionFilter.java:40)
        at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:696)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:641)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:475)
        at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:463)
        at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3107)
        at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:238)
        at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:811)
        at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1425)
        at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:92)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:465)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:394)
        at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:102)
        at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:152)
        at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:213)
        at com.ibm.io.async.AbstractAsyncFuture.fireCompletionActions(AbstractAsyncFuture.java:195)
        at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
        at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:193)
        at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:725)
        at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:847)
        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1498)
我已经为这个问题寻找了将近一周的解决方案,并找到了一个:

例如:

connection = (Connection) WSJdbcUtil.getNativeConnection((WSJdbcConnection)dataSource.getConnection()); 
OracleCallableStatement ocstmt = (OracleCallableStatement) connection.prepareCall(sql); "*

我不想在我的项目中使用WAS库,因为我的代码不仅要部署在websphere上,而且应该可以部署在Tomcat、JBoss、Weblogic等上……

为了访问JDBC驱动程序特定于供应商的接口,您需要使用JDBC规范定义的unwrap API,该API用于此目的

OracleConnection oraCon = connection.unwrap(oracle.jdbc.OracleConnection.class);

@爸爸,这个答案应该能解决你问题中的问题。您是对的,
wsjdbcuti
是一个特定于供应商的API,它会将您锁定到WebSphere中(这是一个非常旧的已弃用的WAS API)。相反,@njr建议使用JDBC标准的
Connection.unwrap(类接口)
方法,该方法应可移植到任何符合JDBC的环境中。如果这不能回答你的问题,你就必须更清楚地知道你想解决什么问题solve@daddy_cool使用unwrap方法,它将在weblogic中工作,因为它是从pool.java.sql.connection.unwrap(interfaceClass)获取本机连接的JDBC兼容方式是JDBC规范定义的用于访问JDBC供应商特定接口的解决方案,如您正在尝试的。WSJdbcUtil不能跨应用程序服务器移植。直接强制转换不能跨应用程序服务器移植。唯一的可移植解决方案是JDBC规范定义的一个:unwrap。