我正在尝试使用 kerberos 为 oracle 数据源 (ojdbc8) 配置 wildfly/jboss 服务器。 kerberos 部分工作正常,但是,当到达 oracle 侦听器时,我在 wildfly 中遇到异常:
2023-04-12 19:07:19,152 WARN [org.jboss.jca.core.connectionmanager.pool.strategy.PoolBySubject] (management-handler-thread - 1) IJ000604: Throwable while attempting to get a new connection: null: javax.resource.ResourceException: IJ031084: Unable to create connection
(...)
Caused by: java.lang.ClassNotFoundException: com.sun.security.jgss.ExtendedGSSContext from [Module "oracle.driver" from local module loader @53f48368 (finder: local module finder @24d4d7c9 (roots: /opt/wildfly-25.0.1.Final/modules,/opt/wildfly-25.0.1.Final/modules/system/layers/base))]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:255)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
我无法在 wildfly 文件夹树中找到该课程,我不知道在哪里可以找到/下载该课程。请注意,我对java的了解很少
根据我的理解,java 带有一些“本机”类,因此我尝试安装不同的 java 11 版本(oracle、amazon、openjdk)并执行“java -verbose”来识别该包/模块。但是我没有成功。我在我的 jboss 树中找到一个引用该包/模块的文件:
/opt/wildfly-25.0.1.Final/modules/system/layers/base/sun/jdk/main/module.xml
<module name="sun.jdk" xmlns="urn:jboss:module:1.6">
<properties>
<property name="jboss.api" value="deprecated"/>
</properties>
<resources>
<!-- currently jboss modules has not way of importing services from
classes.jar so we duplicate them here -->
<resource-root path="service-loader-resources"/>
</resources>
<dependencies>
<module name="sun.scripting" export="true"/>
<system export="true">
<paths>
<!-- See below for replacement modules -->
<!-- Internal to java.base -->
<path name="com/sun/net/ssl/internal/ssl"/>
<path name="com/sun/crypto/provider"/>
<path name="sun/security/action"/>
(...)
<!-- Module jdk.security.jgss -->
<path name="com/sun/security/jgss"/>
(...)
知道如何解决这个问题吗?
谢谢,
最后我自己解决了这个问题,
我已经编辑了 jdbc module.xml 文件以将“sun.jdk”模块添加为依赖项:
cat /opt/wildfly-25.0.1.Final/modules/system/layers/base/com/oracle/main/module.xml
<module xmlns="urn:jboss:module:1.1" name="com.oracle">
<resources>
<resource-root path="ojdbc11.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
<module name="sun.jdk"/>
</dependencies>
</module>
不知道为什么没有描述这个依赖 之后我能够成功连接
/opt/jboss/bin/jboss-cli.sh --connect '/subsystem=datasources/data-source=KerberosDS:test-connection-in-pool'
{
"outcome" => "success",
"result" => [true]
}