Esta segunda práctica resulta de
considerar la primera práctica más algunas cuestiones
que la hacen más atractiva para su diseño bajo Java RMI. Por ello, si piensa hacer
esta práctica, lea bien el primer enunciado, pues aquí haremos alguna alusión a
aquél.
Cierto proceso central, actúa como
servidor del tipo de recurso “Noticia”. Dicho servidor dispone de dos
interfaces distintas, que obedecen a dos tipos de sesiones, la sesión del
“Redactor” y la sesión del “Lector”. El servidor deberá soportar los mensajes
elementales de estos dos tipos de actores. El diseño del sistema deberá hacerse
mediante el modelo de objetos distribuidos proporcionado por Java-RMI.
Las noticias a las que nos referimos en
esta práctica son cadenas de bytes, con un encabezado compuesto de un nombre
único (en el servicio), un títular, una fecha de creación, una fecha de
modificación, una fecha de caducidad, y el nombre del principal que creó la
noticia. Cada vez que se transmite una noticia, ésta contiene la información de
cabecera. Obviamente, y este es un punto importante, hay que distinguir entre
el contenido de la noticia y el gestor de las noticias, lo que no resulta tan
obvio, cuando consideramos algunos casos de uso que parece que deben
implementarse en una posible clase “Noticia” (este es el caso de “Leer
Noticia”, o “Consultar Interés”).
Obviamente, los casos de uso del
diagrama precedente son soportados por la interfaz. Los casos de utilización
son los siguientes:
Para el Redactor:
Agregar Noticia: Representa la acción por la cual el Redactor crea un nuevo objeto de tipo Noticia en el servicio, y le otorga un nombre. Queda claro que pudiera darse el caso de que el nombre ya exista, o que el principal no esté autorizado, o …
Modificar Noticia: Para que sin necesidad de que se cree un nuevo objeto de tipo Noticia, el Redactor pueda cambiar los contenidos de la noticia. Véase que, de esta forma, una noticia se convierte, en cierto modo, en un canal de comunicación.
Consultar Interés: Es una primitiva muy interesante, y que nos permitirá dar sentido a las últimas frases del párrafo anterior. En definitiva consiste en saber qué individuos han consultado cierta noticia. Es decir debe proporcionar una lista de identificadores de Lectores que han leído la noticia.
Para el Lector:
Leer Noticia: Permitirá al Lector acceder al contenido de la noticia, y su cabecera. Piense en los mecanismos que tendrá que habilitar para que un posible Lector acceda a las Noticias.
Buscar Noticias: Mediante este método, el Lector podrá obtener un listado de noticias del servicio. El mecanismo permitirá buscar noticias mediante criterios de fecha y palabras clave sobre el titular de la noticia, para que así podamos recuperar sólo aquellas noticias que nos interesen.
Registrar Interés: Mediante esta
operación, cierto método especial del Lector será invocado remotamente por el
servidor de Noticia cuando se produzca una modificación.
¡ OJITO ! : Puede que haya más de un
lector interesado por la noticia concreta, y hay que notificar a cada uno de
ellos.
Antes de codificar la práctica, es aconsejable preguntar al profesor para que valide el diseño y le comente posibles fallos o mejoras. Para ello, hay que tener en mano, al menos un diagrama de clases de diseño, medianamente elaborado.
Para la documentación definitiva, deberá entregar:
Un diagrama de clases para el diseño, al menos
Los programas en Java que componen la aplicación completa.
Aquellos diagramas de secuencia o de estado que describan vuestra aplicación.
JavaDoc de todos vuestros programas. (Un JavaDoc decente).
El plazo será de, aproximadamente, un mes.