我想开发一个web应用程序需要使用GWT和GAE数据持久化。据我所知,我惟一(或者至少是到目前为止最方便的)数据持久化选择是GAE的数据存储,它使用JDO或JPA注释对象。我还希望能够使用GWT远程过程调用(RPC)来回发送我的对象,因此我的对象必须能够“分离”。然而,GWT RPC序列化不能处理分离的JDO/JPA对象,而且在不久的将来看起来也不会。
我的问题是:对此最简单和最直接的解决方案是什么?能够与服务器端持久化共享相同的对象客户端/服务器将非常方便。
编辑
我应该澄清的是,我仍然希望将GWT RPC与GAE的数据存储一起使用。我只是在寻找最好的解决方案,让所有这些技术一起工作。
发布于 2009-05-09 09:10:54
发布于 2009-05-14 02:02:55
雷·克伦威尔有一台temporary hack up。我试过了,它起作用了。
它强制您使用瞬态而不是可分离的实体,因为GWT不能序列化DataNucleus使用的隐藏Object[];这意味着您发送到客户端的对象不能插入回数据存储中,您必须检索实际的数据存储对象,并将所有持久字段复制回其中。Ray的方法使用反射遍历这些方法,检索getBean()和setBean()方法,并将实体setBean()与临时gwt对象的getBean()一起应用。
您应该努力使用JDO,JPA目前只是一个包装器类。要使用这种技巧,您必须对每个持久字段同时使用getter和setter方法,并对每个"bean“字段使用适当的getBean和setBean语法。好吧,这几乎是正确的,因为它假设所有的getter都以"get“开头,而默认的布尔值字段使用的是" is”。
我已经修复了这个问题,并在Ray的博客上发表了一条评论,但它正在等待批准,我不确定他是否会发表评论。基本上,我在org.datanucleus包中实现了@GetterPrefix(prefix=MethodPrefix.IS)注释来增强他的工作。
如果它没有发布,这是一个问题,请发送电子邮件给JDO Re:@GetterPrefix for x_AT_aiyx_DOT_info,我会将修复程序发送给您。
发布于 2010-03-07 18:57:29
我最近发现了Objectify,它被设计成JDO的替代品。使用它的经验还不多,但它比JDO更容易使用,似乎更轻量级,并声称可以通过GWT绕过对DTO的需求,尽管我还没有尝试过那个特定的特性。
https://stackoverflow.com/questions/749522
复制相似问题