将java.sql.Connection转换为Oracle连接

将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应用程序,在其中调用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.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的包装