unidad tipos programacion modulos modularidad ejercicios ejemplos como aplica java deployment plugins

tipos - Carga dinámica de módulos en Java



tipos de modularidad (2)

En Java, puedo agregar dinámicamente cosas a classpath y cargar clases (significando "dinámicamente" sin reiniciar mi aplicación). ¿Existe un marco / biblioteca conocido que se ocupe de la carga / descarga dinámica de módulos sin reiniciar?

La configuración habitual, especialmente para aplicaciones web, es el equilibrador de carga, varias instancias de aplicación y la implementación gradual y el reinicio de la nueva versión. Estoy buscando algo más: una aplicación con varios servicios / complementos, posiblemente una aplicación de escritorio de instancia única, donde la desactivación de un solo servicio es barata, pero no es posible cerrar o reiniciar la aplicación completa.

Estoy pensando en la infraestructura típica de complementos, donde los complementos se pueden actualizar o instalar sin reiniciar la aplicación. ¿Tengo que programar eso desde cero o algo ya está disponible? Compatible con Spring y opensource es un plus, pero no es un requisito.


Puede considerar ejecutar su aplicación de primavera en un marco OSGI .

Creo que DMServer es un servidor de aplicaciones Java basado en módulos que está diseñado para ejecutar aplicaciones empresariales Java y aplicaciones basadas en Spring basadas en OSGI

Puede encontrar más detalles en este artículo Hello, OSGi, Parte 2: Introducción a Spring Dynamic Modules , en particular, cómo usar Spring DM para instalar, actualizar y desinstalar módulos dinámicamente en un sistema en ejecución.

Nota: cuando hablas de que "los complementos se pueden actualizar o instalar sin reiniciar la aplicación", OSGI es el primer marco candidato que se te viene a la mente.

Se trata de modularización de aplicaciones en paquetes más pequeños.
Cada paquete es una colección de clases, archivos jars y archivos de configuración que se pueden cargar dinámicamente y que declaran explícitamente sus dependencias externas (si las hay).


Quizás el enfoque más simple es cargar cada complemento con su propio cargador de clases. Luego, descarte el cargador de clases y cree uno nuevo para volver a cargar el complemento. Querrá los métodos init () y destroy () en la API del complemento para permitir una oportunidad de funcionalidad de inicio / cierre.

Esto también tiene la ventaja de aislar los complementos entre sí.

Un URLClassLoader es su punto de partida para esto. La idea general es que proporcione una superclase XxxPlugin que cualquier subclase de complemento. Considere el ejemplo de Applet, que es esencialmente un complemento GUI (o Midlet, etc.).