java - org - eclipse equinox download
Mejor manejo de Thread Context ClassLoader en OSGi (1)
Buena pregunta, hemos estado haciendo el mismo trabajo alrededor (en Felix / Karaf / Servicemix4.2) y hemos estado buscando una mejor solución. Aquí está la respuesta que recibí del equipo de Félix ...
Esencialmente, dicen que no hay una mejor solución en este momento.
Sin embargo, sí veo que Equinox hace referencia a otras opciones, incluidas las "Políticas de amigos" y el uso de un "Buscador de contexto" aquí ...
http://wiki.eclipse.org/Context_Class_Loader_Enhancements
Si alguien conoce otras opciones o incluso una hoja de ruta para resolver esto en el futuro, háganoslo saber ...
He estado usando OSGi por un tiempo y tengo varias soluciones a los problemas que encontré. Quería volver a visitar uno de estos y ver si las personas habían encontrado diferentes soluciones.
Uno de los problemas más comunes que tengo con OSGi (Equinox 3.4.2) es la falta de disponibilidad frecuente del contexto ClassLoader del Thread. Sé que esto es en parte un problema de Equinox, pero también me he encontrado con el problema de Felix. Encuentro esto principalmente con bibliotecas de terceros que inician sus propios Threads o ThreadPools. Cuando se inician durante la activación del paquete o DS, pueden terminar sin su ClassLoader. Si la biblioteca de terceros tiene guardas contra la falta del contexto de ClassLoader, entonces no hay problema, pero no todos lo verifican. Más tarde, si dicha biblioteca necesita realizar una carga dinámica de clases, podría explotar.
El idioma que he estado usando por un tiempo es el siguiente (brevemente):
ClassLoader tccl = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
/*
* Start threads, or establish connections, here, now
*/
} finally {
Thread.currentThread().setContextClassLoader(tccl);
}
Este idioma generalmente termina en el activador o el método de activación () de DS. Hay algunas variaciones menores en las que sí tccl
si tccl
no es nulo y no anulo el cargador de clases de contexto.
Ahora, tengo un poco de este código pegado en varios lugares donde sé que una biblioteca de terceros puede generar un Hilo y arruinar mi día. Si bien fue manejable al principio, terminé teniendo esto en muchos lugares al azar y eso me molesta.
¿Alguien más sufre de este problema y qué soluciones han encontrado? También me gustaría tener una idea de si este problema se resuelve en el nuevo Equinox 3.5.x, y si alguien realmente lo ha visto funcionar.
Saludos.