将java.sql.Connection转换为Oracle连接
我有一个java应用程序,在其中调用Oracle过程并将Oracle数组作为参数传递。我的申请是EAR 在Java 7和Jboss 7上,一切都正常工作,但当我们升级到Java 8和Wildfly 10时,出现了以下错误:将java.sql.Connection转换为Oracle连接,java,oracle,connection,wildfly-10,Java,Oracle,Connection,Wildfly 10,我有一个java应用程序,在其中调用Oracle过程并将Oracle数组作为参数传递。我的申请是EAR 在Java 7和Jboss 7上,一切都正常工作,但当我们升级到Java 8和Wildfly 10时,出现了以下错误: java.lang.ClassCastException: org.jboss.jca.adapters.jdbc.jdk7.WrappedConnectionJDK7 cannot be cast to org.jboss.jca.adapters.jdbc.Wrap
java.lang.ClassCastException:
org.jboss.jca.adapters.jdbc.jdk7.WrappedConnectionJDK7 cannot be cast
to org.jboss.jca.adapters.jdbc.WrappedConnection
java.lang.ClassCastException:
org.jboss.jca.adapters.jdbc.jdk7.WrappedConnectionJDK7 cannot be cast to
org.jboss.jca.adapters.jdbc.jdk7.WrappedConnectionJDK7
经过一些研究,我将代码更改为:
WrappedConnectionJDK7 wc = (WrappedConnectionJDK7 ) conn;
OracleConnection oraconn = (OracleConnection) wc.getUnderlyingConnection();
我在pom.xml中添加了依赖项
<dependency>
<groupId>org.jboss.ironjacamar</groupId>
<artifactId>ironjacamar-jdbc</artifactId>
<version>1.3.2.Final</version>
</dependency>
我以前不得不打开类似的连接(但不是完全相同的包装类),并使用了:
OracleConnection oconn;
if ( conn.isWrapperFor( OracleConnection.class ) )
{
oconn = (OracleConnection) conn.unwrap( OracleConnection.class );
}
else
{
throw new SQLException( "Not an Oracle Connection" );
}
我在EAR/META-INF中添加了jboss-deployment-structure.xml,它解决了这个问题
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<sub-deployment name="myapp.jar">
<dependencies>
<module name="org.jboss.ironjacamar.jdbcadapters" />
<module name="com.oracle.db" />
</dependencies>
</sub-deployment>
</jboss-deployment-structure>
Try OracleConnection oraconn=wc.unwrap(OracleConnection.class);我得到的错误类似于“WrappedConnectionJDK7 wc=(WrappedConnectionJDK7)conn”;我得到的是java.sql.SQLException:IJ031030:不是oracle.jdbc.driver.OracleConnection的包装