2012-01-20 9 views
10

L'aggiornamento dell'oggetto tramite GWT RPC può essere annullato facilmente. Abbiamo bisogno di clonare lo stato dell'entità precedente nella memoria e applicarlo all'annullamento.Come annullare l'aggiornamento RequestFactory

Ma quando si utilizza RequestFactory non esiste alcuna operazione di aggiornamento concreta. RequestFactory invia modifiche all'entità al server e aggiorna le entità del repository stesso. Non possiamo intercettare il processo di aggiornamento.

Come si deve implementare l'annullamento per gli aggiornamenti eseguiti con RequestFactory?

+0

Si sta utilizzando InstanceRequest o solo Request in RF per richiamare la persistenza? – Andrejs

risposta

0

Richiedi factory non aggiorna l'entità del server, finché non si attiva la richiesta. Quindi puoi semplicemente evitare di effettuare una chiamata al fire(), per evitare modifiche sul server. Spero che questo sia ciò che intendevi. Puoi pubblicare il codice che dimostra come stai aggiornando l'entità e dove vuoi eseguire l'annullamento?

+0

"Annulla" significa che le modifiche sul server erano già state fatte. Devo intercettare l'operazione di aggiornamento del server per salvare lo stato dell'entità per l'annullamento futuro. –

0

Non so se ti piacerebbe farlo. Per questo, dì che vuoi annullare le modifiche di una classe, ad esempio Contatti, aggiungi un campo dello stesso tipo, qualcosa come lo stato precedente (fallo in modo transitorio se non vuoi che rovini la tua persistenza) in modo che il classe assomiglia a questo:

class Contact { 

    Integer id; 
    Integer version; 

    String name; 
    String phoneNumber; 

    //Transient 
    Contact previousState; 

} 

Ora nella chiamata persistono, eseguire il backup dei dati correnti nel PreviousState e poi persistono dell'entità contatto corrente. Nella chiamata annullata copia i dati da previousState a "this".

Undo non ha alcun senso sul server, tali cose devono essere gestite sul client. Non ho incontrato nessuno scenario in cui è richiesta una funzionalità di annullamento sul server. Quindi, per favore, cita lo scenario e il codice attraverso il quale desideri realizzare questo.

+0

Per eseguire l'annullamento solo sul client, è necessario mantenere tutto lo stato dell'applicazione sul client. Pensi che sia possibile in un'app GWT? –

+0

Lo è sicuramente, ma non avresti bisogno dell'intero stato dell'applicazione, qualche entità come un'entità di contatto in un'applicazione AddressBook è ciò che ti piacerebbe "annullare", giusto? –

+0

No. Hai torto. Prendi in considerazione un elenco ordinato di contatti, ad esempio. –

1

Si dovrebbe esaminare la modifica delle strutture dati e delle tabelle sul lato server. Incorporare un modello temporale o bitemporale lì. Non preoccuparti di cercare di tenere in memoria "vecchi" stati di entità o di intercettarli. Mantieni intatti gli stati precedenti delle entità con i campi temporali. Annulla significa individuare una versione precedente tramite timestamp e renderla attuale. Puoi farlo anche su più tipi di entità contemporaneamente.

  • 01:00 pizza Una salvato
  • 01:01 ingredienti della pizza A cambiati
  • 01:02 ingredienti della pizza A cambiati
  • 01:03 annullare a 01:01

Se tu vuoi, puoi periodicamente pulire il tuo database e ripulire vecchie versioni. Lo stile "append-only" delle scritture temporali può anche offrire vantaggi in termini di prestazioni.