对于JBoss/Wildfly上部署的应用程序,允许使用不同jdbc驱动程序的正确方法是什么?

对于JBoss/Wildfly上部署的应用程序,允许使用不同jdbc驱动程序的正确方法是什么?,jdbc,jboss,wildfly,keycloak,Jdbc,Jboss,Wildfly,Keycloak,我的设置如下: 我得到了一个应用程序,我在/standalone/deployments /standalone/deployments中我的部署的jboss deployment structure.xml如下所示: [...] 完全删除jboss部署结构.xml(因为如果没有类加载问题,就不能使用它),这是行不通的。我在驱动程序旁边使用了更多的依赖项(keydeport),但当时找不到 我的模块org/postgresql/main中的module.xml如下所示(如中所述)

我的设置如下:

  • 我得到了一个应用程序,我在
    /standalone/deployments
  • /standalone/deployments
    中我的部署的
    jboss deployment structure.xml
    如下所示:

[...]

  • 完全删除
    jboss部署结构.xml
    (因为如果没有类加载问题,就不能使用它),这是行不通的。我在驱动程序旁边使用了更多的依赖项(keydeport),但当时找不到

  • 我的模块
    org/postgresql/main
    中的
    module.xml
    如下所示(如中所述)


  • 我的要求是,允许不同类型的jdbc驱动程序,例如postgres、oracle、mssql

第一个选项:

我可以将我的
jboss部署结构.xml
更改为


[...]
[...]
(添加了可选参数)

然后我必须明确地允许所有驱动程序。似乎不是最好的办法

这个想法来自标准


第二选项:

我将模块路径更改为
driver/jdbc/main
(而不是
org/postgres/main
),并将
module.xml
更改为


[...]
(已更改模块名称)

然后使用我的
jboss部署结构.xml
中的模块引用


[...]
[...]
现在我强迫我的客户按照我的建议命名驱动程序模块。他们不能像每个标准文档中提到的那样命名模块

这个想法来源于此


我是在一个KeyClope安装的环境中完成这项工作的,它有一个自我实现的用户联合来访问一个单独的(遗留的)用户数据库。因此,删除
jboss部署结构.xml
不是上面提到的选项

实现灵活使用jdbc驱动程序的目标的正确方法是什么?



编辑:已提到,正在删除
jboss部署结构。xml
不起作用。

我建议您将所有数据库驱动程序作为模块单独安装。单个模块将帮助您在将来轻松跟踪和升级驱动程序JAR

只要应用程序没有任何类加载问题,就不需要在
jboss deployment structure.xml
文件中提到这些驱动程序。它们是静态模块,将在服务器启动时加载

此外,安装驱动程序模块后,必须在standalone.xml文件中添加条目。例如,如果我安装了Oracle驱动程序

<driver name="oracle" module="com.oracle">
 <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
</driver>

oracle.jdbc.driver.OracleDriver
在标签内。 在标记中添加数据源定义(Examples旁边):


jdbc:oracle:thin:@[HOST_NAME]:1521:[SID]
oracle[必须与驱动程序名称匹配]
1.
5.
真的
[用户]
[PWD]

我建议您将所有数据库驱动程序作为模块单独安装。单个模块将帮助您在将来轻松跟踪和升级驱动程序JAR

只要应用程序没有任何类加载问题,就不需要在
jboss deployment structure.xml
文件中提到这些驱动程序。它们是静态模块,将在服务器启动时加载

此外,安装驱动程序模块后,必须在standalone.xml文件中添加条目。例如,如果我安装了Oracle驱动程序

<driver name="oracle" module="com.oracle">
 <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
</driver>

oracle.jdbc.driver.OracleDriver
在标签内。 在标记中添加数据源定义(Examples旁边):


jdbc:oracle:thin:@[HOST_NAME]:1521:[SID]
oracle[必须与驱动程序名称匹配]
1.
5.
真的
[用户]
[PWD]

我不希望在一个系统上安装所有驱动程序,但希望在每个客户系统上安装不同的驱动程序。如果我没有提到jboss部署结构中的驱动程序,我会得到一个错误,即“找不到合适的驱动程序”。或者,您的方法是完全删除jboss部署结构吗?使用standalone.xml的部分已经理解并完成了。我想说的是,如果没有任何类加载问题,就不要使用
jboss部署结构.xml
。Wildfly将从standalone.xml文件加载配置,您在该文件中提到了
driver
标记下的模块详细信息。要删除
jboss部署结构,xml
完全不起作用。除了驱动程序之外,我还使用了更多的依赖项,这在当时是找不到的。错误:
java.lang.NoClassDefFoundError:[…]org/keydepot/protocol/oidc/mappers/OIDCAccessTokenMapper。
仅删除我也获得的驱动程序后:
java.sql.SQLException:未找到适合jdbc的驱动程序:postgresql://myUrl
。因此,对我来说,我似乎不能删除
jboss deployment structure.xml
或文件中的驱动程序。我不想在一个系统上安装所有驱动程序,而是在每个客户系统上安装不同的驱动程序。如果我没有提到jboss部署结构中的驱动程序,我会得到一个错误,即“找不到合适的驱动程序”。或者,您的方法是完全删除jboss部署结构吗?使用standalone.xml的部分已经理解并完成了。我想说的是,如果没有任何类加载问题,就不要使用
jboss部署结构.xml
。Wildfly将从standalone.xml文件加载配置,您在该文件中提到了
driver
标记下的模块详细信息。要删除
jboss部署结构,xml
完全不起作用。除了驱动程序之外,我还使用了更多的依赖项,这在当时是找不到的