我正在尝试使用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/模块/系统/层/基地/sun jdk/主要包含
<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]
}