Como llegar cargador de clases para un bulto en el equinoccio?
-
19-09-2019 - |
Pregunta
He leído un montón de código equinoccio para esto, pero todavía no puedo encontrar una manera no hacky de conseguir el cargador de clases para un paquete OSGi en la configuración del equinoccio de eclipse. ¿Hay una?
Solución
La respuesta corta (sin duda para OSGi 4.1, no está seguro de 4,2) es que no se puede conseguir cargador de clases de un paquete. Sin embargo, la interfaz de Bundle
expone un método loadClass()
y esto permitirá escribir un cargador de clases que envuelve la API de paquete y los delegados a ese método loadClass()
. O bien, puede ahorrar algo de tiempo y utilizar la clase BundleDelegatingClassLoader
de primavera DM en su lugar.
Otros consejos
En OSGi 4.3 se puede utilizar:
bundle.adapt(BundleWiring.class).getClassLoader()
El cargador de clases de un paquete se puede obtener a través de la interfaz de BundleWiring. Aquí un pequeño ejemplo:
Bundle bundle = bundleContext.getBundle();
BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
ClassLoader classLoader = bundleWiring.getClassLoader();
En el código de Java normal, se puede obtener el cargador de clases que carga un objeto dado, con
object.getClass().getClassLoader();
O incluso
SomeType.class.getClassLoader();
Lo mismo se aplica a Equinox, sólo tiene que utilizar un objeto o escriba que viene del paquete le interesa.