OSGi에서 시스템을 다시 시작하더라도 번들 배선을 유지할 수 있습니까? 예전에 사용 가능한 새 버전이 더 많이 제공 되더라도? 요점은 무언가가 작동하면 이전 번들을 새로운 종속성에 연결하여 위험에 노출시키지 않으려한다는 것입니다. 바꾸어 말하면, 가능한 한 많이 업데이트를 격리하려고합니다. 이전 번들은 이미 유선 종속성을 충족시키기 위해 사용되기 때문에 구성 요소의 업데이트가 다른 모든 구성 요소에 영향을 미치지 않습니다.번들 업데이트를 이전 번들에 자동으로 적용하지 마십시오.
As 예를 들어, A가 범위 [1.0.0, 2.0.0]의 B에 의존한다고 가정 해 봅시다. 우리는 B의 버전 1.0.0을 배포합니다. 그래서 A는 B_1.0.0에 연결됩니다.
이제 B가 범위 [1.0.1, 2.0.0]에 따라 달라 지므로 논리 변경에 따라 달라지는 번들 C를 만듭니다. B_1.0.1을 배포합니다. 이제 우리가 시스템을 다시 시작하면 C와 A는 1.0.1에 연결될 것입니다. 왜냐하면 양쪽 모두의 의존성 범위에 있기 때문이며 이론상 1.0.0보다 더 나은 A와 일치합니다. OSGi에게 이렇게하지 말고 배선을 가능한 한 길게 유지할 수있는 방법이 있습니까 (예 : 이전 번들이 실제로 제거 될 때까지 범위에서 가장 높은 버전으로 진행하는 것이 좋습니다)
현재 우리는 범위를 허용하지 않으므로 의존성은 [1.0.0, 1.0.0]과 같습니다. 이것은 우리가 원하는 업데이트를 제공하지만 기본적으로 모듈성을 잃어 버리는 대가를 치르게합니다. 의존성을 업데이트해야합니다. 종속물의 코드가 변경되지 않아도 종속성을 업데이트해야합니다. 나는 범위를 허용하지 않는 거대한 안티 패턴이라고 생각합니다. 그래서 범위를 가지고 더 나은 대안을 제안하려고합니다. 그러나 그것은 우리가 필요로하는 업데이트 격리를 제공 할 것이며, 첫 번째 아이디어는 세션 전체에서 재배 선을 허용하지 않는 것입니다.
If 중요한 것은 OSGi 서비스를 사용하지 않는 것입니다. 그것들은 모두 일반 번들입니다.
닐 (Neil)은 그들이 동일하지 않은 범위라는 사실을 잊어 버립니다. A와 C 모두 B에 범위 [1.0.0, 2.0.0]로 의존한다고 가정 해보십시오. 그러나 A가 출시되었을 때 B_1.0.0 만 존재했기 때문에 A는 B_1.0.0에 연결됩니다. 그런 다음 C가 B_1.0.1과 함께 출시됩니다. A-> B_1.0.0 배선을 C-> B_1.0.1과 같이 보관하기를 원합니다. 시스템에서 A-> B_1.0.1을 연결하는 것을 원하지 않습니다. 범위를 허용하지 않고 이것을 잠글 수있는 방법이 있습니까? 나는 의미 론적 버전 관리에 기반하여 1.0.1을 사용하는 것이 문제가 아니어야한다는 데 동의하지만, 뭔가 새로운 것으로 작동하는 무언가를 변경함으로써 위험> 0을 인정해야합니다. – Hilikus
오, 그리고 저도 더 슬프게 만듭니다. 매일 같이 일해라. – Hilikus
C가 나중에 추가되면'[1.0.0, 2.0)'을 선택하면 1.0.0 버전이 이미 A에 연결되어 있기 때문에 1.0.0 버전을 선택해야합니다. 동일한 경험적 방법이 적용됩니다. OSGi는 동일한 패키지의 내보내기 수를 최소화하려고합니다. 또한 패키지 새로 고침 작업을 수행 할 때까지 A를 다시 연결하지 않습니다. 따라서 C는 A와 동일한 배선을 1.0.0으로 사용합니다. –