2008-09-17 15 views
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.¿La mejor tecnología para agregar compatibilidad de complementos a una aplicación J2SE?

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

+0

¿Cómo funcionó JSPF para usted? Creé un hilo para comentarios: http://stackoverflow.com/questions/1613935/ –

+0

No lo he usado todavía, pero volveré a publicar aquí una vez que lo haga. –

Respuesta

5

Después de muchos intentos para las arquitecturas Java basadas en complementos (que es exactamente lo que pareces buscar), finalmente encontré que JSPF es 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.

+0

Fui al sitio del proyecto y vi el video de demostración; ¡JSPF parece muy fácil de usar y exactamente lo que quiero! Muchas gracias. –

0

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 el usuario para elegir. ¿Es esto factible?

También encontré this article por Richard Deadman, pero parece un poco anticuado (2006?) Y no menciona ni OSGi (al menos no por su nombre), ni el paquete java.util.jar

0

Qué le pareció el uso de OSGi como un plugin ¿marco de referencia? Con OSGi puede actualizar/reemplazar, cargar o descargar sus módulos bajo demanda.

+0

¡Hah! Batirte por un minuto! Pero en serio; ¿Has hecho esto tú mismo, o como yo, es algo que crees que * debería * funcionar? –

1

Si solo "necesita" que un componente sea conectable, basta con crear una instancia de las clases en función de la metainformación, p. Ej. lea a través de un clasificador de META-INF/información de los diversos jar que se encuentran en su classpath o en un determinado directorio de plugins.

OSGi por otro lado proporciona los 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 proporciona un buen comienzo si desea pasar por OSGi lane. 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 ...

2

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.

+0

Suena bien, lo intentaré. Aclamaciones. –

Cuestiones relacionadas