Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine GWT应用程序引擎中的代码共享_Google App Engine_Gwt_Jdo_Code Sharing - Fatal编程技术网

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编译的目录中。您仍然可以在服务器上使用此代码
  • 点击编译并开始修复错误。您将发现的主要问题是“Key”类型在GWT land中不可用。您可以改为使用字符串编码的密钥。请参阅中的“密钥作为编码字符串”部分

  • 如果您没有使用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”调用就完成了。您不需要断开/附加任何内容。。。如果您愿意,我可以共享一些代码。

        这解决了编译时错误,但序列化异常无法用这种方式解决。