如何为声明为提供的库的应用程序配置 JBoss?

How to configure JBoss for applications with libraries declared as provided?

我有一个 Java Web 应用程序,它使用 OracleConnection JDBC class 来执行一些 PL/SQL 命令。由于在我们的生产环境中,Oracle 驱动程序库由其他应用程序共享,我需要使用 provided Maven 依赖范围声明它:

<dependency>
  <groupId>com.oracle</groupId>
  <artifactId>oracle</artifactId>
  <version>11.2.0.4</version>
  <scope>provided</scope>
</dependency>

我应该如何配置我的本地 JBoss EAP 6.2 以使该库可用于我的应用程序?我已尝试使用 jboss-cli 将其配置为核心模块,如

中所述

Install a JDBC Driver as a Core Module

这是我执行的最后一条命令:

/subsystem=datasources/jdbc-driver=oracle:
add(driver-name=oracle,
driver-module-name=oracle.jdbc,
driver-xa-datasource-class-name=oracle.jdbc.xa.client.OracleXADataSource) 

命令输出:

{"outcome" => "success"}

但是,在启动时,我们的应用程序会尝试通过 DriverManager 建立连接:

OracleConnection conn = (OracleConnection) DriverManager.getConnection(url, username, password);

这行代码引发了以下异常:

java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@10.50.240.70:1521:doc21a

另一方面,如果我将范围更改为 compile,那么 Oracle 库将与我的应用程序一起部署(在 META-INF/lib 文件夹中)并且一切正常。

我该如何解决这个问题?核心模块是否适合这个?

是否有另一种使用 JBoss 与多个应用程序共享库的方法?

我明白了!由于我正在使用 DriverManager 获取供应商特定 Connection 实施的实例,因此需要按照 JBoss 文档的以下部分所述进行操作:

Access Vendor Specific Classes

现在可以使用了!