2

我有一个员工类

 @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 用于应用程序引擎。现在我想在服务器和客户端之间共享这段代码。我应该把这个放在哪个包里。事实上,我已经尝试过两种方式。都没有解决。如果您已经完成了此类代码,请分享。

4

4 回答 4

1

如果您正在寻找的是在客户端和服务器中实例化您的实体,那么将类放在“客户端”包下就可以了。

但是如果你试图通过 RPC 传递你的持久实体,那可能不会开箱即用。DataNucleus “增强”字节码,然后 RPC 无法序列化。Hibernate 也有类似的问题,请看这篇文章,它很好地解释了问题并提出了替代方案。

我正在创建 DTO 来解决这个问题。这需要更多的工作,但这实际上取决于您拥有多少实体。

于 2009-11-16T11:05:42.467 回答
0

我以前做过,但只是在一个小型测试应用程序中。假设您使用的是 GWT-RPC,它应该工作得非常顺利。你必须做两件事:

  1. 将代码放在“客户端”命名空间中,即放在由 GWT 编译的目录中。您仍然可以在服务器上使用此代码。
  2. 点击编译并开始修复错误。您会发现主要的一个是“密钥”类型在 GWT 领域中不可用。您可以改用字符串编码的密钥。请参阅相关文档中的“密钥作为编码字符串”部分。

如果您不使用 GWT-RPC,则只能靠自己。JSON 对于这个目的很有吸引力,但需要大量的工作。这在 GWT 2.0 中应该会更好,但不会完全消失。

于 2009-11-15T03:12:56.467 回答
0

我们可能需要更多细节,因为您可能会遇到许多问题,但这里有一些提示:

  • 只要 GWT 编译器和 javac 都能看到这个包,它就没有那么重要了。我将共享代码保存在一个适当命名为...“共享”的包中。:)

  • Key 在 GWT 中不可用,因此请使用编码字符串 Key

  • JDO 很棘手,但可行。较新版本的 GWT(在 Java AppEngine 发布之后)已经能够处理 DataNucleus 的 JDO 增强。我会确保你正在使用主干或最近的快照,以防 DataNucleus 是你的问题。

  • 确保在将对象发送到客户端之前分离它们。

于 2009-11-18T10:40:53.090 回答
0

这就是我使用低级api的原因。我编写了一个帮助类,将实体转换为 pojo 并返回。这样,我得到的实体被转换成我想要的 POJO,然后转到客户端。从客户端,返回服务器的同一个 POJO 被我的助手类转换为实体,然后一个简单的“放置”调用就可以了。你不需要分离/附加任何东西......如果你愿意,我可以分享一些代码。

于 2010-11-08T16:27:29.580 回答