2010-03-16 10 views
5

He leído que OSGI utiliza cargadores de clases separados por módulo que permite a los módulos usar diferentes versiones de sus dependencias ... mientras que al mismo tiempo ejecuta todos los módulos en la misma JVM.¿Cómo usar cargadores de clases separados y ejecutar en la misma JVM? (OSGI)

¿Cómo funciona esto? Si el módulo A utiliza la versión n. ° 1 de una dependencia y el módulo B utiliza la versión n. ° 2, ¿no tendrá problemas si el módulo A pasa una instancia de la clase de dependencia al módulo B como parámetro de método?

Creo que el módulo B se ahogaría si estuviera esperando una interfaz diferente a la clase de dependencia.

Respuesta

5

Tiene razón en que las dependencias inconsistentes pueden causar problemas. OSGi evita esto al calcular el cierre transitivo de estas dependencias y asegurarse de que no haya ninguna en el momento de la resolución.

Esto le permite exponer una dependencia pública mientras tiene dependencias privadas internas/ocultas y, como resultado, esconder sus dependencias de implementación para evitar esto. Lo bueno es que todo se comprueba en el tiempo de resolución de Bundle en lugar de en oscuros errores de tiempo de ejecución.

Específicamente en su ejemplo, si A y B usan una interfaz incompatible, y A depende de B, entonces A no podrá resolver con un error de dependencia. Por lo tanto, ni siquiera podrá comenzar a pasarlo de un tipo incompatible.

Cuestiones relacionadas