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(<?xml version=”1.0" ?><?xml version='1.0' encoding='UTF-8'?>
而不仅仅是 <?xml version=”1.0" ?>
,而且您的双引号是一些有趣的字符,而不是 "
)。修复这些后,它加载了。
@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"
匹配<driver>oraclejdbc</driver>
元素。
工作后,我在日志中看到了这一点。
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 失败