我想开发一个需要使用GWT和GAE进行数据持久化的Web应用程序.据我了解,我唯一(或至少是最方便的)数据持久性选项是GAE的数据存储区,使用JDO或JPA注释对象.我还希望能够使用GWT远程过程调用(RPC)来回发送我的对象客户端 - 服务器,因此我的对象必须能够"分离".但是,GWT RPC序列化无法处理分离的JDO/JPA对象,并且它似乎不会在不久的将来出现.
我的问题:对此最简单,最直接的解决方案是什么?能够与服务器端持久性共享相同的客户端/服务器对象将非常方便.
编辑
我应该澄清一点,我仍然希望将GWT RPC与GAE的数据存储区一起使用.我只是在寻找能够让所有这些技术协同工作的最佳解决方案.
尝试使用http://gilead.sourceforge.net/
Ray Cromwell 暂时破产.我试过了,它确实有效.
它强制您使用Transient而不是Detachable实体,因为GWT无法序列化DataNucleus使用的隐藏Object []; 这意味着您发送到客户端的对象无法插回到数据存储区中,您必须检索实际的数据存储区对象,并将所有持久字段复制回其中.Ray的方法使用反射来迭代方法,检索getBean()和setBean()方法,并将实体setBean()应用于transient gwt对象的getBean().
您应该努力使用JDO,JPA现在不仅仅是一个包装类.要使用此hack,必须为每个持久字段使用getter和setter方法,对每个"bean"字段使用PROPER getBean和setBean语法.好吧,ALMOST PROPER,因为它假设所有的getter都以"get"开头,当默认的布尔字段使用是"is"时.
我已经解决了这个问题,并在Ray的博客上发表评论,但它正在等待批准,我不确定他是否会发布它.基本上,我在org.datanucleus包中实现了@GetterPrefix(prefix = MethodPrefix.IS)注释来增强他的工作.
如果它没有发布,这是一个问题,请发送电子邮件x_AT_aiyx_DOT_info Re:@GetterPrefix for JDO,我将向您发送修复程序.
我最近发现了Objectify,它旨在替代JDO.它没有多少经验,但它比JDO使用起来更简单,看起来更轻巧,并声称可以通过GWT解决DTO的需求,尽管我还没有尝试过那个特定的功能.