You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JBOSS EAP 8中正确获取oracle.jdbc.driver.OracleConnection?

在JBOSS EAP 8中正确获取OracleConnection的解决方案

针对你遇到的Connection is not an instance of oracle connection错误,可按以下步骤排查解决:

1. 替换OracleConnection的引用类型

ojdbc11中推荐使用标准接口oracle.jdbc.OracleConnection,而非具体实现类oracle.jdbc.driver.OracleConnection。JBOSS的连接包装层通常只对标准JDBC接口的实现进行包装,直接尝试unwrap到驱动内部实现类会失败。

修改代码如下:

Connection wrappedConnection = connectionHandle.getConnection();
oracle.jdbc.OracleConnection oracleConn = null;
if (wrappedConnection.isWrapperFor(oracle.jdbc.OracleConnection.class)) {
         oracleConn = wrappedConnection.unwrap(oracle.jdbc.OracleConnection.class);
}
else {
   System.out.println("Connection is not an instance of oracle connection");
}

// 后续创建STRUCT、ARRAY的逻辑保持不变
Collection<STRUCT> structs = new ArrayList<STRUCT>();
StructDescriptor desc = StructDescriptor.createDescriptor("SOME_OBJECT",oracleConn);
for(SomeVO someVO : someDetails) {
    Object[] objArray = someVO.toInvArray();
    structs.add(new STRUCT(desc,oracleConn,objArray));
}

ArrayDescriptor arraydesc = ArrayDescriptor.createDescriptor("SOME_ARRAY",oracleConn);
ARRAY array = new ARRAY(arraydesc,oracleConn,structs.toArray()); 

2. 修正Maven依赖的作用域

由于你已经通过JBOSS核心模块提供ojdbc驱动,需避免应用包中打包重复的驱动类,否则会引发类加载冲突。将依赖的scope设置为provided:

<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc11</artifactId>
    <version>23.9.0.25.07</version>
    <scope>provided</scope>
</dependency>

3. 验证Oracle核心模块的配置

确保你在JBOSS中创建的Oracle模块配置正确:

  • 模块目录结构应为modules/com/oracle/main(对应com.oracle模块名),目录下放置ojdbc11.jar和module.xml
  • module.xml需包含正确的依赖和资源配置,示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<module name="com.oracle" xmlns="urn:jboss:module:1.9">
    <resources>
        <resource-root path="ojdbc11.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
        <module name="javax.servlet.api" optional="true"/>
    </dependencies>
</module>

4. 确认jboss-deployment-structure.xml的依赖有效性

确保jboss-deployment-structure.xml中引用的模块名与你创建的模块名完全一致,若模块名是com.oracle.database.jdbc,则需同步修改此处的模块名。另外,可添加export="true"确保模块类对应用可见:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="com.oracle" export="true"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

内容的提问来源于stack exchange,提问作者Karthik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 14:53:11