/ / EclipseLink deserializuje pusty obiekt encji na zdalnym wywołaniu EJB - jpa, glassfish, eclipselink, jpa-2.1, glassfish-4.1

EclipseLink deserializuje pusty obiekt encji na zdalnym wywołaniu EJB - jpa, glassfish, eclipselink, jpa-2.1, glassfish-4.1

Używam bieżącej wersji GlassFish 4.1 z EclipseLink w wersji 2.5.2. W tym GlassFish mam wdrożoną aplikację korporacyjną i aplikację internetową. Jeśli EJB, który zwraca załadowany obiekt, jest wywoływany spoza GlassFish (jak zewnętrzna aplikacja JavaFX), obiekt jest zwracany poprawnie.

Ale jeśli ten sam EJB zostanie wywołany z aplikacji internetowej, obiekt nie zostanie poprawnie zwrócony z powodu tego błędu GLASSFISH-17432.

Obejście, które już znalazłem tutaj Wywoływanie zdalnego EJB w EJB 3.1 tak naprawdę nie rozwiązuje tego problemu, ponieważ jeśli wyłączę tkanie w EclipseLink, poniższe nie będą działać poprawnie:

@ManyToOne(fetch=FetchType.LAZY)
public Foo getFoo() {
return foo;
}

@ManyToOne(fetch=FetchType.EAGER)
public Bar getBar() {
return bar;
}

Odpowiedzi:

0 dla odpowiedzi № 1

Możesz spróbować tkactwo statyczne jako kolejne obejście.

Tkanie kodu bajtowego jest techniką zmianykod bajtowy skompilowane klasy Java. Możesz skonfigurować tkanie kodu bajtowego, aby włączyć a liczba optymalizacji wydajności JPA EclipseLink, w tym wsparcie dla leniwego ładowania relacji jeden-do-jednego i wiele-do-jednego śledzenie zmian na poziomie atrybutów i grupy pobierania.

Tkanie może być wykonywane dynamicznie, gdy klasy jednostek są załadowany lub statycznie jako część procesu budowania.

(Źródło)

Jak zasugerowano w GLASSFISH-16164 możesz spróbować eclipselink-staticweave-maven-plugin. Szczegółowe wyjaśnienie dotyczące tkania statycznego i użycia wtyczki (alternatywnie można użyć mrówki) można znaleźć w Wiki EclipseLink.

Następnie musisz ustawić tę właściwość w swoim persistence.xml:

<property name="eclipselink.weaving" value="static"/>

Zobacz też: