Relacionar documentos en bases de datos diferentes
Podemos mezclar proyectos ejb, para establecer referencias entre documentos que no se encuentran en la misma base de datos, o en un motor NoSQL del mismo tipo. Nos permite mezclar bases de datos y colecciones diferentes.
Contamos con dos bases de datos:
commondb
transporte
Esquema General
Contamos con los tres proyectos
Proyecto commonejb
El proyecto commonejb, se comunica con la base de datos commondb .
Es un proyecto con acceso a una base de datos comunes para muchas aplicaciones, esto lo podemos hacer mediante mecanismos usando Rest-Ful, pero en este ejemplo usaremos el proyecto como dependencia para otros proyectos.
Cambiamos el nombre del MongoClientProvider de cada proyecto para que no existan conflictos. Esta clase tiene la conexión a la base de datos.
Podemos contar con bases de datos en el mismo servidor o en servidores remotos separados una de otra.
se mostraria de esta manera
Contamos con un entity llamado Facultad que puede ser usado por muchas aplicaciones.
Si lo usamos para relacionarlo con otro proyecto , debemos usar la nomenclatura para el MongoClientProvider, repository,services con {nombreproyecto}
En las dependencias agregamos el proyecto commonejb
Podemos crear referencias a los documentos aunque no estén en la misma base de datos.
Deseamos relacionar la colección Solicitud en la base de datos transporte con la coleccion Facultad en la base de datos commondb.
Creamos un objeto de tipo List<Facultad> ya que deseamos almacenar una lista de facultades, es importante indicar en el repository la ruta donde esta ubicado el repository Facultad en el otro proyecto, de esta manera el framework, lo podrá encontrar fácilmente aunque no estén en el mismo servidor o use el mismo motor de la base de datos.
En este ejemplo creamos una lista de Facultades desde el Entity Solicitud en la base de datos transportes, que hace referencia a la colección Facultad que se encuentra en la otra base de datos commondb.
/* * 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. */packagecom.avbravo.transporteejb.entity;importcom.avbravo.commonejb.entity.Facultad;importcom.avbravo.ejbjmoordb.anotations.Embedded;importcom.avbravo.ejbjmoordb.anotations.Id;importcom.avbravo.ejbjmoordb.anotations.Referenced;importcom.avbravo.ejbjmoordb.pojos.UserInfo;importjava.util.Date;importjava.util.List;importlombok.Getter;importlombok.Setter;/** * * @author avbravo */@Getter@SetterpublicclassSolicitud { @IdprivateInteger idsolicitud;privateString periodoacademico;privateDate fecha;privateString numerogrupo;privateString carrera; @Referenced(documment ="Facultad", field ="idfacultad", javatype ="Integer", lazy =false, repository ="com.avbravo.commonejb.repository.FacultadRepository")List<Facultad> facultad;privateString responsable;privateString telefono;privateString email;privateString mision; @Referenced(documment ="Usuario", field ="username", javatype ="String", lazy =false, repository ="com.avbravo.transporteejb.repository.UsuarioRepository")Usuario usuario;privateString objetivo;privateString lugares;privateDate fechahorapartida;privateString lugarpartida;privateDate fechahoraregreso;privateString lugarllegada;privateString recursossolicitados;privateString observaciones; @Referenced(documment ="Estatus", field ="idestatus", javatype ="String", lazy =false, repository ="com.avbravo.transporteejb.repository.EstatusRepository")Estatus estatus;privateDate fechaestatus;privateInteger pasajeros; @Referenced(documment ="Tiposolicitud", field ="idtiposolicitud", javatype ="String", lazy =false, repository ="com.avbravo.transporteejb.repository.TiposolicitudRepository")Tiposolicitud tiposolicitud; @Referenced(documment ="Unidad", field ="idunidad", javatype ="String", lazy =false, repository ="com.avbravo.transporteejb.repository.UnidadRepository")privateList<Unidad> unidad;privateString activo; @EmbeddedList<UserInfo> userInfo;}
Proyecto web transporte
Solo necesitamos agregar la dependencia transporteejb, ya que commonejb, fue agregada a ese proyecto.