Historia de la biblioteca JMP

En la asignatura Programación Concurrente de las titulaciones a las que reemplaza el nuevo Grado en Ingeniería Informática de la Facultad de Informática de la Universidad de Murcia se utilizaba el lenguaje de programación Pascal-FC. En este lenguaje, que tiene un marcado carácter didáctico, es posible programar utilizando procesos, semáforos, monitores, comunicación síncrona, invocación remota y la sentencia de espera selectiva select. Por lo tanto, todos los aspectos teóricos vistos en la asignatura se podían trabajar en el apartado práctico usando Pascal-FC.

En el diseño de la nueva asignatura Programación Concurrente y Distribuida, impartida en 2º de Grado en Ingeniería, se decidió utilizar Java como lenguaje de programación para la componente práctica de la misma. Java sí es un lenguaje utilizado en entornos profesionales con lo que todo lo aprendido en esta asignatura relativo al uso de semáforos y monitores es directamente utilizable en la vida real.

Sin embargo, en entornos de trabajo reales, la sincronización de procesos en Java suelen estar basada en tecnologías o librerías como RMI, JMS, y muchas otras. La programación de aplicaciones utilizando estas librerías suele ser compleja, está orientada al modelo cliente/servidor, se basan en comunicaciones a través de la red y, normalmente, requiere del uso de diferentes equipos que actúan como diferentes entidades dentro de los modelos de comunicación que conlleva el uso de estos protocolos.

El bloque III de la nueva asignatura de grado constituye una primera aproximación a la programación en sistemas distribuidos. Como tal, lo más importante es estudiar los mecanismos básicos de paso de mensajes, las diferencias entre los esquemas síncronos y asíncronos, y abordar algunos algoritmos básicos para conseguir exclusión mutua en estos entornos. Por lo tanto, era necesario contar con algún tipo de biblioteca que simulara los esquemas de comunicación estudiados (síncrono, asíncrono, invocación remota) y la sentencia de espera selectiva select.

Desde este punto de vista, y buscando que el alumno se centre en los modelos teóricos de comunicación en lugar de luchar con librerías, y problemas derivados de la red, entre otros, se diseñó un paquete Java que ofrece un interface simple y muy parecida a lo que se ve en teoría. Este paquete permite simular los tres mecanismos de paso de mensajes que se estudian en la asignatura. En concreto, se pueden utilizar canales síncronos mediante la clase Channel, buzones que se adaptan al esquema de comunicación asíncrono con la clase MailBox, y también simula el modelo basado en invocación remota. Además de esto, en los tres esquemas se puede utilizar una variante de la conocida sentencia de selección múltiple de Dijkstra con la clase Selector.

El paquete está escrito utilizando de forma intensiva los mecanismos de sincronización que ofrece Java, especialmente los monitores y las variables condición. Su desarrollo comenzó en enero de 2011 y lleva usándose con éxito desde el cursos 2010-11.

En su desarrollo han colaborado activamente probando, buscando errores y haciendo sugerencias y correcciones los siguientes compañeros de fatiga: