【问题标题】:EclipseLink deserializes an empty entity object on remote EJB callEclipseLink 反序列化远程 EJB 调用上的空实体对象
【发布时间】:2015-01-02 11:20:54
【问题描述】:

我正在使用当前版本的 GlassFish 4.1,其中包含 EclipseLink 版本 2.5.2。 在这个 GlassFish 中,我部署了一个企业应用程序和一个 Web 应用程序。 如果从 GlassFish 外部(如外部 JavaFX 应用程序)调用返回已加载实体的 EJB,则会正确返回实体。

但是如果从 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;
}

【问题讨论】:

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


    【解决方案1】:

    您可以尝试static weaving 作为另一种解决方法。

    字节码编织是一种改变字节码的技术 编译的 Java 类。您可以配置字节码编织以启用 EclipseLink JPA 性能优化的数量,包括支持 对于一对一和多对一关系的延迟加载, 属性级更改跟踪和获取组。

    编织可以在实体类存在时动态执行 加载,或作为构建过程的一部分静态加载。

    (Source)

    按照GLASSFISH-16164 中的建议,您可以尝试eclipselink-staticweave-maven-plugin。关于静态编织和插件的使用(或者你可以使用ant)的详细解释可以在EclipseLink Wiki找到。

    然后您必须在 persistence.xml 中设置此属性:

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

    另请参阅:

    【讨论】:

    • 感谢您的快速答复。我通过使用 ant 任务尝试了静态编织。但是返回的实体仍然是空的。我认为使用 ant 或 maven 进行静态编织应该没有区别,因为两者都使用相同的 eclipselink 二进制文件。难道问题在于 glassfish 序列化/反序列化和 eclipselink 字节码增强实体的组合?
    猜你喜欢
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 2011-09-26
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多