2010-03-16 2 views
5

OSGI는 모듈마다 서로 다른 버전의 의존성을 사용할 수 있도록 모듈마다 별도의 클래스 로더를 사용한다는 것을 읽었습니다. 동시에 동일한 JVM의 모든 모듈을 실행합니다.별도의 클래스 로더를 사용하고 동일한 JVM에서 실행하는 방법은 무엇입니까? (OSGI)

어떻게 작동합니까? 모듈 A가 종속성의 버전 # 1을 사용하고 모듈 B가 버전 # 2를 사용하는 경우 모듈 A가 종속성 클래스의 인스턴스를 메소드 매개 변수로 모듈 B에 전달하면 문제가 발생하지 않습니까?

모듈 B가 의존성 클래스와 다른 인터페이스를 기대하고 있다면 나는 그것을 질식시킬 것이라고 생각합니다.

답변

5

불일치하는 종속성으로 인해 문제가 발생할 수 있습니다. OSGi는 이러한 의존성의 전이 폐쇄를 계산하고 해결 시간에 아무 것도없는 것을 확인함으로써이를 피합니다.

이렇게하면 내부/숨겨진 개인 종속성이있는 동안 공개 종속성을 노출 할 수 있으므로이를 방지하려면 구현 종속성을 숨 깁니다. 따라서 런타임 오류가 확실하지 않은 번들 해결 시간에 모든 것이 확인됩니다.

예를 들어, A와 B가 호환되지 않는 인터페이스를 사용하고 A가 B에 의존하면 A가 종속성 오류로 해결되지 않습니다. 따라서 호환되지 않는 유형을 전달하기 시작할 수도 없습니다.