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?

¿Fue útil?

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.

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