2009-10-30 5 views
2

OSGi로 변환하려고하는 프로젝트가 있습니다. 그러나이 프로젝트는 Guice를 통해 종속성 주입 관리자로 구축되었습니다. Guice가 처음부터 끝까지 엮은 대규모 프로젝트입니다. Guice는 전환 과정에 많은 도움을주었습니다. 구체적으로 com.google.inject.internal.cglib.reflect.FastClass에 NoClassDefFoundError가 주어졌습니다. 나는 아무것도 package-private이 아니며 guice-2.0-customloader.jar도 다운로드하여 사용했다. 아직도, 아무 소용이 없습니다.Guice with OSGi 사용

이 경로를 따라 간 사람의 조언이 있습니까? Peaberry를 사용하여 OSGi 환경 (플러그인 유형 아키텍처 용)에서 동적 서비스를 얻고 나중에이 프로그램에서 사용한다는 점을 언급 할 필요가 있습니다.

고마워, 나는 패키지 개인에 대한 귀하의 의견을 믿고있어 스티브

+0

OSGi 런타임을 사용하고 있습니까? – basszero

답변

4

정확하게 문제가 무엇인지 말하기 어렵지만 클래스 로더 문제는 OSGi에서 매우 특정한 상황 일 수 있으며 디버깅하기가 어렵습니다.

Guice가 정말로 애플리케이션의 핵심이라면 시스템 번들의 Fragment 번들로 만드는 것이 좋다. 시스템 번들은 모든 번들에 대한 클래스 로더 트리의 루트 노드입니다. 이 번들에 클래스가 있으면 모든 곳에 액세스 할 수 있습니다. 이것은 Swing LAF (Substance, Alloy, Jide)를 OSGi 번들로 랩핑하는데 성공적으로 사용한 기술입니다. 모든 번들은 Swing (특히 Swing 클래스 로더)을 사용하기 때문에 루트 레벨에 있어야합니다.

OSGi 스펙을 점검하여 조각 번들을 작성하고 해당 조각 번들을 프레임 워크 확장 프래그먼트로 만들 수 있습니다. 필자는 Eclipse의 Equinox 런타임을 사용하여이 작업을 수행 할 수있었습니다. 대부분의 지원 클래스를 썼을 때 Apache Felix는 아직 프레임 워크 확장 단편을 지원하지 않았습니다. 지금 변경되었을 수 있습니다. 나는 프레임 워크 (knopplefish, spring-dm)에 대해 모른다.

4

그냥 Peaberry을 사용한다. OSGi에서 Guice를 사용하기 위해 필요한 모든 지원을 제공합니다. 처음부터 모든 것을 재발견 할 필요가 없습니다!

0

Issue 343에 대한 최신 패치를 시험해 볼 수 있습니다. 최신 Guice 트렁크에이 패치를 추가 한 최신 패치가 적용되어 사람들이 시도하고 피드백을 줄 수 있습니다.

최신 패치는 클래스를 공개하지 않고도 이러한 CGLIB 예외를 많이 피할 수 있으며, 여전히 필수적으로 (기본적으로 명시 적으로 메소드 차단을 사용할 때) 나머지 나머지 장소에서는 더 나은 오류 메시지를 제공합니다.