gwtejb传输对象

gwtejb传输对象,gwt,ejb,pojo,Gwt,Ejb,Pojo,我有一个问题,因为我的项目架构 一方面,有一个GWT包和客户端,还有一个与EJB项目通信的Servlet。另一方面,有一个带有会话bean和实体的EJB项目,这些会话bean和实体应该存储在数据库中,并在GWT客户机和数据库之间发送。我怎么能意识到这一点 因为GWT Servlet不知道实体类,所以如何将对象从会话Bean发送到GWT Servlet。您的BeanServiceImpl可以知道您的EJB实体。只有GWT项目的客户端不能。因此,在服务器包的某个地方,您将有一个转换器/封送器/转换器

我有一个问题,因为我的项目架构

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


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

您的
BeanServiceImpl
可以知道您的EJB实体。只有GWT项目的客户端不能。因此,在
服务器
包的某个地方,您将有一个转换器/封送器/转换器,用于从EJB实体
公司
切换到客户端的
公司。它可以有所有相同的字段,实际上,只是显然不是
@Entity
注释。像这样:

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

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

我尝试了这一点,我能够将对象从客户端发送到EJB,并将其存储在MYSQL数据库中:

但当我试图将其发送回客户机时,我总是会遇到一个异常: com.google.gwt.user.client.rpc.SerializationException:类型“org.eclipse.persistence.indirection.IndirectList”未包含在可由此序列化策略序列化的类型集中,或者无法加载其类对象。出于安全目的,不会序列化此类型。:instance={IndirectList:not instanced}


因此,我认为您必须使用DTO的…

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