我正在使用包含EclipseLink版本2.5.2的当前版本的GlassFish 4.1。 在这个GlassFish中,我部署了一个企业应用程序和一个Web应用程序。 如果从GlassFish外部调用返回已加载实体的EJB(如外部JavaFX应用程序),则会正确返回该实体。
但是如果从Web应用程序调用相同的EJB,则由于此错误GLASSFISH-17432而无法正确返回实体。
我在这里找到的解决方法Calling Remote EJB in EJB 3.1并没有真正解决这个问题,因为如果我在EclipseLink中禁用编织,则以下内容不能正常工作:
@ManyToOne(fetch=FetchType.LAZY)
public Foo getFoo() {
return foo;
}
@ManyToOne(fetch=FetchType.EAGER)
public Bar getBar() {
return bar;
}
答案 0 :(得分:0)
您可以尝试static weaving作为另一种解决方法。
字节码编织是一种改变字节码的技术 编译的Java类。您可以配置字节码编织以启用a EclipseLink JPA性能优化的数量,包括支持 对于一对一和多对一关系的延迟加载, 属性级别更改跟踪和获取组。
编织可以在实体类时动态执行 加载,或静态作为构建过程的一部分。
(Source)
根据GLASSFISH-16164的建议,您可以尝试eclipselink-staticweave-maven-plugin。有关静态编织和插件使用的详细说明(可选择使用ant)可以在EclipseLink Wiki中找到。
然后,您必须在persistence.xml
:
<property name="eclipselink.weaving" value="static"/>
另见: