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 を使用していると仮定すると、かなりスムーズに動作するはずです。次の 2 つのことを行う必要があります。

  1. コードを「クライアント」名前空間、つまり GWT によってコンパイルされるディレクトリに配置します。このコードは引き続きサーバーで使用できます。
  2. コンパイルを押して、エラーの修正を開始します。あなたが見つける主なものは、「キー」タイプが GWT ランドでは利用できないということです。代わりに、文字列でエンコードされたキーを使用できます。関連ドキュメントの「エンコードされた文字列としてのキー」セクションを参照してください。

GWT-RPC を使用していない場合は、ご自身で行ってください。JSON はこの目的には魅力的ですが、かなりの調整が必要です。これは GWT 2.0 では改善されているはずですが、完全になくなるわけではありません。

于 2009-11-15T03:12:56.467 に答える
0

そのため、低レベルの API を使用しています。エンティティを pojo に変換して戻すヘルパー クラスを作成しました。このようにして、目的の POJO に変換されてからクライアントに送られるエンティティを取得します。クライアントから、同じ POJO がサーバーに戻り、ヘルパー クラスによってエンティティに変換され、単純な "put" 呼び出しでうまくいきます。何もデタッチ/アタッチする必要はありません...必要に応じてコードを共有できます。

于 2010-11-08T16:27:29.580 に答える
0

多くの問題が発生する可能性があるため、おそらく詳細が必要ですが、いくつかのヒントを次に示します。

  • パッケージは、GWT コンパイラーと javac の両方が認識できる限り、それほど重要ではありません。共有コードは、適切に名前が付けられたパッケージに保存されています...「共有」。:)

  • Key は GWT では使用できないため、エンコードされた文字列 Keyを使用します。

  • JDO はトリッキーですが、実行可能です。GWT の新しいバージョン (Java AppEngine がリリースされた後) は、DataNucleus の JDO 拡張機能を処理できるようになりました。DataNucleus が問題の場合に備えて、トランクまたは最近のスナップショットで作業していることを確認します。

  • オブジェクトをクライアントに送信する前に、必ずオブジェクトをデタッチしてください。

于 2009-11-18T10:40:53.090 に答える