EclipseLink在远程EJB调用上反序列化一个空实体对象

时间:2015-01-02 11:20:54

标签: jpa glassfish eclipselink jpa-2.1 glassfish-4.1

我正在使用包含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;
}

1 个答案:

答案 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"/>

另见: