【发布时间】:2011-12-02 10:43:23
【问题描述】:
由于我的项目架构,我有一个问题。
一方面有一个带有客户端的 GWT 包,还有一个用于与 EJB 项目通信的 Servlet。另一方面,有一个带有会话 Bean 和实体的 EJB 项目,它们应该存储在数据库中并在 GWT 客户端和数据库之间发送。我怎么能意识到这一点?
如何将对象从我的会话 Bean 发送到 GWT Servlet,因为 GWT Servlet 不知道实体类。
【问题讨论】:
由于我的项目架构,我有一个问题。
一方面有一个带有客户端的 GWT 包,还有一个用于与 EJB 项目通信的 Servlet。另一方面,有一个带有会话 Bean 和实体的 EJB 项目,它们应该存储在数据库中并在 GWT 客户端和数据库之间发送。我怎么能意识到这一点?
如何将对象从我的会话 Bean 发送到 GWT Servlet,因为 GWT Servlet 不知道实体类。
【问题讨论】:
您的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,在您需要执行事务时转换回服务器端的实体。
【讨论】:
我试过了,我能够将一个对象从客户端发送到 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 的..
【讨论】: