GWT の RequestFactory を使用して、エンティティのサーバー側の変更をクライアントに伝達する方法についてアドバイスが必要です。
PersonProxy と PersonListProxy (List の getter を持つ) の 2 つの EntityProxy があるとします。クライアントがサーバーから PersonList と Person を取得したとします。
クライアントがこれらのプロキシのいずれかを編集してリクエストを発行している場合、RequestFactory の機構は (原則を正しく理解していれば) サーバー コードによって行われた変更を検出すると (クライアントが表示を更新できるように) EntityProxyChange イベントを発行します。たとえば、エンティティの)。
ここで、サーバーがこのクライアントによる要求の外部で (たとえば、別のクライアントがサーバーを呼び出したため) エンティティを変更していると仮定します。これにより、このクライアントは、Person または PersonList を再度取得した場合に別のバージョンを参照できるようになります。
私の質問は、RequestFactory フレームワーク内でクライアントに変更を伝える (そして可能な限り多くの機構を再利用する) ための最良の方法は何ですか? サーバーからクライアントに単純なメッセージを送信する方法があると仮定できます (たとえば、Google App Engine のチャネル API またはサーバー送信イベント)。
1 つの考えとして、サーバーがこのチャネルを介して、特定の ID を持つ Person または PersonList が変更されたことを伝えるメッセージを送信することが考えられます。これらのメッセージの受信を処理するクライアント コードは、RequestFactory を使用してエンティティを再取得 (検索など) できます。この変更は、EntityProxyChange イベントによってクライアントの他の部分に伝達される必要があります。
これは行く方法ですか?(また、クライアントがエンティティの現在のバージョンを既に持っている場合、たとえば、サーバーが機能せず、クライアント自体が行った変更をクライアントに通知した場合、トリガーされた再フェッチはメタデータ全体ではなく、数ビットのみを転送します。また実体?)
追加した:
もう少し考えてみると、サーバー送信イベント チャネルに対して EntityProxyId をどのように生成できるのだろうか。サーバー上のエンティティが変更されると、サーバーにはサーバー ID しかありません。もちろん、それをクライアントに送信できますが、クライアントは EntityProxyId しか知りません。もちろん、(getStableId() に加えて) getId() を各 EntityProxy に追加することもできますが、これはすべてのサーバー応答に冗長データを追加するように見えます。