Les appels EJB peuvent échouer sur Java SE 17

Dans Java SE 17, l'encapsulation de Java a été augmentée via la suppression de l'indicateur --illegal-access. En plus de masquer les internes JDK, cela empêche également un module d'accéder aux types qui ne sont pas exportés d'un autre module. Cela peut entraîner des problèmes avec la sérialisation IIOP pour les paramètres et les valeurs de retour pour les appels de méthode sur les EJB distants, car les valeurs de zone et de méthode privées doivent être accessibles.

Les problèmes dus à cette modification apparaissent généralement sous la forme d'une exception générique java.rmi.MarshalException.

Pour résoudre les problèmes, vous devez ouvrir les modules requis sur le client ou le serveur sur lequel l'incident se produit. Par défaut, Liberty ouvre plusieurs modules couramment utilisés. Pour afficher les modules déjà ouverts par Liberty, consultez le fichier wlp/lib/platform/java/java9.options. Toutes les instructions ouvertes supplémentaires doivent être ajoutées au fichier jvm.options. Par exemple :

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

Pour plus d'informations sur ces modifications, voir JEP 403: Encapsule fortement les éléments internes du JDK.