He estado usando OSGi por un tiempo y tengo varias soluciones a los problemas que he encontrado. Quería volver a visitar uno de estos y ver si las personas habían encontrado diferentes soluciones.Mejor manejo de Thread Context ClassLoader en OSGi
Uno de los problemas más comunes que tengo con OSGi (Equinox 3.4.2) es la indisponibilidad frecuente del ClassLoader de contexto del Thread. Sé que esto es en parte un problema de Equinox, pero también he encontrado el problema con Félix. Encuentro esto principalmente con bibliotecas de terceros que inician sus propios Threads o ThreadPools. Cuando se inician durante la activación de Bundle o DS, pueden terminar sin su ClassLoader. Si la biblioteca de terceros tiene guardias contra el contexto que falta ClassLoader, entonces no hay problema, pero no todos lo verifican. Más tarde, si dicha biblioteca necesita hacer una carga dinámica de clases, podría explotar.
El idioma He estado usando durante un tiempo es la 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 general termina en el activador o los DS activar método(). Hay algunas variaciones menores donde compruebo si tccl
no es nulo y no anulo el cargador de clases de contexto.
Ahora, tengo un código enyesado en varios lugares donde sé que una biblioteca de terceros podría engendrar un hilo y arruinar mi día. Si bien fue manejable al principio, he terminado teniendo esto en muchos lugares al azar y me está molestando.
¿Alguien más está sufriendo este problema y qué soluciones han ideado? También me gustaría tener una idea de si este problema está resuelto en el nuevo Equinox 3.5.x, y si alguien realmente lo ha visto funcionar.
Atentamente.
¡Primera respuesta en casi un año! +1 por eso. Pero sí, lo que el equipo de Felix recomienda es lo que ya estoy haciendo. El Context Finder llegó con Equinox 3.6, por lo que no estaba disponible en el momento de la pregunta. Sin embargo, traté de usar Context Finder y descubrí que no siempre funciona. – omerkudat
es probable que tenga al menos la insignia "tumbleweed" :) no puedo creer que no haya recibido ninguna respuesta, ya que parece ser un problema OSGi común ... –