2012-01-20 14 views
10

Actualizar el objeto a través de GWT RPC puede deshacerse fácilmente. Necesitamos clonar el estado de la entidad anterior en la memoria y aplicarlo al deshacer.Cómo deshacer la actualización RequestFactory

Pero cuando usamos RequestFactory no hay una operación de actualización concreta. RequestFactory envía modificaciones de entidad al servidor y actualiza las entidades del repositorio. No podemos interceptar el proceso de actualización.

¿Cómo debo implementar deshacer para las actualizaciones realizadas con RequestFactory?

+0

¿Está utilizando InstanceRequest o simplemente Request in RF para invocar la persistencia? – Andrejs

Respuesta

0

Solicitar fábrica no actualiza la entidad del servidor, hasta que active la solicitud. Por lo tanto, puede evitar hacer una llamada al Fire() para evitar modificaciones en el servidor. Espero que esto sea lo que querías decir. ¿Puedes publicar el código que demuestre la forma en que estás actualizando la entidad y dónde quieres deshacer?

+0

"Deshacer" significa que las modificaciones en el servidor ya estaban hechas. Necesito interceptar la operación de actualización del servidor para guardar el estado de la entidad para deshacer en el futuro. –

0

No sé si te gustaría hacer esto. Para eso, digamos que desea deshacer los cambios de una clase, por ejemplo, póngase en contacto, agregue un campo del mismo tipo, algo así como el estado anterior (simplemente hágalo transitorio si no quiere que estropee su persistencia) para que el clase tiene este aspecto:

class Contact { 

    Integer id; 
    Integer version; 

    String name; 
    String phoneNumber; 

    //Transient 
    Contact previousState; 

} 

Ahora en su llamada persistir, copia de seguridad de los datos actuales en el previousState y luego persisten la corriente entidad Contacto. En la llamada deshacer, copie los datos de previousState a "this".

Deshacer no tiene ningún sentido en el servidor, tales cosas tienen que ser administradas en el cliente. No he encontrado ningún escenario donde se requiera una funcionalidad de deshacer en el servidor. Así que por favor cite el escenario y el código a través del cual desea lograr esto.

+0

Para deshacer solo en el cliente, debe mantener todo el estado de la aplicación en el cliente. ¿Crees que es posible en una aplicación GWT? –

+0

Definitivamente lo es, pero no necesitaría el estado completo de la aplicación, alguna entidad como una entidad de contacto en una aplicación AddressBook es lo que le gustaría "deshacer", ¿verdad? –

+0

No. Estás equivocado. Considere una lista ordenada de contactos, por ejemplo. –

1

Debe considerar la modificación de las estructuras y tablas de datos del lado del servidor. Incorpore un modelo temporal o bitemporal allí. No se moleste en tratar de mantener estados de entidades "antiguas" en la memoria, o interceptarlas. Mantenga intactos los estados previos de las entidades con los campos de tiempo. Deshacer significa ubicar una versión anterior por marca de tiempo y actualizarla. También puede hacer esto en múltiples tipos de entidades simultáneamente.

  • 01:00 de pizza Un guarda
  • 01:01 ingredientes de pizza A cambió
  • 01:02 ingredientes de pizza A cambió
  • 01:03 deshacer a 01:01

Si Si lo desea, puede barrer periódicamente su base de datos y limpiar versiones antiguas. El estilo "solo de apéndice" de las escrituras temporales también puede generar beneficios de rendimiento.