Edit12.01.2024:
代码块
DB2SimpleDataSource dataSource = new DB2SimpleDataSource();
dataSource.setDriverType(4);
dataSource.setServerName("server");
dataSource.setPortNumber(portnumber);
dataSource.setDatabaseName("database name");
dataSource.setSslConnection(true);
dataSource.setClientProgramName("program name");
dataSource.setRetrieveMessagesFromServerOnGetMessage(true);
dataSource.setSecurityMechanism(dataSource.KERBEROS_SECURITY);
eRROR消息
com.ibm.db2.jcc.am.SqlException: [jcc][t4][10262][11223][4.19.49] Unexpected Throwable caught: class com.ibm.db2.jcc.am.le (in unnamed module @0x49097b5d) cannot access class sun.security.action.GetPropertyAction (in module java.base) because module java.base does not export sun.security.action to unnamed module @0x49097b5d. ERRORCODE=-4228, SQLSTATE=null
at com.ibm.db2.jcc.am.kd.a(Unknown Source)
at com.ibm.db2.jcc.am.kd.a(Unknown Source)
at com.ibm.db2.jcc.am.kd.a(Unknown Source)
at com.ibm.db2.jcc.t4.b.b(Unknown Source)
at com.ibm.db2.jcc.t4.b.a(Unknown Source)
at com.ibm.db2.jcc.t4.b.a(Unknown Source)
at com.ibm.db2.jcc.t4.b.a(Unknown Source)
at com.ibm.db2.jcc.t4.b.<init>(Unknown Source)
at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(Unknown Source)
at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(Unknown Source)
at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(Unknown Source)
at test.connection.TestDbConnectionDataSource.main(TestDbConnectionDataSource.java:81)
Caused by: java.lang.IllegalAccessError: class com.ibm.db2.jcc.am.le (in unnamed module @0x49097b5d) cannot access class sun.security.action.GetPropertyAction (in module java.base) because module java.base does not export sun.security.action to unnamed module @0x49097b5d
at com.ibm.db2.jcc.am.le.a(Unknown Source)
at com.ibm.db2.jcc.am.le.a(Unknown Source)
at com.ibm.db2.jcc.t4.b.a(Unknown Source)
IBM文档阅读
dataSource.setKerberosServerPrincipal("sample/[email protected]");
我必须用我的kerberos.conf文件替换@srvlsj.sj.ibm.com。但是,如果我使用许多
realm?
,该怎么办
PS1.我使用了System.setProperty("java.security.krb5.conf", "path\krb5.conf");
。
PS2.上述错误,如果我在VM参数中使用此错误,则可以解决该错误:--add-exports java.base/sun.security.action=ALL-UNNAMED
。但是,我想在VM参数中仍然没有工作。
当寻求DB2帮助时,请始终说明您的DB2服务器版本+FixPack和DB2-Server平台,因为答案的每个平台可能会有所不同,有时也会有时每个版本。 to以您仔细研究IBM文档页面Herey
,该页面显示了与JDBC 4型驱动程序的Kerberos样品片段。您已经在使用(db2jcc4.jar)。您选择是使用drivermanager界面还是com.ibm.db2.jcc.db2simpledatasource接口。 有助于自我教育自己的kerberos/jdbc的要求,这些要求记录了
Here。 这些假定您的DB2服务器已经正确配置为支持Kerberos身份验证。 IT有助于证明它是通过首先使用不同的JDBC产品进行测试,该产品支持使用db2使用Kerberos身份验证。 一个这样的工具就是IBM数据工作室,尽管您需要使用最新的数据研究版本,并且还需要安装数据模型的最新修复程序(FIXPACK)。 Data-studio支持Kerberos无密码的身份验证,这是一个大型的Java/JDBC应用程序。 JDBC的其他一些前端工具要么不支持DB2-LUW的Kerberos身份验证,要么部分支持它。
作者通过评论的问题有一个解决方案,对我来说,使用Java>1.8--add-opens=java.base/sun.security.action=ALL-UNNAMED
如果您使用Java> 1.8。 指出您的DB2 JDBC驱动程序(JCC)正在尝试访问Interion Java类(Sun.Security.Action.getPropertyaction),这些类并未由Java的模块系统导出(Java 9中引入)。
当在Java 11+上运行DB2 JCC驱动程序而不是Java 8时,这个问题通常发生。
如果您想使用Java> 1.8,则必须通过传递上述其他VM参数来使用解决方法。否则,您将切换回Java 1.8,而您无需添加上述VM参数。