지금 당분간 OSGi를 사용하고 있으며 발생한 문제에 대한 다양한 해결책을 가지고 있습니다. 나는이 중 하나를 다시보고 사람들이 다른 해결책을 찾았는지보기를 원했다.OSGi의 스레드 컨텍스트 ClassLoader 처리 개선
내가 OSGi (Equinox 3.4.2)에서 가지고있는 가장 일반적인 문제 중 하나는 스레드의 컨텍스트 ClassLoader를 자주 사용할 수 없다는 것입니다. 이 부분적으로 춘분 문제이지만, 필릭스와도 문제가 있습니다. 나는 주로 자신의 쓰레드 (Threads) 또는 쓰레드 풀 (ThreadPools)을 시작하는 써드 파티 라이브러리와이를 만난다. 이러한 번들 또는 DS 활성화 중에 시작되면 ClassLoader없이 종료 될 수 있습니다. 타사 라이브러리에 문맥 ClassLoader가없는 것에 대한 경비원이있는 경우 문제는 없지만 모든 사람이 확인하지는 않습니다. 나중에 해당 라이브러리가 동적 클래스 로딩을 수행해야하는 경우 파열 될 수 있습니다.
가ClassLoader tccl = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
/*
* Start threads, or establish connections, here, now
*/
} finally {
Thread.currentThread().setContextClassLoader(tccl);
}
이 관용구 보통 활성제의 끝 또는 DS() 메소드를 활성화 :
I 잠시 동안 사용 된 관용구는 다음 (짧게)이다. tccl
이 null이 아니고 컨텍스트 클래스 로더를 재정의하지 않는지 확인하는 경우에는 약간의 변형이 있습니다.
이제 제 3 자 라이브러리가 스레드를 생성하고 내 하루를 망칠 수도 있다는 것을 알고있는 여러 장소에이 코드를 붙여 놓았습니다. 처음에는 관리가 가능했지만 많은 무작위 장소에서이 작업을 마쳤습니다.
이 문제로 고통받는 사람은 누구이며 어떤 해결책이 있습니까? 또한 새로운 Equinox 3.5.x에서이 문제가 해결되었는지 여부와 실제로 작동하는지 여부를 알고 싶습니다.
감사합니다.
거의 1 년 만에 첫 번째 답변! +1. 그러나 예, 펠릭스 팀이 권장하는 것은 제가 이미하고있는 것입니다. Context Finder는 Equinox 3.6과 함께 도착 했으므로 질문 당시에는 사용할 수 없었습니다. 그러나 Context Finder를 사용하려고 시도했지만 항상 제대로 작동하지 않는다는 사실을 발견했습니다. – omerkudat
당신은 아마 "tumbleweed"배지를 가지고 있습니다. 보통 OSGi 문제 인 것 같습니다. –