Używam OSGi już od jakiegoś czasu i mam różne rozwiązania napotkanych problemów. Chciałem wrócić do jednego z nich i zobaczyć, czy ludzie wymyślili różne rozwiązania.Lepsza obsługa wątku Kontekst ClassLoader w OSGi
Jedną z najczęstszych problemów z OSGi (Equinox 3.4.2) jest częsta niedostępność kontekstu wątku ClassLoader. Wiem, że to po części problem z Equinoxem, ale też spotkałem się z problemem Felixa. Znam to głównie z bibliotekami stron trzecich, które uruchamiają własne wątki lub wątki. Gdy są one uruchamiane podczas aktywacji Paczki lub DS, mogą zakończyć się bez swojej ClassLoader. Jeśli biblioteka innej firmy ma zabezpieczenia przeciwko kontekstowemu brakowi ClassLoader, to nie ma problemu, ale nie każdy to sprawdza. Później, jeśli wspomniana biblioteka będzie wymagać dynamicznego ładowania klasowego, może się ona wysadzić w powietrze.
Idiom, które były używane przez pewien czas jest następujący (w skrócie):
ClassLoader tccl = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
/*
* Start threads, or establish connections, here, now
*/
} finally {
Thread.currentThread().setContextClassLoader(tccl);
}
idiom ten zwykle kończy się w aktywatorze lub DS aktywacji sposobu(). Istnieją pewne drobne odmiany, w których sprawdzam, czy tccl
nie ma wartości null i nie zastępuję programu ładującego klasy context.
Teraz mam trochę kodu przyklejonego w różnych miejscach, gdzie wiem, że jakaś trzecia biblioteka może utworzyć wątek i zrujnować mi dzień. Choć początkowo było to łatwe do opanowania, skończyło się to w wielu przypadkowych miejscach i denerwuje mnie.
Ktoś, kto cierpi na tę chorobę i jakie rozwiązania wymyślił? Chciałbym również dowiedzieć się, czy problem został rozwiązany w nowym Equinox 3.5.x i czy ktokolwiek faktycznie to widział?
Pozdrawiam.
Pierwsza odpowiedź od prawie roku! +1 za to. Ale tak, co zespół Felix poleca, to to, co już robię. Context Finder przybył z Equinox 3.6, więc nie był dostępny w momencie pytania. Jednak próbowałem użyć Wyszukiwarki kontekstów i odkryłem, że nie zawsze działa. – omerkudat
Prawdopodobnie dostałeś od niego znaczek "tumbleweed" :) nie możesz uwierzyć, że nie dostałeś odpowiedzi, ponieważ wydaje się, że jest to typowy problem OSGi ... –