我有一个员工类
@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用于app引擎。现在我想在服务器和客户端之间共享此代码。我应该保留哪个包。事实上我已经尝试过两种方式。都没有成功。如果您已经完成此类代码,请分享。
答案 0 :(得分:1)
如果您要查找的是在客户端和服务器中实例化您的实体,那么将这些类放在“client”包下就可以了。
但是如果你试图通过RPC传递你的持久化实体,那可能不会开箱即用。 DataNucleus“enhaces”字节码,然后RPC无法序列化。 Hibernate有类似的问题,请看一下this article,它很好地解释了问题并提出了替代方案。
我正在创建DTO来解决此问题。这是一个更多的工作,但它实际上取决于你有多少实体。
答案 1 :(得分:0)
我以前做过这个,但只是在一个小测试应用程序中。假设您正在使用GWT-RPC,它应该可以非常顺利地运行。你必须做两件事:
如果您没有使用GWT-RPC,那么您就是自己的。 JSON对于此目的很有吸引力,但需要大量的工作。这应该在GWT 2.0中更好,但不会完全消失。
答案 2 :(得分:0)
我们可能需要更多细节,因为您可能会遇到许多问题,但这里有一些提示:
只要GWT编译器和javac都可以看到它,包就无所谓了。我将共享代码保存在一个名为“shared”的软件包中。 :)
密钥在GWT中不可用,因此请使用encoded string Key。
JDO很棘手,但可行。较新版本的GWT(在Java AppEngine发布之后)已经能够处理DataNucleus的JDO增强。我确保你正在使用主干或最近的快照,以防DataNucleus成为你的问题。
确保在将对象发送给客户端之前将其分离。
答案 3 :(得分:0)
这就是我使用低级API的原因。我编写了一个帮助类,将实体转换为pojo并返回。这样,我得到的实体被转换成我想要的POJO然后转到客户端。从客户端,同样的POJO返回到服务器,由我的帮助程序类转换为实体,然后一个简单的“put”调用就可以了。你不需要拆卸/附加任何东西......如果你愿意,我可以分享一些代码。