Pregunta

Qué hace que un módulo/servicio/bits de la funcionalidad de la aplicación, particularmente, un buen candidato para un OSGi módulo?

Estoy interesado en el uso de OSGi en mis aplicaciones.Somos una Java de la tienda y utilizamos la Primavera bastante ampliamente, por lo que me estoy inclinando hacia el uso de la La primavera de los Módulos Dinámicos para OSGi(tm) y las Plataformas de Servicio.Estoy buscando una buena manera de incorporar un poco de OSGi en una aplicación como un juicio.Alguien ha usado aquí esta o similar OSGi la tecnología?Hay trampas?

@Nicolas - Gracias, he visto que uno.Es un buen tutorial, pero estoy buscando más ideas sobre cómo hacer mi primer "real" paquete OSGi, frente a un ejemplo de Hello World.

@david - Gracias por el enlace!Idealmente, con una nueva app, me gustaría diseño de todo el asunto de ser dinámico.Lo que estoy buscando ahora, sin embargo, es introducir en una pequeña pieza de una aplicación existente.Suponiendo que puedo coger cualquier pieza de la app, ¿cuáles son algunos de los factores a considerar que haría que la pieza de la mejor o peor como un OSGi conejillo de indias?

¿Fue útil?

Solución

Bueno, ya que usted no puede tener una parte de OSGi y una parte no OSGi usted necesita para hacer su aplicación OSGi.En su forma más simple de hacer un solo paquete OSGi de toda la aplicación.Claramente esta no es una mejor práctica, pero puede ser útil para conseguir una sensación para la implementación de un paquete en un contenedor OSGi (Equinoccio, Félix, Knoplerfish, etc).

Para llevarlo al siguiente nivel, usted querrá comenzar la división de la aplicación en componentes, los componentes que debe tener un conjunto de responsabilidades que pueden ser aislados del resto de la aplicación a través de un conjunto de interfaces y de la clase de dependencias.La identificación de estas puramente a mano puede variar desde bastante sencillo para un bien diseñado altamente cohesivo, pero débilmente acoplados aplicación de una pesadilla para entrelazada código fuente que usted no está familiarizado con.

La ayuda puede venir de herramientas como JDepend que puede mostrar el acoplamiento de los paquetes de Java en contra de otros paquetes y clases en su sistema.Un paquete con baja eferentes acoplamiento debe ser más fácil de extraer en un paquete OSGi que uno con alta eferentes de acoplamiento.Aún más arquitectónico conocimiento puede ser tenido con pro tools como Estructura de 101.

Puramente a nivel técnico, trabajando a diario con una aplicación que consta de 160 paquetes OSGi y usar Spring DM puedo confirmar que la transición de la "normal" de primavera a Primavera de la DM es en gran parte libre de dolor.El extra de espacio de nombres y el hecho de que usted puede (y debe) aislar su OSGi específicos de la Primavera de configuración en archivos separados hace que sea aún más fácil con y sin OSGi escenarios de implementación.

OSGi es una profunda y amplia del modelo de componente, documentación recomiendo:

  • OSGi R4 Especificación:Obtener el Pdf del Núcleo y el Compendio de la especificación, que son canónicos, autoritario y muy legible.Tiene un acceso directo a ellos de la mano en todo momento, usted consultar con ellos.
  • Leer sobre OSGi las mejores prácticas, hay un gran conjunto de cosas que puede ¿pero un poco más pequeño conjunto de cosas que usted debe ¿y hay algunas cosas que usted debe nunca hacer (DynamicImport:* por ejemplo).

Algunos enlaces:

Otros consejos

Cuando el aprendizaje de una nueva tecnología rico utillaje que se mete en cosas sin grandes dolores de cabeza.En este punto, la comunidad en ops4j.org proporciona un rico conjunto de herramientas de la llamada "PAX", que incluye:

  • Pax Corredor:Ejecutar y cambiar entre Félix, Equinoccio, Knopflerfish de Conserjería y fácilmente
  • Pax Construir:Construir, Organizar y Construir OSGi proyectos con maven fácilmente
  • Pax Drone:Prueba de su bundles OSGi con Junit, mientras que siendo marco independiente (usa PaxRunner)

A continuación, hay muchas implementaciones de OSGi compendio servicios:

  • Pax Registro (registro),
  • Pax Web (servicio http),
  • Pax Web Extender de la guerra (de apoyo),
  • Pax Moneda (configuración),
  • Pax Shell (shell de ejecución, parte de la siguiente osgi liberación)
  • y mucho más.

..y hay un útil, marco independiente de la comunidad, - pero eso es ahora la publicidad ;-)

Esta respuesta llega casi 3 años después de la pregunta, pero la enlace Acabo de encontrar es muy bueno, especialmente para los principiantes usando maven.Un paso a paso de la explicación.

Es la aplicación existente monolítico o niveles en separar los procesos/capas?

Si los niveles, usted puede convertir el medio/app-tier para que se ejecute en un contenedor OSGi.

En mi experiencia del equipo, hemos encontrado tratando de hacer cosas en OSGi doloroso.Otros puntos de dolor son Hibernate y Jakarta Commons Logging.

Me parece la OSGi especificaciones bastante legible y yo recomendamos imprimir el diagrama de flujo que muestra el algoritmo para la carga de clases.Te garantizo que tendrás momentos de, "¿por qué tengo una NoClassDefFoundError?":el diagrama de flujo diré por qué.

Trate de http://neilbartlett.name/blog/osgibook/.El libro tiene las manos en los ejemplos con OSGi las mejores prácticas.

Trate de http://njbartlett.name/files/osgibook_preview_20091217.pdf

O

http://www.manning.com/hall/

El segundo no es un libro que he leído yo, pero he oído cosas buenas sobre él.

La primera fue muy útil para mí.Él te lleva a través de la arquitectura, inicialmente, y luego las manos en OSGi.

Hay un par de cosas de las que debes tener en cuenta si usted está comenzando con OSGi.

Como se mencionó en otra parte de este hilo, el saber acerca de classloading es realmente importante.En mi experiencia a todo el mundo tarde o temprano se topa con problemas con ella.

Otra cosa importante a recordar es:nunca sostenga referencias!Eche un vistazo a la pizarra patrón en el que el concepto de servicios de OSGi es construir (ver el enlace en una de las otras respuestas).

En mi experiencia, usted debe tratar de no convertir un monolitic aplicación en un OSGi basado en uno.Esto generalmente lleva a un mal y es difícil de manejar lío.Empezar de nuevo.

Descarga uno de los disponibles libremente independiente OSGi implementaciones.He encontrado Knopflerfish bastante buena y estable (yo lo uso en muchos de los proyectos).También viene con un montón de código fuente.Usted puede encontrar aquí: http://www.knopflerfish.org

Otro buen tutorial se puede encontrar aquí. https://pro40.abac.com/deanhiller/cgi-bin/moin.cgi/OsgiTutorial

Pedro Kriens de la OSGi Alliance dio una buena entrevista: http://www.infoq.com/interviews/osgi-peter-kriens.Su página web y blog (que es siempre una buena lectura puede ser encontrado aquí: http://www.aqute.biz

Me gusta mucho el Apache Felix tutoriales.Sin embargo, creo que en general el aprovechamiento de OSGi en su aplicación no es uno de esos "vamos a utilizar este marco, porque es una exageración" de la decisión.Se trata más de una cuestión de diseño, pero luego todo lo que OSGi da en términos de diseño, usted puede tener con la vainilla Java así.

Como para el tiempo de ejecución, sólo se puede añadir una aplicación existente y hacer OSGi habilitado.Debe ser que el diseño sea dinámico.La primavera DM hace que sea fácil de ocultar que el de usted, pero sigue allí y usted necesita estar consciente de ello.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top