java.lang.classcastexception com.ibm.ws.rsadapter.jdbc.wsjdbcconnection 与 oracle.jdbc.oracleConnection 不兼容
java.lang.classcastexception com.ibm.ws.rsadapter.jdbc.wsjdbcconnection incompatible with oracle.jdbc.oracleConnection
面向 java.lang.classcastexception com.ibm.ws.rsadapter.jdbc.wsjdbcconnection 与 websphere 8.5 中的 oracle.jdbc.oracleConnection 不兼容。 weblogic
中的应用运行正确
当 运行 我在 Websphere8.5 上使用 JNDI.However 的代码时出现此异常,同样的代码 运行 在 Weblogic 8.1 上很好,Tomcat 5.5,JBoss4.2.x。
该代码还可以通过 JNDI 使用 数据源 (WebSphere Application Server V4)
正常运行
并且当我通过非 JNDI.But 运行 应用程序时,代码也可以正常工作,当我使用 DataSource 配置[=32= 时,下面提到的异常会出现] 通过 JNDI 在 Websphere 中。
下面是Exception来的StackTrace
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.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 规范定义的解包 API,它是为此目的而存在的,
OracleConnection oraCon = connection.unwrap(oracle.jdbc.OracleConnection.class);
面向 java.lang.classcastexception com.ibm.ws.rsadapter.jdbc.wsjdbcconnection 与 websphere 8.5 中的 oracle.jdbc.oracleConnection 不兼容。 weblogic
中的应用运行正确当 运行 我在 Websphere8.5 上使用 JNDI.However 的代码时出现此异常,同样的代码 运行 在 Weblogic 8.1 上很好,Tomcat 5.5,JBoss4.2.x。 该代码还可以通过 JNDI 使用 数据源 (WebSphere Application Server V4)
正常运行并且当我通过非 JNDI.But 运行 应用程序时,代码也可以正常工作,当我使用 DataSource 配置[=32= 时,下面提到的异常会出现] 通过 JNDI 在 Websphere 中。
下面是Exception来的StackTrace
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.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 规范定义的解包 API,它是为此目的而存在的,
OracleConnection oraCon = connection.unwrap(oracle.jdbc.OracleConnection.class);