2

ConfigProperty.idPropertyMapサーバー側で埋められます。(ログ出力で確認)
クライアント側でアクセスすると、空であることが示されます。:-((ログ出力で確認)

これはデフォルトの動作ですか?(私はそうは思いません)問題はおそらく内部クラスConfigProperty.IdPropertyMapjava.util.HashMap使用法、シリアル化、またはいくつかのフィールドアクセス修飾子の問題に関連していますか?

ご協力いただきありがとうございます

    //転送オブジェクト

    パブリッククラスConfigPropertyは、IsSerializable、Comparable{を実装します

        ..。

    static publicclassIdPropertyMapはHashMapを拡張します
             IsSerializableを実装します
        {{
           ..。
        }

    保護された静的IdPropertyMapidPropertyMap= new IdPropertyMap();

        ..。
    }


    //サーバーサービス

    パブリッククラスManagerServiceImplはRemoteServiceServlet実装を拡張します
        ManagerService
    {{
        ..。

        public IdPropertyMap getConfigProps(String timeToken)
            ConfiguratorExceptionをスローします
        {{
            ..。
        }
    }

いくつかの良い答えの後に下から追加されました(ありがとう!):

結論:静的フィールド同期は現在実装/サポートされていません。誰か/私は機能リクエストを提出する必要があります

ちょうど私の視点(GWTに恋に落ちた初心者:-)):

私はかなりよく理解しています(完璧ではありません!;-))「グローバル」変数同期の考えられる影響(依存関係グラフまたは注釈の使用が役立つ可能性があります)。しかし、新しい(そうでなければ経験豊富なJava EE / web)ユーザーからは、次のようになります。

  • いくつかのクラスを作成しますmyapp.shared.dto.MyClass(dto =データ転送オブジェクト)

  • それらのオブジェクト(およびおそらく他のいくつかのDTO)のコレクションを表す静的フィールドをいくつか追加します

  • クライアント側でもこれを行うことができ、他のすべての静的メソッドも同様に機能します

  • 動作しないのは同期だけです(そもそもそれほど悪くはありません)

しかし、いくつかの提供された注釈は、@Transfer static Collection<MyClass> myObjList;これがもたらす影響と利点を知っているように見えるので、便利だとしましょう。

私の場合、クライアントはより静的であるため、かなり単純ですが、GWTフレームワークで実行できる場合は、明示的に実装せずにこのデータを取得したいと考えています。

4

2 に答える 2

3

静的変数は純粋にクラス変数です。個々のインスタンスとは何の関係もありません。シリアル化はオブジェクトにのみ適用されます。

したがって、ConfigProperty.idPropertyMapは常に空になります

于 2012-12-19T13:45:24.853 に答える
3

RPCの考え方は、クライアントとサーバーがまったく同じJVMであるかのように動作できるということではなく、ネットワークを介して渡すオブジェクトを共有できるということです。サーバーからクライアントにネットワーク経由で静的フィールドを送信するには、そのフィールドに格納されているオブジェクトをRPCメソッドから返す必要があります。

静的プロパティは、単一のオブジェクトではなくクラス自体に属しているため、シリアル化されず、ネットワーク経由で送信されません。

public class MyData implements Serializable {
    protected String name;//sent over the wire, each MyData has its own name
    protected String key;

    protected static String masterKey;//All objects on the server or client 
    // share this, it cannot be sent over RPC. Instead, another RPC method
    // could access it
}

ただし、共有されるのは1つのインスタンスのみであることに注意してください。サーバー上の他の何かがそのフィールドを変更した場合、コピーを要求したすべてのクライアントを更新する必要があります。

于 2012-12-19T13:49:16.107 に答える