En PersonaContoller.java
Para bases de datos dinámicas en el método init() indicamos al repositorio el nombre de la base de datos mediante setDataBase.
Esto permite crear en tiempo de ejecución la base de datos que estará asociada al repositorio.
Copy @PostConstruct
public void init() {
repositoryRevisionHistory.setDatabase("practica_history");
}
Es útil también cuando deseamos que en tiempo de ejecución se trabaje con una u otra base de datos
por ejemplo:
Si deseamos que una base de datos de se creara en base al nombre de la empresa definimos este con el método setDatabase(), obteniéndolo por ejemplo de un Controller para el login.
Copy personaRepository.setDatabase(loginController.getEmpresa().getName());
Crearemos un historial de revisiones
Dentro de jmoordb se crearon los entity y repository para manejar el historial de cambios que ocurre en un documento de una colección.
Agregar
Copy @Inject
RevisionHistoryRepository repositoryRevisionHistory;
@Inject
RevisionHistoryServices revisionHistoryServices ;
En el método save(), guardamos el historial de revisiones
Con ese código guardamos en la colección revisionhistory de la base de datos indicada en el init(), el historial de revisiones de cada documento.
Copy repositoryRevisionHistory.save(revisionHistoryServices.getRevisionHistory(persona.getCedula(),
"myusername",
"create", "persona", personaRepository.toDocument(persona).toString()));
PersonaController
Copy /*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.avbravo.practica.controller;
import com.avbravo.jmoordb.mongodb.history.repository.RevisionHistoryRepository;
import com.avbravo.jmoordb.services.RevisionHistoryServices;
import com.avbravo.jmoordbutils.JsfUtil;
import com.avbravo.practicaejb.entity.Persona;
import com.avbravo.practicaejb.repository.PersonaRepository;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import javax.annotation.PostConstruct;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
/**
*
* @author avbravo
*/
@Named
@ViewScoped
public class PersonaController implements Serializable {
Persona persona = new Persona();
@Inject
PersonaRepository personaRepository;
@Inject
RevisionHistoryRepository repositoryRevisionHistory;
@Inject
RevisionHistoryServices revisionHistoryServices ;
List<Persona> personaList = new ArrayList<>();
public List<Persona> getPersonaList() {
// return personaList;
return personaRepository.findAll();
}
public void setPersonaList(List<Persona> personaList) {
this.personaList = personaList;
}
public Persona getPersona() {
return persona;
}
public void setPersona(Persona persona) {
this.persona = persona;
}
@PostConstruct
public void init() {
repositoryRevisionHistory.setDatabase("practica_history");
//
// JmoordbConnection jmc = new JmoordbConnection.Builder()
// .withSecurity(false)
// .withDatabase("practica")
// .withHost("")
// .withPort(0)
// .withUsername("")
// .withPassword("")
// .build();
}
public String save() {
try {
Optional<Persona> optional = personaRepository.findById(persona);
if (optional.isPresent()) {
JsfUtil.warningMessage("Existe una persona con esa cedula");
return null;
}
if (personaRepository.save(persona, false)) {
JsfUtil.successMessage("Guardado");
repositoryRevisionHistory.save(revisionHistoryServices.getRevisionHistory(persona.getCedula(),
"myusername",
"create", "persona", personaRepository.toDocument(persona).toString()));
persona = new Persona();
} else {
JsfUtil.errorDialog("no se guardo()", personaRepository.getException().toString());
}
} catch (Exception e) {
JsfUtil.errorDialog("save()", e.getLocalizedMessage());
}
return "";
}
}