2012-01-20 4 views
10

GWT RPCを使用してオブジェクトを更新すると、簡単に取り消すことができます。以前のエンティティ状態をメモリにクローンして元に戻すときにそれを適用する必要があります。RequestFactoryの更新を取り消す方法

しかし、RequestFactoryを使用するときは、具体的な更新操作はありません。 RequestFactoryはエンティティの変更をサーバに送信し、リポジトリエンティティ自体を更新します。更新プロセスを傍受することはできません。

RequestFactoryで行われた更新に対してUndoを実装する方法を教えてください。

+0

InstanceRequestを使用しているのか、RFで永続性を呼び出すためにリクエストしていますか? – Andrejs

答えて

0

要求を発行するまで、Request Factoryはサーバーエンティティを更新しません。したがって、サーバー上の変更を防ぐためにfire()を呼び出すことを避けることができます。これがあなたが意味していたことを願っています。エンティティを更新する方法をデモストレーションするコードと、元に戻す操作を実行する場所を投稿できますか?

+0

「元に戻す」は、サーバー上の変更がすでに完了したことを意味します。将来の取り消しのために、エンティティの状態を保存するためにサーバの更新操作を傍受する必要があります。 –

0

これを行うかどうかわかりません。そのためには、クラスの変更を元に戻したり、連絡先としたり、同じタイプのフィールドを追加したり、以前の状態のようなものを追加したいとします(永続性を邪魔したくない場合は一時的にします)。

class Contact { 

    Integer id; 
    Integer version; 

    String name; 
    String phoneNumber; 

    //Transient 
    Contact previousState; 

} 

あなたの永続的な呼び出しで、現在のデータをpreviousStateにバックアップしてから、現在のContactエンティティを永続化します。アンドゥでは、previousStateから "this"にデータをコピーします。

元に戻すことはサーバー上では意味をなさないので、クライアントでそのようなことを管理する必要があります。私は、サーバー上で取り消し機能が必要とされるシナリオに遭遇していません。だからシナリオとこれを達成したいコードを引用してください。

+0

クライアントでのみアンドゥを実行するには、すべてのアプリケーションの状態をクライアント上に保持する必要があります。あなたはそれがGWTアプリで可能だと思いますか? –

+0

これは間違いありませんが、アプリケーション全体の状態は必要ありませんが、AddressBookアプリケーションのContactエンティティのようなエンティティは、「元に戻す」ことに興味がありますか? –

+0

いいえ、あなたは間違っています。たとえば連絡先の順序付きリストを考えてみましょう。 –

1

サーバー側のデータ構造とテーブルを変更する必要があります。そこに時間的モデルまたはビットモパーシャルモデルを組み込む。メモリ内のエンティティの「古い」状態を保持しようとする、またはそれらを傍受しようとするのはやめてください。エンティティの以前の状態を時間フィールドにそのまま保持する。元に戻すとは、以前のバージョンをタイムスタンプで探し、それを最新のものにすることを意味します。これは複数のエンティティタイプで同時に実行できます。

  • 1:00ピザAは
  • 1:01ピザのA成分が
  • 1:02ピザのA成分は、1:01

た場合に元に戻す

  • 1時03分に変更変更保存しました定期的にデータベースを掃除して古いバージョンをクリーンアップすることができます。一時書き込みの「追加のみ」のスタイルは、パフォーマンス上の利点ももたらす可能性があります。

  • 関連する問題