java module osgi jigsaw

java - ¿Por qué Sun está inventando otro sistema de módulos cuando todos han estandarizado en OSGi?



module jigsaw (5)

Citando http://blogs.oracle.com/mr/entry/jigsaw :

Sin embargo, OSGi no está en absoluto integrado con el lenguaje Java, ya que se ha creado sobre la plataforma Java SE en lugar de hacerlo desde dentro.

Este último problema puede ser resuelto. Sun planea ahora trabajar directamente con OSGi Alliance para que una futura versión de OSGi Framework pueda aprovechar al máximo las características de JSR 294 y, de ese modo, lograr una mayor integración con el idioma.

(...)

Si y cuando una versión futura de la Plataforma Java SE incluya un sistema de módulo específico, Sun proporcionará un medio para migrar módulos de Jigsaw hasta ese estándar. Mientras tanto, buscaremos activamente formas de interoperar con otros sistemas de módulos, y en particular con OSGi.

Sun está poniendo mucho esfuerzo en modularizar el JDK en forma de Jigsaw , e insinuando que debe ser el formato de módulo elegido por otros desarrolladores de Java también. El único jugador notable que usa esto es NetBeans (y aplicaciones derivadas).

Por otro lado, la industria se ha estandarizado alrededor de OSGi, con todos los proveedores de aplicaciones principales que basan sus tiempos de ejecución en la plataforma del módulo, incluso el propio Glassfish de Sun. Incluso hay un puerto de NetBeans para usar OSGi como el sistema de módulos en lugar de los módulos propios de NetBeans. Incluso Maven está trabajando para convertirse en un runtime OSGi.

¿Es solo NIH, licencias u otra razón?



La justificación del proyecto Jigsaw y su relación con OSGi fue descrita por el equipo de Jigsaw en Java Posse Podcast 259 .

Estos proyectos no se superponen completamente y la introducción de Jigsaw no suena a muerte para OSGi: el alcance de OSGi va más allá de lo que Jigsaw intentará. Hay mucho más para Jigsaw de lo que el equipo OSGi está en condiciones de proporcionar (cambios de implementación de lenguaje, clase y JVM). El diseño de OSGi se basa en el diseño actual de la JVM: los cambios en la JVM beneficiarán a todos.

Al menos, esa es mi opinión de lo que he leído .


Una característica falta en OSGi . No admite módulos que sean subconjuntos de paquetes . La exportación se realiza en el nivel de paquete .

Los módulos de subconjunto de paquetes son la única manera de cortar el nudo gordiano de dependencias JDK. Y una buena sugerencia de por qué debe mantener su código limpio de dependencias circulares .

Sin embargo, a lo largo de los años, este estilo de desarrollo puede llevar a conexiones inesperadas entre las API, y entre sus implementaciones, lo que a su vez conlleva un aumento del tiempo de inicio y la huella de memoria. Un programa trivial de la línea de comandos "¡Hola, mundo!", Por ejemplo, ahora carga e inicializa más de 300 clases separadas, tomando alrededor de 100 ms en una máquina de escritorio reciente a pesar de los esfuerzos de ingeniería más heroicos como el intercambio de datos de clase. La situación es aún peor, por supuesto, para aplicaciones más grandes.

Edit: estaba equivocado OSGi soporta paquetes divididos .


Excelente pregunta. Mi entendimiento es que en algunas áreas, OSGi va más allá de lo que es necesario para los módulos JVM (con toda la complejidad correspondiente que conlleva), mientras que en otras áreas no es suficiente. Así que hay mucha superposición entre ellos, pero tal vez no lo suficiente.

Ver esta entrada de blog.