Удаленные вызовы EJB могут не работать в Java SE 17

В Java SE 17 качество инкапсуляции в Java было улучшено за счет удаления флага --illegal-access. Помимо скрытия внутренних механизмов JDK, это также не позволяет обращаться из одного модуля к неэкспортированным типам другого модуля. Это изменение может вызвать проблемы при сериализации IIOP для параметров и возвращаемых значений в вызовах методов из удаленных EJB, поскольку означало бы доступ к полям и значениям, объявленным как private.

Проблемы, связанные с этим изменением, обычно проявляются как стандартная ошибка java.rmi.MarshalException.

Для исправления ошибки следует открыть требуемые модули на клиенте или сервере, на котором произошла эта ошибка. По умолчанию Liberty открывает несколько распространенных модулей. Увидеть модули, уже открытые Liberty, можно в файле wlp/lib/platform/java/java9.options. Дополнительные операторы открытия следует добавлять в файл jvm.options. Например:

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

Дополнительная информация об этих изменениях приведена в разделе JEP 403: Полностью инкапсулирует внутренние модули JDK.