GET EJB传输对象

时间:2011-12-02 10:43:24

标签: gwt ejb pojo

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

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

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

这就是我的项目结构:

实体+会话Bean: http://pastebin.com/anAbCqgd

GWT Servlet: http://pastebin.com/Ujjka9vT

我希望很清楚我的问题在哪里;)

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

我试过这个,我能够从客户端向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 ..