在 Java SE 17 中,遠端 EJB 呼叫可能會失敗

在 Java SE 17 中,已透過移除 -- illegal-access 旗標來增加 Java 的封裝。 除了隱藏 JDK 內部之外,這也會阻止某個模組存取未匯出之另一個模組的類型。 這可能會導致參數的 IIOP 序列化問題,以及遠端 EJB 上方法呼叫的回覆值,因為必須存取專用欄位和方法值。

由於此變更而產生的問題通常會顯示為一般 java.rmi.MarshalException

如果要修正任何問題,您需要在發生失敗的用戶端或伺服器上開啟任何必要的模組。 依預設, Liberty 會開啟數個常用模組。 如果要查看 Liberty已開啟的模組,請查看 wlp/lib/platform/java/java9.options 檔。 任何其他開放式陳述式都應該新增至 jvm.options 檔案。 例如:

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

如需這些變更的相關資訊,請參閱 JEP 403: 強烈封裝 JDK 內部