OSGi, Java Modularity y Jigsaw


95

Así que hasta ayer por la mañana no tenía ni idea de qué era OSGi. OSGi era solo una palabra de moda que seguía viendo surgir una y otra vez, por lo que finalmente dejé un tiempo para repasarlo.

En realidad, parece algo bastante interesante, así que me gustaría comenzar diciendo (para que conste) que no soy anti-OSGi en ningún aspecto, ni que esta es una pregunta de "ataque a OSGi".

Al final del día, parece que OSGi ha abordado, esencialmente, JSR 277 en Java Modularity, que reconoció que hay deficiencias con la JARespecificación del archivo que pueden conducir a la resolución del espacio de nombres y problemas de carga de clases en ciertos casos extremos. OSGi también hace muchas otras cosas realmente interesantes, pero por lo que puedo asegurar, ese es su mayor atractivo (o uno de ellos).

Para mí, como desarrollador Java EE relativamente nuevo (hace unos años), es absolutamente alucinante que estemos en el año 2011 y que actualmente vivamos en la era de Java 7, y que estos problemas de carga de clases sigan presentes; particularmente en entornos empresariales donde un servidor de aplicaciones podría tener cientos de JAR, muchos de ellos dependiendo de diferentes versiones entre sí y todos ejecutándose (más o menos) al mismo tiempo.

Mi pregunta:

Por más interesado que esté en OSGi, y por mucho que quiera comenzar a aprender sobre él para ver dónde / si podría ser útil para mis proyectos, simplemente no tengo tiempo para sentarme y aprender algo tan grande, al menos ahora.

Entonces, ¿qué deben hacer los desarrolladores que no son OSGi cuando surgen estos problemas? ¿Qué soluciones Java (Oracle / Sun / JCP) existen actualmente, si las hay? ¿Por qué se cortó Jigsaw de J7? ¿Qué tan segura está la comunidad de que Jigsaw se implementará el próximo año en J8? ¿Es posible obtener Jigsaw para su proyecto aunque aún no forme parte de la plataforma Java?

Supongo que lo que pregunto aquí es una combinación de pánico, intriga y palmas. Ahora que finalmente entiendo qué es OSGi, simplemente no "entiendo" cómo algo como Jigsaw ha tardado más de 20 años en materializarse, y luego cómo podría haberse enlatado a partir de un lanzamiento. Simplemente parece fundamental.

Y, como desarrollador, también tengo curiosidad por saber cuáles son mis soluciones, sin OSGi.

Además, Nota : sé que esta no es una pregunta de tipo " programación pura ", pero antes de que algunos de ustedes pierdan la forma, quería decir (nuevamente, para que conste) que deliberadamente planteé esta pregunta ENTONCES. Eso es porque no tengo nada más que el mayor respeto por mis compañeros SOers y estoy buscando una respuesta a nivel arquitectónico de algunos de los "dioses de la TI" que veo acechando por aquí todos los días.

Pero, para aquellos de ustedes que insisten absolutamente en que una pregunta SO esté respaldada con algún segmento de código:

int x = 9;

(¡Gracias a cualquiera que pueda opinar sobre este OSGi / Jigsaw / classloader / namespace / JAR hell cosas!)


Bueno, Java 9 está aquí desde ayer, con Jigsaw. Es bueno leer: Los 10 principales conceptos erróneos de Jigsaw y Java 9 desacreditados
David Tonhofer

Respuestas:


100

Primero, comprenda que el caso de uso principal de Jigsaw es modularizar el propio JRE. Como objetivo secundario, ofrecerá un sistema de módulos que pueden utilizar otras bibliotecas y aplicaciones de Java.

Mi posición es que algo como Jigsaw probablemente sea necesario solo para JRE, pero creará muchos más problemas de los que pretende resolver si lo usan otras bibliotecas o aplicaciones de Java.

El JRE es un caso muy difícil y especial. Tiene más de 12 años y es un desastre espantoso, plagado de ciclos de dependencia y dependencias sin sentido. Al mismo tiempo, lo utilizan aproximadamente 9 millones de desarrolladores y probablemente miles de millones de sistemas en ejecución. Por lo tanto, absolutamente no puede refactorizar el JRE si esa refactorización crea cambios importantes.

OSGi es un sistema de módulos que le ayuda (o incluso le obliga a) crear software modular. No puede simplemente esparcir modularidad sobre una base de código no modular existente. Convertir una base de código no modular en una modular inevitablemente requiere cierta refactorización: mover las clases al paquete correcto, reemplazar la instanciación directa con el uso de servicios desacoplados, etc.

Esto hace que sea difícil aplicar OSGi directamente al código base de JRE, sin embargo, todavía tenemos el requisito de dividir el JRE en partes separadas o "módulos" para que se puedan entregar versiones reducidas del JRE.

Por lo tanto, considero a Jigsaw como una especie de " medida extrema " para mantener vivo el código JRE mientras se divide. Lo hace sin código de ayuda para ser más modular, y estoy convencido de que va a aumentar el mantenimiento requerido para desarrollar cualquier biblioteca o aplicación que lo utiliza.

Finalmente: OSGi existe mientras que Jigsaw aún no existe y puede que nunca exista. La comunidad OSGi tiene 12 años de experiencia en el desarrollo de aplicaciones modulares. Si está realmente interesado en desarrollar aplicaciones modulares, OSGi es el único juego disponible.


¿Eres tú también? slideshare.net/mfrancis/… casi el mismo contenido.
Jin Kwon

También hay módulos JBoss: docs.jboss.org/author/display/MODULES/Introduction También es utilizado por Ceylon (ceylonlang.org). Vea este hilo en el foro de usuarios de Ceilán: groups.google.com/forum/?hl=de#!topic/ceylon-users/RmDskLDNkug
OlliP

¿ Sigue vigente la afirmación final: "Si está realmente interesado en desarrollar aplicaciones modulares, OSGi es el único juego disponible" ?
Adam Arold

1
@AdamArold Creo que sí. Jigsaw todavía no existe en ninguna versión publicada de Java. JSR 376 (Java Platform Module System) todavía está formando su grupo de expertos y aún no ha comenzado con un primer borrador. Java 9 no vence por más de un año, e incluso cuando se lanza no se garantiza que tenga modularidad (se deslizó de Java 7, luego de Java 8, y podría volver a deslizarse fácilmente). Finalmente, los requisitos publicados para JSR376 establecen que se requiere la interoperabilidad OSGi ... por lo que la adopción de OSGi sigue siendo una opción segura y, en la actualidad, la única opción práctica.
Neil Bartlett

2
@AdamArold ¡Está bien, esa es una pregunta un poco diferente! Se podría decir que OSGi es una arquitectura de microservicios, pero sé lo que está diciendo. Para mí, la idea de modelar cada servicio como un proceso es un problema mucho más complejo, en términos de administración, seguridad y gastos generales de comunicaciones. OSGi es más simple y rápido. Habiendo dicho eso, es muy fácil usar OSGi Remote Services para realizar la transición de servicios dentro y fuera de la barrera del proceso, por lo que creo que es una buena opción para una tecnología de implementación para microservicios.
Neil Bartlett

21

Es simple, si desea hacer un desarrollo real basado en componentes en Java hoy, OSGi es el único juego en la ciudad.

En mi opinión, Jigsaw es una combinación de un compromiso de lo que es factible en el JDK y la mala relación anterior entre SUN y los chicos de OSGi. Tal vez se envíe con Java 8, pero tenemos que esperar y ver.

OSGi no es una panacea si está trabajando en un entorno empresarial típico y necesitará familiarizarse con el funcionamiento de la carga de clases, ya que varias bibliotecas conocidas (mirándolo a usted, Hibernate) hicieron suposiciones sobre la visibilidad de clases que ya no son válidas. dentro de OSGi.

Me gusta OSGi, pero no intentaría adaptarlo a un sistema existente. También sopesaría los pros y los contras en términos de desarrollo greenfield: recomendaría mirar los productos Apache o Eclipse que simplifican la vida de OSGi y no hacerlo todo usted mismo.

Si no está utilizando OSGi, entonces no tendrá suerte si ha creado un sistema que tiene dependencias en diferentes versiones de la misma biblioteca; todo lo que puede hacer es intentar evitar el problema, aunque necesita varias versiones de un La biblioteca me parece un "olor" a arquitectura.


Sí, pensé que había mucha "mala sangre" entre Sun y la OSGi Alliance. Sin embargo, no puedo imaginar que Oracle vaya a dejar que las cosas se salgan de su control. ¿Realmente me estás diciendo que no hay planes para remediar realmente (no piratear) este asunto del infierno JAR en el corto plazo? ¡Eso me sorprende!
IAmYourFaja

6
@Mara No es justo decir que hay mala sangre. Después de todo, Sun fue uno de los co-creadores de OSGi hace unos 12 años (JSR 8). Sun también se reincorporó a OSGi Alliance como miembro de pleno derecho, aproximadamente un año antes de la adquisición de Oracle. También desarrollaron bastante software sobre OSGi, antes de Oracle. El ejemplo más obvio es Glassfish. Sin embargo, es justo decir que hay fricciones entre ciertas personas en Sun / Oracle y OSGi.
Neil Bartlett

15

Me encanta su uso de la frase "casos de esquina" para describir la situación actual.

hay deficiencias con la especificación del archivo JAR que pueden conducir a problemas de resolución de espacio de nombres y carga de clases en ciertos casos extremos

De todos modos, desde hace muchos años me interesan las herramientas y técnicas que apoyan la creación y, mejor aún, el cumplimiento de un código más limpio, más desacoplado, más coherente y más fácil de mantener de lo que probablemente hubiera sido el resultado sin ellas. Test Driven Design y Junit fue una combinación de este tipo.

Después de haber pasado un par de meses moviendo una parte sustancial de nuestra base de código a OSGi, diría que OSGi es una herramienta aún mejor en este sentido. Y esa es realmente una razón suficiente para pasar a OSGi. A la larga, le ahorrará mucho dinero.

Y, como beneficio adicional, te dará la oportunidad de hacer muchas cosas interesantes. Imagine, durante una demostración, actualizar sin problemas el módulo de autenticación, sin pérdida de tráfico, para admitir OAuth ... ¡de repente es un placer volver a crear cosas!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.