Diseño del módulo cargador (Servidor)

El Gestor de Módulos es el módulo encargado de cargar todos los módulos que forman parte del proyecto. Para ello, primero realiza la carga de todo módulo cuyas dependencias hayan sido resueltas (o no tengan dependencias).

Para la realización de dicha tarea, el Gestor de Módulos se compone de las siguientes partes:

GestorModulosImpl:

Clase (que implementa la interfaz IGestorModulos) trata la carga dinámica de los módulos del proyecto.

Dispone de ciertos método que comentamos a continuación:

  • public void ejecutar(): Método que realiza la ejecución del cargador de módulos
  • private void preparaClassLoader(File,String[]): Método encargado de preparar el ClassLoader de cada archivo .jar (cuyo nombre está en el array de String) de la carpeta dada por el parámetro de tipo File.-
  • public IModulo obtenerInstanciaModulo(String nombreModulo): Método accesor al módulo concretro cargado para poder ser usado por otros módulos.
  • public void creaInstanciasJars(): Método encargado de instanciar los módulos (procedentes de los archivos .jar), sin cargarlos. Estos son añadidos a InfoModulos (atributo de clase).
  • public GestorModulosImpl getCargador(): Devuelve la única instancia del cargador. Se ha aplicado un patrón Singleton para que sólo exista una única instancia (único cargador).

Nota: No está reflejada la clase privada en la que se apoya ésta clase para la implementación del patrón.

También dispone como único atributo una variable de tipo InfoModulos (tipo que comentamos a continuación).

InfoModulos:

Clase almacén de variables InfoModulo que contienen toda la información referente a los módulos del programa.

Dispone de los siguientes métodos:

  • public HashMap<String,InfoModulo> dameInstanciasModulos(): Método accesor a la colección de módulos que tiene nuestra aplicación.
  • public InfoModulo[0..*] dameOrdenIniciados(): Método accesor a la colección

ordenada por orden de iniciación de los módulos de nuestra aplicación. (Así podremos detenerlos en el mismo orden en el que fueron iniciados).

  • public void actualizaDependencias(String): Método encargado de actualizar las dependencias de todos los módulos que dependiesen del módulo pasado como argumento (su nombre).
  • public boolean existenDependencias(): Método que nos dice si queda algún módulo con dependencias en nuestra colección de módulos.

Sus atributos son:

  • HashMap<String,InfoModulo> _instanciasModulos: Contiene todos los módulos instanciados los cuales son accedidos mediante su nombre.
  • ArrayList<InfoModulo> _ordenIniciados: Contiene los módulos en el orden que fueron iniciados.

InfoModulo:

Clase que contiene toda la información referente a un módulo de la aplicación.

Dispone de los siguientes métodos:

  • public static void stPonerClassLoader(URLClassLoader): Método que asigna el la clase cargadora del módulo.
  • public URLClassLoader stGetLoader(): Método que obtiene la dirección de la clase cargadora del módulo.
  • public void iniciaInstancia(GestorModulosImpl): Método encargado de iniciar el módulo en caso de que sus dependencias hayan sido resueltas.
  • private void generaDependencias(String): Genera las dependencias del módulo gracias al String pasado por argumento sacado directamente del archivo de manifiesto del módulo (en el que se encuentran las dependencias del modulo).
  • public void quitaDependencia(String): Se encarga de eliminar la dependencia dada por el String del módulo.
  • public boolean dameIniciado(): Método accesor al atributo que indica si ha sido iniciado el módulo.
  • public void ponIniciado(boolean init): Método modificador del atributo que indica si el módulo ha sido iniciado.
  • public boolean tieneDependencias(): Método que indica si el módulo aún posee dependencias por resolver.
  • public ArrayList dameDependencias(): Método accesor a la colección de dependencias de un módulo.
  • public IModulo dameModulo(): Método accesor al módulo en si.

Los atributos de la clase son los siguientes:

  • IInicioModulo _instModulo: Contiene la clase que implementa IinicioModulo.
  • String _dependencias[0..*]: Posee las dependencias del módulo.
  • boolean _iniciado: Informa si el módulo ya ha sido iniciado.
  • IModulo _modulo: Contiene la referencia al módulo en sí.
  • static URLClassLoader _stLoader: Contiene la dirección del cargador del módulo.

También podemos comentar brevemente que la clase FiltroJar es necesaria para poder filtrar los archivos .jar de una ruta especifica. (Implementa la clase FilenameFilter de Java).
Además la clase Principal se encarga de la creación y ejecución del cargador.

Diagrama UML del cargador:

Se recomienda su apertira con Internet Explorer.

RevisionMayo