Sistema distribuido de consulta de preferencias musicales con Java RMI y notificaciones en tiempo real por Callback.
🇪🇸 Español: El cliente solicita al servidor RMI las preferencias de un usuario (artistas y géneros más escuchados); el servidor consolida los datos de servicios externos vía Feign y responde. Al mismo tiempo, notifica a los administradores registrados mediante callbacks RMI en tiempo real.
🇺🇸 English: A client requests user listening preferences (top artists and genres) from an RMI server, which aggregates external services via Feign and replies. In parallel, it notifies registered administrators in real time via RMI Callbacks.
Este proyecto es una implementación de un sistema distribuido utilizando Java RMI para la consulta de preferencias de usuarios (artistas y géneros más escuchados). El sistema actúa como un middleware que consolida información proveniente de otros microservicios (Canciones y Reproducciones) para entregar un perfil de preferencias a los clientes y notificar a los administradores mediante Callbacks.
El proyecto está dividido en tres módulos principales:
servidor_java_rmi: Contiene la lógica del servidor, el objeto remoto y la integración con servicios externos mediante clientes REST (Feign). Gestiona el registro de administradores para notificaciones automáticas.cliente_java_rmi: Interfaz de consola que permite a los usuarios interactuar con el servidor RMI para realizar consultas de preferencias.administrador_java_rmi: Módulo que se registra en el servidor para recibir notificaciones en tiempo real cada vez que un usuario consulta sus preferencias.
- Java JDK 17 o superior.
- Apache Maven.
- Servicios externos de Canciones y Reproducciones (o un simulador como JsonServer) en ejecución.
Todos los módulos cuentan con un archivo application.properties en src/main/resources para configurar los parámetros de red:
ns.host: Dirección IP del Name Server (Registry).ns.port: Puerto del Name Server (por defecto2020).servidor.canciones.url: URL del microservicio de canciones.servidor.reproducciones.url: URL del microservicio de reproducciones.
Desde la raíz del proyecto, compila los tres módulos:
mvn clean compile -f servidor_java_rmi/pom.xml
mvn clean compile -f cliente_java_rmi/pom.xml
mvn clean compile -f administrador_java_rmi/pom.xmlNavega a la carpeta del servidor y ejecuta:
cd servidor_java_rmi
mvn exec:java "-Dexec.mainClass=co.edu.unicauca.main.Main"El servidor iniciará automáticamente el registro RMI en el puerto configurado.
En una nueva terminal, navega a la carpeta del administrador y ejecuta:
cd administrador_java_rmi
mvn exec:java "-Dexec.mainClass=co.edu.unicauca.main.Main"El administrador se registrará en el servidor y quedará a la espera de notificaciones.
En otra terminal, navega a la carpeta del cliente y ejecuta:
cd cliente_java_rmi
mvn exec:java "-Dexec.mainClass=co.edu.unicauca.main.Main"El sistema permite consultar las preferencias de un usuario y notificar a los administradores registrados. El proceso es:
- El Administrador se registra en el servidor proporcionando su referencia remota (
CallBack). - El Cliente solicita las preferencias al objeto remoto
objControladorPreferenciasUsuarios. - El Servidor RMI obtiene los datos de Canciones y Reproducciones mediante Feign.
- El calculador procesa la información y genera el perfil de preferencias.
- El servidor envía las preferencias al cliente como respuesta.
- Simultáneamente, el servidor invoca el método
notificar()en todos los administradores registrados, enviándoles el perfil procesado.
- Java RMI: Invocación de métodos remotos y mecanismos de Callbacks.
- Maven: Gestión de dependencias y construcción.
- OpenFeign: Comunicación declarativa con servicios REST.
- Jackson: Procesamiento de datos JSON.
- Lombok: Reducción de código boilerplate en DTOs.