由于我的项目架构,我有一个问题。
一方面,有一个带有客户端的GWT包,还有一个与EJB项目通信的Servlet。另一方面,有一个带有会话Bean和实体的EJB项目,它应该存储在数据库中并在GWT客户端和数据库之间发送。但我不知道我怎么能意识到这一点。
如何将会话Bean中的对象发送到GWT Servlet,因为GWT Servlet不知道实体类。
这就是我的项目结构:
实体+会话Bean: http://pastebin.com/anAbCqgd
GWT Servlet: http://pastebin.com/Ujjka9vT
我希望很清楚我的问题在哪里;)
答案 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 ..