代码共享
我有一个Employee类代码共享
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Employee {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private String firstName;
@Persistent
private String lastName;
@Persistent
private Date hireDate;
public Employee(String firstName, String lastName, Date hireDate) {
this.firstName = firstName;
this.lastName = lastName;
this.hireDate = hireDate;
}
// Accessors for the fields. JDO doesn't use these, but your application does.
public Key getKey() {
return key;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Date getHireDate() {
return hireDate;
}
public void setHireDate(Date hireDate) {
this.hireDate = hireDate;
}
}
我已经使用了JDO的应用程序引擎。现在我想在服务器和客户端之间共享这段代码。我应该保留哪些包。其实我已经尝试过两种方式。都没有解决。如果您已经完成了这种类型的代码,请分享。
我以前做过这个,但只是在一个小测试应用程序。假设你使用GWT-RPC,它应该工作得很顺利。你必须做两件事:
- 把代码放在'客户'命名空间,即在一个由GWT编译的目录。您仍然可以在服务器上使用此代码。
- 点击编译并开始修复错误。你会发现主要的是'钥匙'类型不可用于GWT的土地。您可以改为使用字符串编码密钥。请参阅relevant documentation中的“键为编码字符串”部分。
如果您不使用GWT-RPC,那么您就是您自己的。 JSON对此目的很有吸引力,但需要大量的工作。在GWT 2.0中这应该会更好,但不会完全消失。
如果你正在寻找的是在客户端和服务器实例化你的实体,将这些类放在“客户端”包下就可以了。
但是,如果你想通过RPC传递你的持久化实体,那可能不会开箱即用。 DataNucleus“使用”字节码,并且RPC无法序列化。休眠有类似的问题,请看看this article,它很好地解释了这个问题,并提出了替代方案。
我正在创建DTO来解决此问题。这是一个更多的工作,但它取决于你有多少实体。
非常感谢您的链接。我不知道,为什么我没有得到它在谷歌搜索.. – iftee 2009-11-19 20:40:27
我们可能需要更多的细节,因为你可能会被击中了一些问题,但这里的一些提示:
包不那么重要了,只要GWT编译器和javac既可以看见。我将共享代码保存在一个名为“共享”的软件包中。 :)
密码在GWT中不可用,所以请使用encoded string Key。
JDO很棘手,但可行。 GWT的新版本(Java AppEngine发布后)已经能够处理DataNucleus的JDO增强。如果DataNucleus是您的问题,我会确保您正在使用干线或最近的快照。
确保在将对象发送给客户端之前分离您的对象。
这就是为什么我使用低级别的API。我写了一个帮助类,将实体转换为pojo并返回。通过这种方式,我得到了转换成我想要的POJO然后去客户端的实体。从客户端,同一个POJO返回服务器被我的helper类转换成一个实体,然后一个简单的“put”调用就完成了。你不需要解开/附加任何东西......如果你愿意,我可以分享一些代码。
这解决了编译时的错误,但是 但是SerializationException不能这样解决。 – iftee 2009-11-19 20:42:37
什么SerializationException? – 2009-11-20 01:58:51