Apelurile EJB la distanţă pot eşua pe Java SE 17

În Java SE 17, încapsularea Java a fost mărită prin înlăturarea stegulețului --illegal-access. În plus față de ascunderea internilor JDK, acest lucru oprește, de asemenea accesul unui modul la tipurile care nu sunt exportate ale altui modul. Acest lucru poate cauza probleme cu serializarea IIOP pentru parametrii și valorile de returnare pentru apelurile de metodă pe EJB-uri la distanță, deoarece trebuie accesate valori de metodă și de câmp privat.

Problemele datorate acestei modificări vor apărea în general ca o excepție generică java.rmi.MarshalException.

Pentru a rezolva oricare problemă, va trebui să deschideți orice modul necesar pe clientul sau pe serverul unde apare eșecul. În mod implicit, Liberty deschide mai multe module utilizate în mod obișnuit. Pentru a vedea modulele deja deschise de Liberty, căutați în fișierul wlp/lib/platform/java/java9.options. Orice instrucțiuni suplimentare de deschidere trebuie adăugate în fișierul jvm.options. De exemplu:

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

Pentru mai multe informaţii despre aceste modificări, vedeţi JEP 403: Strogly Encapsulate JDK Internals.