2011-02-07 16 views
12

Estoy desarrollando una aplicación de búsqueda semántica en java. Para hacer que la aplicación sea modular, pensé usar la arquitectura osgi. Pero como soy nuevo en Osgi, no tengo idea de los pros y los contras de usarlo. ¿Puede alguien explicar las ventajas/desventajas del uso de osgi y qué tipo de aplicación se verá beneficiada con el uso de osgi/qué obtendrá la aplicación al hacerlo?usando osgi para desarrollar una aplicación

¡Gracias!

Respuesta

23

En pocas palabras, OSGi es un estándar utilizado para crear aplicaciones modulares. Agrega un nuevo nivel de modularidad: paquetes (también conocidos como componentes, módulos). Cada paquete contiene clases e interfaces y lo que es más importante que debe explícitamente Estado:

  • , que otros componentes o paquetes Java que utiliza,
  • y qué paquetes se quiere exponer a ser utilizado por otros componentes.

Desde el punto de vista técnico, los paquetes son archivos jar que tienen un archivo META-INF/MANIFEST.MF poco extendido. Toda la información mencionada anteriormente se almacena en el archivo MANIFEST.MF.

Desde el punto de vista práctico, esta explicitud tiene ventajas y desventajas. Para mí, la mayor ventaja es que se ven obligados a pensar en su arquitectura, módulos e interacción entre ellos más que en las aplicaciones estándar. Esto puede crear una mejor arquitectura donde cada módulo es responsable de tareas bien definidas y los módulos pueden ser reutilizados. Si se trata de desventajas, la creación de muchos módulos puede ser dolorosa a veces. Es bastante fácil tener muchos módulos y si realmente tienes muchos, puede ser difícil mantener todas las dependencias entre los módulos (los ciclos de dependencia son bastante dolorosos).

OSGi no es solo un estándar de construcción de aplicaciones modulares. También especifica el entorno en el que existen paquetes y se ejecutan. Esto es algo que debe tener en cuenta: al usar OSGi, debe iniciar su aplicación en un entorno especial. Este entorno (por ejemplo, Eclipse Equinox) es responsable de ejecutar su aplicación. Proporciona algunas posibilidades de lujo. Por ejemplo, puede agregar un paquete a la aplicación en ejecución sin necesidad de detener esta aplicación; este puede ser un elemento realmente importante en algunos tipos de aplicaciones (pero en mi humilde opinión no hay muchas aplicaciones que realmente lo necesiten).

Lo que es realmente importante también es un hecho que algunas librerías de código abierto pueden no ser totalmente compatibles con la infraestructura OSGi y puede ser difícil utilizarlas como en aplicaciones Java estándar (recuerde que en OSGi todo debería ser un paquete). Sin embargo, muchas bibliotecas populares se incluyeron en paquetes, por ejemplo, Spring proporciona su bundles repository que contiene muchas bibliotecas populares (pero no todas).

OSGi es bastante complicado y es difícil describirlo y sus posibilidades en pocas palabras.Lo que escribí son solo los elementos más importantes (OMI) de OSGi. Pero OSGI es mucho más, p. los paquetes pueden enviarse eventos entre ellos, pueden brindarse servicios entre ellos. Si está interesado en más detalles, le sugiero que vaya a través de un tutorial. Puedo recomendar this one in Java World. Después de eso, puede echarle un vistazo al this free e-book sobre OSGi (contiene muchos detalles). Puede encontrar todos los detalles sobre OSGi en las especificaciones oficiales, pero no diría que son fáciles de leer (al menos al principio). Puede encontrarlos en here (antes de descargarlos deberá aceptar la licencia y algunos avisos legales) .

Para resumir Creo que OSGi es útil al construir aplicaciones modulares, pero de seguro no es gratis. Es un estándar bastante pesado que puede prohibirle hacer algunas cosas y obligarlo a hacer las cosas la forma OSGi.

Algunos relacionados SO preguntas:

+0

Muchas gracias por su respuesta detallada :) – Izza

+0

ahora con la llegada de Microservices, ¿qué tan diferentes o mejores son los microservicios en comparación con OSGi? – yathirigan

1

Tendrá que escribir un libro para responder correctamente a esa pregunta. De hecho, muchos libros se han escrito sobre el tema. Si realmente quieres aprender sobre OSGi, te recomiendo buscar tal libro.

OSGi es un marco modular de Java. No tiene ninguna competencia creíble en este dominio. Cualquier aplicación puede beneficiarse de ser más modular, pero la modularidad no es gratuita. Es más fácil lanzar todo en un cargador de clases gigante y no pensar demasiado acerca de las relaciones de sus componentes. Si decide probar OSGi, las excelentes herramientas PDE que forman parte de Eclipse son compatibles con el desarrollo OSGi no orientado a Eclipse y hace que sea mucho más fácil trabajar con OSGi.

1

Mi opinión personal es que OSGi trae más dolor que beneficio. Si realmente necesita una aplicación que pueda conectarse, puede comenzar a usar OSGi, pero necesita escribir el código de una manera que se pueda conectar, lo que no es simple en absoluto (incluso cuando instala un complemento en eclipse recomienda reiniciar el eclipse, no tengo idea de por qué usa OSGi)

Desarrollé dos proyectos en el trabajo usando OSGi, es muy lento al comienzo del proyecto porque necesita envolver muchas bibliotecas públicas y no todas ellas son posibles de envolver, porque puede encontrar un ClassNotDefoundError en tiempo de ejecución debido a problemas con el cargador de clases cuando trabaja con objetos proxy.

Toda la modularidad que tenemos en los proyectos que usan OSGi se puede lograr usando solo maven, cuando se trabaja con OSGi nadie lo obliga a escribir muchos paquetes de grano fino, si lo desea, puede escribir la aplicación de agujeros en un gran haz.

Si hablamos de perder el acoplamiento entre los componentes, se puede lograr utilizando el auto-cableado de spring-core o google-guice dependency injection framework.

3

Mi experiencia personal (2 años) con OSGI es que la factura técnica supera los beneficios funcionales en órdenes de magnitud.

He encontrado casos donde tendrías que crear/editar más de 25 archivos pom para implementar un simulacro de un liner!
El diseño juega un papel importante, pero me parece preocupante que los desarrolladores se vuelvan expertos en temas (como maven) que no tienen impacto en el valor para el cliente.
Además, este enfoque no se adapta bien a Agile. De hecho, sería una gran opción para ... Waterfall
Todo se trata de su enfoque principal en mi humilde opinión. Entregas frente a patrones de construcción.

Para abreviar, OSGI no es malo, pero es no es la mejor opción para equipos pequeños y tiempo de comercialización rápido.

Cuestiones relacionadas