Google app engine GWT应用程序引擎中的代码共享
我有一个雇员班Google app engine GWT应用程序引擎中的代码共享,google-app-engine,gwt,jdo,code-sharing,Google App Engine,Gwt,Jdo,Code Sharing,我有一个雇员班 @PersistenceCapable(identityType = IdentityType.APPLICATION) public class Employee { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Key key; @Persistent private Stri
@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-RPC,则只能靠自己。JSON在这方面很有吸引力,但需要大量的工作。这在GWT2.0中应该更好,但不会完全消失 如果您正在寻找的是在客户机和服务器中实例化实体,那么将类放在“客户机”包下就可以了 但是,如果您正试图通过RPC传递持久性实体,那么这可能无法立即实现。DataNucleus“增强”字节码,然后RPC无法序列化。Hibernate也有一个类似的问题,请看一下,它很好地解释了这个问题并提供了替代方案
我正在创建DTO来解决这个问题。这需要更多的工作,但这实际上取决于您拥有多少实体。我们可能需要更多的细节,因为您可能会遇到许多问题,但这里有一些提示:
- 只要GWT编译器和javac都能看到这个包,这个包就不重要了。我将共享代码保存在一个名为。。。“共享”。)
- 密钥在GWT中不可用,因此请使用
- JDO很棘手,但可行。更新版本的GWT(JavaAppEngine发布后)已经能够处理DataNucleus的JDO增强。如果DataNucleus是您的问题,我会确保您正在使用主干或最近的快照
- 确保在将对象发送到客户端之前分离对象
- 这就是我使用低级api的原因。我编写了一个助手类,它将实体转换为pojo并返回。这样,我就得到了实体,它被转换成我想要的POJO,然后被送到客户机。从客户端,相同的POJO返回到服务器,由我的helper类转换成一个实体,然后一个简单的“put”调用就完成了。您不需要断开/附加任何内容。。。如果您愿意,我可以共享一些代码。这解决了编译时错误,但序列化异常无法用这种方式解决。