Oracle DB 连接:失败描述:“WFLYJCA0041:无法为驱动程序加载模块 [com.oracle]

Posted

技术标签:

【中文标题】Oracle DB 连接:失败描述:“WFLYJCA0041:无法为驱动程序加载模块 [com.oracle]【英文标题】:Oracle DB Connection: failure description: "WFLYJCA0041: Failed to load module for driver [com.oracle] 【发布时间】:2021-05-25 08:47:55 【问题描述】:

设置从 Keycloak 12.0.3 到 Oracle19C 的连接

接收消息:“故障描述:“WFLYJCA0041:无法为驱动程序 [com.oracle] 加载模块”

我重新查看了 x100,但似乎找不到丢失的内容。任何善良的灵魂可以评论以下我错过的内容吗?

JAR 文件路径: /modules/system/layers/keycloak/com/oracle/main 模块.xml ojdbc10.jar

standalone.xml

<datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true" statistics-enabled="$wildfly.datasources.statistics-enabled:$wildfly.statistics-enabled:false">
        <connection-url>jdbc:oracle:thin:@DBURL:1521:SID</connection-url>
        <driver>oracle</driver>
        <pool>
            <min-pool-size>5</min-pool-size>
            <max-pool-size>100</max-pool-size>
            <prefill>true</prefill>
            <flush-strategy>IdleConnections</flush-strategy>
        </pool>
        <security>
            <user-name>USER</user-name>
            <password>PASSWORD</password>
        </security>
        <validation>
            <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
            <check-valid-connection-sql>select 1 from dual</check-valid-connection-sql>
            <background-validation>true</background-validation>
            <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
            <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
        </validation>
        <timeout>
            <blocking-timeout-millis>5000</blocking-timeout-millis>
            <idle-timeout-minutes>5</idle-timeout-minutes>
        </timeout>
    </datasource>
    <driver name="oracle" module="com.oracle">
            <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
            <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
        </driver>

module.xml

 <?xml version=”1.0" ?><?xml version='1.0' encoding='UTF-8'?>
 <module xmlns=”urn:jboss:module:1.3" name=”com.oracle”>
 <resources>
 <resource-root path=”ojdbc10.jar”/>
 </resources>
 <dependencies>
 <module name=”javax.api”/>
 <module name=”javax.transaction.api”/>
 </dependencies>
</module>

【问题讨论】:

能否给出xml和驱动jar所在模块路径的目录结构? keycloak-12.0.3/modules/system/layers/keycloak/com/oracle/main - 带有文件“module.xml”和“ojdbc10.jar” @ernest_k 谢谢你的提示。在以下内容下创建并且可以正常工作。 ----oracle ------jdbc --------main ----------module.xml 这有点难以重现。我在您的模块 xml 文件中看到的两个主要问题是错误的 xml(&lt;?xml version=”1.0" ?&gt;&lt;?xml version='1.0' encoding='UTF-8'?&gt; 而不仅仅是 &lt;?xml version=”1.0" ?&gt;,而且您的双引号是一些有趣的字符,而不是 ")。修复这些后,它加载了。 @ernest_k 谢谢。你让我免于又一个不眠之夜。非常感谢。 【参考方案1】:

我遇到了这个问题,我可以解决的唯一方法是将 oracle 驱动程序放在 keycloak/modules 目录中。

这些都不起作用:

keycloak/modules/system/layers/keycloak/com/oracle KeyCloak 文档中描述的就是这里,它适用于我的 Postgres,但我无法从这里加载 oracle 驱动程序。 keycloak/modules/system/layers/base/com/oracle :绝望地尝试了这个。

但这对我有用:

keycloak/modules/com/oracle

keycloak/modules/com/oracle/main/module.xml

<?xml version='1.0' encoding='UTF-8'?>
<module xmlns="urn:jboss:module:1.1" name="com.oracle">
    <resources>
        <resource-root path="ojdbc8.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

ojdbc8.jar 文件也在这个目录中。

注意:name="com.oracle" 必须与模块目录中的路径 com/oracle 匹配。

standalone.xml 文件中,我添加了以下数据源。

<datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true">
    <connection-url>jdbc:oracle:thin:@hostname:1521:SID</connection-url>
    <driver>oraclejdbc</driver>
    <pool>
            <min-pool-size>1</min-pool-size>
            <max-pool-size>20</max-pool-size>
    </pool>
    <security>
            <user-name>user</user-name>
            <password>password</password>
    </security>
</datasource>

使用匹配的驱动程序

<driver name="oraclejdbc" module="com.oracle">
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
</driver>

注意:

module="com.oracle" 匹配路径 com/oracle。 驱动程序name="oraclejdbc" 匹配&lt;driver&gt;oraclejdbc&lt;/driver&gt; 元素。

工作后,我在日志中看到了这一点。

2021-05-31 14:46:17,376 INFO  [org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory] (ServerService Thread Pool -- 60) Database info: databaseUrl=jdbc:oracle:thin:@server:1521:SID, databaseUser=user, databaseProduct=Oracle Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.10.0.0.0, databaseDriver=Oracle JDBC driver 19.3.0.0.0

但在它工作之前,我会在日志中看到以下错误(我包括在内,以防人们在谷歌上搜索错误消息)

2021-05-31 14:47:12,049 ERROR [org.jboss.as.controller.management-operation] (ServerService Thread Pool -- 50) WFLYCTL0013: Operation ("add") failed - address: ([
    ("subsystem" => "datasources"),
    ("jdbc-driver" => "oraclejdbc")
]) - failure description: "WFLYJCA0115: Module for driver [com.oracle] or one of it dependencies is missing: [com.oracle]"

还是这个错误

2021-05-31 14:47:14,962 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("add") failed - address: ([
    ("subsystem" => "datasources"),
    ("data-source" => "KeycloakDS")
]) - failure description: 
    "WFLYCTL0412: Required services that are not installed:" => ["jboss.jdbc-driver.oraclejdbc"],
    "WFLYCTL0180: Services with missing/unavailable dependencies" => [
        "org.wildfly.data-source.KeycloakDS is missing [jboss.jdbc-driver.oraclejdbc]",
        "jboss.driver-demander.java:jboss/datasources/KeycloakDS is missing [jboss.jdbc-driver.oraclejdbc]"
    ]

【讨论】:

谢谢,这对我有用,但对于 oracle 12,URL 对我有用 jdbc:oracle:thin:@localhost:1521/xe【参考方案2】:

通过命令行添加模块。

模块添加 --name=oracle.jdbc --resources=customization/ojdbc10.jar --dependencies=javax.transaction.api

在以下结构下创建:

-钥匙斗篷

--模块

----神谕

------jdbc

--------主要

---------模块.xml

---------ojdbc10.jar

【讨论】:

以上是关于Oracle DB 连接:失败描述:“WFLYJCA0041:无法为驱动程序加载模块 [com.oracle]的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 node-oracledb 的 SID 连接到 Oracle DB 失败

plsql连接ORacle数据库时报:因目标主机或对象不存在,连接失败。怎样解决

DB2数据库连接问题

ORA-12545:因目标主机或对象不存在,连接失败!

Oracle升级前备份和失败回退

PL/SQL/Oracle DB:过程:ORA-29013:SSL MAC 验证失败(数据库 19c)