【问题标题】:GWT EJB transferring objectsGWT EJB 传输对象
【发布时间】:2011-12-02 10:43:23
【问题描述】:

由于我的项目架构,我有一个问题。

一方面有一个带有客户端的 GWT 包,还有一个用于与 EJB 项目通信的 Servlet。另一方面,有一个带有会话 Bean 和实体的 EJB 项目,它们应该存储在数据库中并在 GWT 客户端和数据库之间发送。我怎么能意识到这一点?

如何将对象从我的会话 Bean 发送到 GWT Servlet,因为 GWT Servlet 不知道实体类。

【问题讨论】:

    标签: gwt ejb pojo


    【解决方案1】:

    您的BeanServiceImpl 可以了解您的 EJB 实体。只有 GWT 项目的 client 端不能。因此,在您的 server 包中的某处,您将有一个转换器/编组器/转换器从您的 EJB 实体 Company 切换到客户端的 CompanyDTO。它可以具有所有相同的字段,实际上,显然不是@Entity 注释。像这样:

    private CompanyDTO convert(Company ejb) {
      CompanyDTO dto = new CompanyDTO(ejb.getName());
      dto.setAddress(ejb.getAddress());
      return dto;
    }
    

    然后您的客户端 GWT 代码可以处理这些 DTO,在您需要执行事务时转换回服务器端的实体。

    【讨论】:

    • 谢谢,这行得通,但它会产生重复的代码,而且会更复杂。你测试过 RequestFactory 吗?
    • @ph09 绝对是重复代码。 RequestFactory 可能是一个替代方案,但我自己还没有用它实现任何解决方案。我已经对其进行了研究,但在我们的架构中,实施起来并不是完全简单的。
    • 我找到了解决方案:@OneToMany(cascade={CascadeType.PERSIST}, fetch = FetchType.EAGER) private Collection personen = new Vector();使用注释 FetchType.Eager 您可以将对象集合及其引用发送到客户端。
    • @ph09 很高兴你成功了!如果你觉得我的回答是正确的,你可以接受。如果没有,如果您将完整的解决方案总结为一个新的答案并接受它作为正确的答案,这将对社区有所帮助。
    【解决方案2】:

    我试过了,我能够将一个对象从客户端发送到 EJB 并将其存储在 MYSQL 数据库中: http://www.vogella.de/articles/GWT/ar01s08.html

    但是当我尝试将其发送回客户端时,我总是收到一个异常: com.google.gwt.user.client.rpc.SerializationException:类型 'org.eclipse.persistence.indirection.IndirectList' 未包含在可由此 SerializationPolicy 序列化的类型集中,或者无法加载其 Class 对象。出于安全考虑,此类型不会被序列化。: instance = {IndirectList: not instantiated}

    因此我认为你必须使用 DTO 的..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      • 2019-03-14
      • 2023-03-26
      相关资源
      最近更新 更多