【问题标题】:What is the correct approach to using GWT with persistent objects?将 GWT 与持久对象一起使用的正确方法是什么?
【发布时间】:2010-04-04 16:29:56
【问题描述】:

我目前正在使用 GWT 通过 Google App 引擎开发一个简单的 Web 应用程序。应该指出的是,这是我第一次尝试这样的任务。

我遇到了以下问题/困境:

我有一个简单的类(getter/setter,仅此而已。为了清楚起见,我将这个类称为DataHolder),我想让它持久化。为此,我使用了JDO,这需要我添加一些注释,更具体地说,添加一个Key 字段作为主键。

问题是使用Key 类需要我导入com.google.appengine.api.datastore.Key,这在服务器端是可以的,但是我不能在客户端使用DataHolder,因为GWT 没有允许它(据我所知)。

所以我创建了一个姐妹类ClientDataHolder,它几乎相同,尽管它没有所有的JDO 注释,也没有Key 字段。

现在这确实有效,但感觉就像我做错了什么。使用这种方法需要为我希望拥有的每个实体维护两个单独的类。

所以我的问题是:有更好的方法吗?

谢谢。

【问题讨论】:

    标签: java design-patterns gwt persistence jdo


    【解决方案1】:

    您认为保留对象的两个版本是错误的想法是正确的——GWT 的整个想法是您可以在客户端共享您的服务器端对象,如果您开始分离这两个版本,那么您就是没有充分利用 GWT。

    关于解决您的问题,我只听说过关于 Objectify 的好消息,它是专为 App Engine 构建的数据存储区中的备用 API。在它的众多优点中,它也是 GWT 安全的,因此您可以在客户端和服务器之间来回传递密钥和所有内容。 Read more here.

    但是,如果您想使用 JDO/JPA,您可以将实体 ID 存储为字符串或长整数,如下所示:

    @PersistenceCapable(identityType = IdentityType.APPLICATION)  
    public class SomeDomainClass implements Serializable {  
      @PrimaryKey  
      @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)  
      @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")  
      String id;
    }
    

    阅读更多关于 here 的信息(这是我无耻地窃取该代码示例的地方)

    【讨论】:

    • 谢谢.. 字符串 id 效果很好。我想我会尝试一下 Objectify,因为它似乎正是我想要的。
    猜你喜欢
    • 2018-04-10
    • 2013-01-02
    • 1970-01-01
    • 2020-08-27
    • 2020-07-10
    • 2020-09-29
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    相关资源
    最近更新 更多