2010-07-13 11 views
8

Me gustaría descubrir todas las implementaciones de una interfaz durante el tiempo de ejecución en una aplicación Java, y cargar esas clases dinámicamente desde archivos JAR que el usuario puede agregar a una carpeta. Es un sistema de plug-in, básicamente.Framework de detección de servicios Java simple

He encontrado algunas soluciones para esto:

  • Uso SPI - esto no es muy flexible: Me gustaría algo que a lo mejor funciona con anotaciones, o simplemente busca una interfaz que se extiende, sin tener que agregar archivos de texto externos, también.
  • Uso Commons Discovery - se parece a un callejón sin salida, ya que la última versión es de 0,4 en 2005 a partir
  • Uso Java Simple Plugin Framework. 5 minutes and it works. No XML. - esto parece muy inmaduro.

¿Hay alguna otra solución ampliamente utilizada para esto?

Actualización: No hay necesidad de separar el código, y OSGi parece ser demasiado complejo para mis simples necesidades en este momento. También agregué "Simple" al título de esta pregunta para aclarar mis intenciones.

+0

OSGi puede resolver problemas como este y, además, proporciona formas de mantener los módulos separados, lo que será importante si tiene complementos que tienen dependencias en otras bibliotecas. – Jesper

Respuesta

4

Es un poco pesado, pero debes considerar Apache Felix o Eclipse Equinox, ambas son implementaciones de OSGi que están muy vivas y pateadas, pero posiblemente demasiado para tus necesidades. Sin embargo, este es uno de los problemas que OSGi está diseñado para resolver.

0

Al igual que @skaffman dijo, OSGi y las implementaciones modernas basadas parece una solución perfecta. Si estás en el carro de la guía, ten en cuenta iPOJO, que incorpora perfectamente anotaciones en la pila OSGi (ten en cuenta que iPOJO funciona en cualquier plataforma OSGi). Si estás más en el carro de XML/Spring, considera usar Blueprint.

Finalmente, teniendo en cuenta JSPF, no compartiré su opinión sobre su inmadurez. Después de haber colaborado un poco en ese proyecto, me parece realmente útil en su campo, ya que permite el uso fácil de complementos, sin la molestia y la separación de classpath que proporciona OSGi.

+0

podría publicar un enlace a un ejemplo simple de JSPF? Estoy tratando de usar ese marco, pero realmente no puedo entender cómo funciona la función Opciones. – capovawi

0

+1 SPI - es liviano, un poco de mantenimiento (los servicios/* archivos de texto) pero la forma en que los cargadores de clases de Java trabajan cualquier "autodescubrimiento" no será 100% confiable; puede reducir la molestia de los archivos de texto con un programa simple que para un proyecto/directorio dado genera y/o (yo recomiendo) pruebas de que todas las implementaciones están incluidas

+2 OSGi - si usted está dispuesto a ir welter, y tenga en cuenta las implementaciones son cada vez más ligero y más fácil (por lo menos algunos de ellos!)

1

Usted podría intentar el descubrimiento de servicios de río Apache (anteriormente Jini)

http://river.apache.org/

descubre los servicios de una Interfaz remota y descarga el proxy por usted, que es, por lo general, un talón de RMI.

Cuestiones relacionadas