java plugins plugin-architecture

java - ¿La mejor tecnología para agregar soporte de complementos a una aplicación J2SE?



plugins plugin-architecture (5)

Estoy escribiendo una aplicación de escritorio J2SE que requiere que uno de sus componentes sea conectable. Ya he definido la interfaz de Java para este complemento. El usuario debe poder seleccionar en tiempo de ejecución (a través de la GUI) qué implementación de esta interfaz quiere usar (por ejemplo, en un cuadro de diálogo de inicialización). Me imagino que cada complemento se empaqueta como un archivo JAR que contiene la clase de implementación más cualquier clase de ayuda que pueda requerir.

¿Cuál es la mejor tecnología para hacer este tipo de cosas en una aplicación Java de escritorio?


¿Pensaste en usar OSGi como un framework de complementos? Con OSGi puede actualizar / reemplazar, cargar o descargar sus módulos bajo demanda.


Después de muchos intentos para las arquitecturas Java basadas en complementos (que es exactamente lo que parece que buscas), finalmente encontré que JSPF era la mejor solución para el código Java5. no tiene las enormes necesidades de soluciones similares a OSGI, sino que es bastante fácil de usar.


OSGI es sin duda una forma válida de hacerlo. Pero, suponiendo que no necesita descargar para volver a cargar el complemento, podría usar un martillo para romper una tuerca.

Puede usar las clases en ''java.util.jar'' para escanear cada archivo JAR en su carpeta de complementos y luego usar ''java.net.URLClassLoader'' para cargar el correcto.


Si solo "necesita" que un componente sea conectable, basta con crear una instancia de las clases basada en metainformación, por ejemplo, leer a través de un cargadores de clase META-INF / información de los diversos tarros que se encuentran en su classpath o en un determinado directorio de plugins .

OSGi por otro lado proporciona medios para estructurar toda su aplicación. Si ya tiene una gran aplicación de escritorio que necesita una parte conectable, esta sería una curva de aprendizaje abrupta. Si comienza en blanco con lo que será una aplicación de escritorio, OSGi proporciona los medios para modularizar toda la aplicación. Se trata del "aislamiento de componentes" y la independencia de los módulos.

Apache Felix ofrece un buen comienzo si quieres ir al carril OSGi. Puede parecer complicado y pesado, pero eso es solo porque uno no está acostumbrado a ese nivel de aislamiento entre módulos. Solía ​​ser tan fácil simplemente llamar a cualquier método público ...


Un enfoque que estoy considerando es hacer que mi aplicación inicie un contenedor OSGi ligero, que si lo entiendo correctamente podría descubrir qué archivos JAR de complementos existen en una carpeta designada, lo que a su vez me permitiría enumerarlos para que el usuario los elija de. ¿Es esto factible?

También encontré este artículo de Richard Deadman, pero parece un poco anticuado (¿2006?) Y no menciona ni OSGi (al menos no por nombre) ni el paquete java.util.jar