Java SE 17 上的远程 EJB 调用可能会失败

在 Java SE 17 中,已通过移除 --illegal-access 标志增大了 Java 封装。除了隐藏 JDK 内部项外,这还会阻止一个模块访问其他未导出的模块类型。由于必须访问专用字段和方法值,这会导致远程 EJB 方法调用的参数和返回值出现 IIOP 序列化问题。

由于此更改而引起的问题通常会显示为一般 java.rmi.MarshalException

要解决问题,您需要在发生故障的客户机或服务器上打开任何必需的模块。缺省情况下,Liberty 会打开几个常用模块。要查看 Liberty 已打开的模块,请查看 wlp/lib/platform/java/java9.options 文件。所有其他打开语句都应添加到 jvm.options 文件中。例如:

--add-opens
java.base/java.lang=ALL-UNNAMED

有关这些更改的更多信息,请参阅 JEP 403: Strongly Encapsulate JDK Internals