Vzdálená volání EJB se mohou nezdařil v prostředí Java SE 17

V prostředí Java SE 17 bylo zapouzdření prostředí Java zvýšeno pomocí odebrání příznaku -- illegal-access. Kromě skrytí interních částí JDK to také zabrání jednomu modulu v přístupu k typům jiného modulu, které nejsou exportovány. To může způsobit problémy se serializací IIOP pro parametry a návratové hodnoty pro volání metody ve vzdálených objektech EJB, protože je nutné přistupovat k soukromým hodnotám polí a metod.

Problémy způsobené touto změnou se obvykle zobrazí jako generická výjimka java.rmi.MarshalException.

Chcete-li opravit všechny problémy, budete muset otevřít všechny nezbytné moduly na klientovi nebo na serveru, kde k selhání dojde. Standardně server Liberty otevře několik běžně používaných modulů. Chcete-li zobrazit moduly, které jsou již otevřeny serverem Liberty, podívejte se do souboru wlp/lib/platform/java/java9.options. Všechny další otevřené příkazy by měly být přidány do souboru jvm.options. Například:

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

Další informace o těchto změnách najdete v tématu JEP 403: Vnitřně Encapsulate JDK Internals.