jmoordb
  • Introduction
  • Overview
    • Copyleft
    • Prefacio
    • Creditos
    • Autor
    • Introduccion
  • Capitulo 1
    • Capítulo 1. Jmoordb
      • Base de Datos NoSQL
      • Esquema jmoordb
      • MongoDB
        • Instalar desde repositorio
        • Instalar MongoDB desde zip
        • Instalar Mongodb con Docker
        • Crear archivo mongodb.conf
        • Crear usuario de la base de datos
        • Conectarse a la base de datos con usuario y password
        • Optimizar MongoDB
        • Seguridad mongodb
      • OrientDB
      • Couchbase
      • Dependencias
      • MongoClientProvider
      • CouchbaseClientProvider
      • Bean Validation
      • Clases Internas
        • JmoordbNotifications.java
      • Interfaces
      • Configuracion del stack
      • Conexion a Base de datos
      • Conexión mediante Microservicios
  • Capitulo 2
    • Capítulo 2. Entidades y Repository
      • Entity
      • Anotaciones
      • Documento Embebido
      • Documento Embebido como Historial
      • Embebido con List de Referenciado
      • Documento Referenciado
      • Repository MongoDB
      • Repository Couchbase
      • Save
      • Update
      • Delete
      • Repository
  • Capitulo 3
    • Capítulo 3. Búsquedas
      • Búsquedas findById
      • findBySecondaryKey()
      • isFoundBySecondaryKey()
      • Busquedas find
      • Busquedas @Embedded
      • Busquedas @Referenced
      • Busquedas findAll
      • Búsquedas findBy
      • Busquedas findPagination
      • Busquedas findFirst
  • Capitulo Llaves primarias y secundarias
    • Capitulo Llaves primarias y secundarias
    • List<FieldBeans> fieldsOfBean()
    • Autoincrementable
  • Capitulo UserInfo
    • Capitulo UserInfo
  • Capitulo Profiles
    • Capitulo Profiles
  • Capitulo 4
    • Capitulo 4. Busquedas avanzadas
      • Buscar y actualizar automaticamente
      • Autoincrementable secundarios
      • Búsquedas Expresiones Regulares (Patrones Like)
      • Búsquedas por Texto findText
      • Busquedas con Helpers
      • Busquedas con Filter and Pagination
      • Full Text Search service
      • Busqueda entre enteros filterBetweenInteger
      • Busquedas en Rango de Doubles
      • Shell
  • Capitulo 5. Búsqueda en Documentos Embebidos
    • Capitulo 5. Búsqueda en Documentos Embebidos
      • Buscar elemento en un List<> Embebido/Referenciado
      • Filtros entre fechas en List<entity> embebidos
  • Capitulo 6. Busquedas en Fechas
    • Capitulo 6. Busquedas en Fechas
      • Busqueda entre Fechas filterBetweenDate()/filterBetweenDateWithoutHours()
      • betweendateWithFilter
      • Búsquedas por Día filterDayWithoutHour()
      • Disponible entre dos fechas en rangos de fechas inicial y final
      • Autocomplete disponibles en base a rango de dos fechas seleccionadas
      • Autocomplete en rangos de fechas excluyendo el mismo entity
      • Utilidades para Fechas
  • Capitulo 7 Aggregation
    • Capitulo 7 Aggregation
      • Introduccion Aggregation
      • Ejemplo $match
      • Ejemplo $group
      • Ejemplo $match, $group combinado
      • Ejemplo $lookup
      • Aggregation en ;MongoDB
  • Capitulo 8
    • Capitulo 8. Utilidades Bases datos
      • Restaurar base datos
      • internalQueryExecMaxBlockingSortBytes
      • Statistics
      • count
      • sizeOfPage
      • Indices
      • Crear Indice Primario
      • Lista de colecciones
      • Crear una coleccion
      • Eliminar una coleccion
      • Convertir Entity a documento
      • Eliminar base datos
      • Desconectar
      • Agregar campo a todos los documentos
      • ListOfPage
      • Importar un json a MongoDB
      • Migrar desde MySQL a MongoDB
      • updateOne
      • updateMany
      • Copiar base de datos
      • Migrar desde un archivo sql a mongodb
      • Cambiar el nombre de un campo
      • Exportar a csv
      • update field
      • Ver listado de colecciones
      • Eliminar un campo
      • Incrementar valor de campos
      • Tipos enteros
      • Agrupar y contar
      • iterate Cursor
      • Estadisticas
      • SQL vs MongoDB
      • not
      • Videos
      • Crear colleccion
      • Combinar bases de datos
      • sortConstructor
      • filterEQBuilder
      • documentToJson/jsonToDocument
      • Renombrar base de datos
      • Consultas $ne
      • Consulta entre Fechas
      • Consultas And
      • Consulta compleja
      • Contar registros complejos
      • Agregar un campo en una consulta compleja
      • Actualizacion compleja
      • Actualizar enteros mediante or
  • Capitulo 9 ACID Transactions Aun no implementado
    • Capitulo 9 ACID Transactions
      • ejemplos ACID
  • Capitulo 10. Bases datos sin esquema
    • Capitulo 10. Bases datos sin esquema
      • Insertar, Actualizar, Eliminar
  • Capítulo 11
    • Capitulo 11. Aplicación Java SE MongoDB
      • Base de datos
      • Proyecto Maven
      • Clase MongoClientProvider
      • Clase Entity
      • Clase Repository
      • Clase Controller
      • Clase Main
  • Capítulo 12
    • Capítulo 12 Java EE
      • Proyecto Maven Web
      • Dependencias web
      • Clase MongoClientProvider Web
      • Entity Web
      • Interfaces Web
      • Repository Web
      • Controller Web
      • Pagina Web
  • Capitulo 13. Couchbase
    • Capitulo 13 Couchbase
      • Base datos couchbase
      • Entity Couchbase
      • Dependencias Maven Couchbase
      • Couchabase Provider para el Ejemplo Couchbase
      • Repository Couchbase
      • Controller Couchbase
  • Capitulo 14 Auditoria
    • Capitulo 14 Auditoria
      • Introduccion
      • Implementación Repository de Auditoria
      • Historial de Acceso
      • Historial de Operaciones sobre documentos
      • Historial de Revisiones
    • SQL
  • Referencias
    • Referencias
      • Referencias importantes
Powered by GitBook
On this page
  • Historial de revisiones de eliminaciones
  • Historial de Cambios en los documentos
  • Implementación

Was this helpful?

  1. Capitulo 14 Auditoria
  2. Capitulo 14 Auditoria

Historial de Revisiones

PreviousHistorial de Operaciones sobre documentosNextSQL

Last updated 6 years ago

Was this helpful?

El historial de revisiones nos permite almacenar el contenido de un documento en otra colección dentro de la misma base de datos o idealmente en otra base de datos.

Es util por ejemplo si deseamos conocer el contenido de un documento que fue eliminado, e identificar la fecha y el usuario que lo realizó, o almacenar un documento antes de ser actualizado. Existen infinidad de situaciones, en nuestro caso JMoordb ofrece una implementación mediante RevisionHistory, RevisionHistoryServices

El usuario debe crear en su proyecto RevisionHistoryFacade e indicar la base de datos y colección donde se almacenarán los documentos.

Historial de revisiones de eliminaciones

En el Controller

Agregar el Facade y el Services.

 @Inject
 RevisionHistoryFacade revisionHistoryFacade;

 @Inject
 RevisionHistoryServices revisionHistoryServices;

En el método por ejemplo delete(), invocamos getRevisionHistory

Parámetro

Descripción

1

El valor del campo llave del documento

2

Username del usuario que realiza la operación

3

La operación realizada por ejemplo(delete, update,etc)

4

El nombre de la colección donde se almacena el documento

5

Invocar el método toDocument() del Facade para convertir el Entity a un JSon.

 revisionHistoryFacade.save(revisionHistoryServices.getRevisionHistory(agente.getCedula(), loginController.getUsername(),
                        "delete", "agente", agenteFacade.toDocument(agente).toString()));

Ejemplo de uso

@Override
    public String delete() {
        try {
            if (agenteFacade.delete("cedula", agente.getCedula())) {
                //Guarda el historial

                revisionHistoryFacade.save(revisionHistoryServices.getRevisionHistory(agente.getCedula(), loginController.getUsername(),
                        "delete", "agente", agenteFacade.toDocument(agente).toString()));

                JsfUtil.successMessage(rf.getAppMessage("info.delete"));
                agente = new Agente();
                found = false;
                reset();
            }
        } catch (Exception e) {
            JsfUtil.errorMessage("delete() " + e.getLocalizedMessage());
        }
        return "";
    }

En el Facade indicamos la base de datos y colección donde se almacenarán los datos

Si eliminamos el documento, el contenido sera almacenado en la colección que definimos, y nos funcionara con fines de auditoria. Seria ideal que sea una base de datos diferente a la de producción.

Historial de Cambios en los documentos

En muchas ocasiones necesitamos realizar operaciones de audito para determinar los cambios realizados por un determinado usuario a un documento.

Mediante revisionhistory , podemos almacenar el valor del entity anterior y guardar otro documento con el documento con todos los cambios de esta manera podemos auditar fácilmente que cambios fueron realizados y cual fue el usuario que los ejecuto.

Ejemplo:

Tenemos un documento sobre el que realizamos actualizaciones.

En revisionhistory, se almacena el documento anterior en description colocamos un mensaje descriptivo como beforeudate, que contendrá el documento con la información original y el siguiente documento en description con update podemos identificarlo como el actualizado y el contenido se almacena con los nuevos cambios. De esta manera en el ejemplo podemos observar que el documento bodega con id: bodega 3 , se modifico el teléfono y la dirección.

Desde consola

db.revisionhistory.find().pretty()

Implementación

Creamos un documento nuevo mediante revisionHistoryFacade.save( revisionHistoryServices.getRevisionHistory()), del entity que contiene los valores iniciales en el ejemplo bodegaSelected, y luego creamos un nuevo documento con el entity con los datos actualizados.

método edit()

  @Override
    public String edit() {
        try {

            bodega.getUserInfo().add(userInfoServices.generateUserinfo(loginController.getUsername(),"editado"));          

            //guarda el contenido anterior
             revisionHistoryFacade.save( revisionHistoryServices.getRevisionHistory(bodegaSelected.getIdbodega(), loginController.getUsername(), 
                        "beforeupdate", "bodega", bodegaFacade.toDocument(bodegaSelected).toString()));

             //guarda el contenido actualizado
              revisionHistoryFacade.save( revisionHistoryServices.getRevisionHistory(bodega.getIdbodega(), loginController.getUsername(), 
                        "update", "bodega", bodegaFacade.toDocument(bodega).toString()));

            bodegaFacade.update(bodega);
            JsfUtil.successMessage(rf.getAppMessage("info.update"));
        } catch (Exception e) {
            JsfUtil.errorMessage("edit()" + e.getLocalizedMessage());
        }
        return "";
    }// </editor-fold>