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 № 1Moż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ż:
- Jak włączyć tkanie w EclipseLink?
- Java-EE6: FetchType.LAZY ze statycznym tkaniem zgłasza dziwny wyjątek
- Leniwe ładowanie nie działa w ManyToOne w eclipselink
- Dlaczego nie działa FetchType.LAZY w JPA?