GWT RPC 和持久性 Java 对象

Posted

技术标签:

【中文标题】GWT RPC 和持久性 Java 对象【英文标题】:GWT RPC and persistent Java objects 【发布时间】:2010-10-07 20:39:58 【问题描述】:

首先,

非常感谢 Craig 在下面提供的出色答案,我在搜索原始问题时发现它非常有用... 参考:GWT Simple RPC use case problem : Code included

在此解决方案的基础上,如果我按照 Craig 的建议将可持久化的对象留在 /shared 文件夹中,如何克服(看似 GWT 的限制)...并 注释 按照 GWT 教程的建议...

@PersistenceCapable
public class Employee 

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;

GWT 似乎无法在客户端处理/导入 com.google.appengine.datastore.key?

我见过一些丑陋的黑客......但没有什么优雅的。

欢迎任何建议, 谢谢

【问题讨论】:

【参考方案1】:

很遗憾,App Engine 的 Key 类(和其他类)与 GWT 兼容。这意味着您必须从数据存储中检索对象,然后将其转换为与 GWT 兼容的 POJO,以通过 GWT-RPC 发送到客户端。

我建议考虑为 App Engine 使用 objectify 框架。它不仅是一个更简单的数据存储接口,而且它使用的持久对象 GWT 兼容的,因此您可以通过 GWT-RPC 将它们发送到您的客户端。

【讨论】:

【参考方案2】:

您可以通过添加这些额外的 jar 文件在 GWT 代码中使用 Key 类:

http://www.resmarksystems.com/code/

appengine-utils-client-1.0.jar appengine-utils-server-1.0.jar

这基本上为 GWT 编译器提供了 Key 和其他 AppEngine 类的 GWT 友好版本。 (如 Text、Blob 和 User..)

使用方法:

在构建路径中的任意位置添加 appengine-utils-client-1.0.jar。 将 appengine-utils-server-1.0.jar 放到您的 WEB-INF/lib 文件夹中。

在您的 GWT 模块中添加以下内容:

<inherits name="com.resmarksystems.AppEngineDataTypes"/>

【讨论】:

嗨,resmarksystems 库处理 Key、Text、ShortBlob、Blob、Link、User、PostalAddress、PhoneNumber 和 Rating。有没有办法在同一上下文(RPC、持久性 Java 对象)中处理 com.google.appengine.api.datastore.GeoPt?【参考方案3】:

如果您不需要 Key 对象,您的密钥可以是 Long 或 String,它们很容易序列化,因此可以与标准 GWT-RPC 一起使用。

Datastore keys

【讨论】:

【参考方案4】:

我认为 Google 刚刚为这个用例发布了一个名为 requestfactory 的 GWT 库。 This is the link

【讨论】:

以上是关于GWT RPC 和持久性 Java 对象的主要内容,如果未能解决你的问题,请参考以下文章

GWT JPA - 无法反序列化响应

尝试以下发现的实现后,没有可用于“myDB”的持久性提供程序

将 JPA 与我的 GWT 应用程序一起使用的最简单方法

在 GWT 中,我们如何在 javascript 和 java 之间共享对象?

GWT - RPC 传输休眠对象问题

如何知道一个对象对于 GWT 和 IE8 中的 RPC 是不是“太大”?