번들 A, 번들 B 및 번들 C라고하는 세 번들로 구성된 GUI (스윙) 응용 프로그램을 구현 중입니다. BundleContext.installBundle (String location) 메소드를 사용하여 별도의 설치 프로그램 번들을 사용하여 /에이 세 번들을 모두 설치합니다.OSGi 번들 업데이트가 이전 번들을 중지/언로드하지 않는 이유는 무엇입니까?
"UpgradeBundle"이라는 다른 번들을 사용하여 이미 설치된 3 개의 번들 중 하나를 업데이트 할 때 문제가 발생합니다. 더 정확히 말하면 FrameworkWiring.refreshBundles (BundlesForRefresh, null) 메서드를 호출 한 다음 BundleC.update (null) 메서드를 호출합니다.이 번들 업데이트를 읽으려면 FrameworkWiring.refreshBundles가 필요합니다. 그러나 FrameworkWiring.refreshBundles를 호출하면 이미 실행중인 응용 프로그램 인스턴스에서 업데이트하는 대신 업데이트 된 번들로 새 GUI 응용 프로그램이 시작되고 이미 실행중인 응용 프로그램은 이전 번들과 함께 계속 실행됩니다. 왜 이런 일이 일어나는 지 아십니까?
문제에 대한 자세한 설명이 필요하면 알려주세요. 문제를 자세히 설명하려고합니다.
P. 나는 Equinox OSGi 프레임 워크를 사용하고있다.
안녕하세요 @Peter 귀하의 회신에 대단히 감사합니다. 예. 내 앱이 번들 라이프 사이클 관리 측면에서 나쁘게 설계되었음을 알고 있습니다. 나는 이것을 파헤쳐 볼 것이다. 더 나아가 나는 업데이트하려고하는 bundleC가 실제로는 조각이라는 것을 깨달았습니다. (bundleA에 기여하고 자체 activator가 없습니다.) 이것은 또 다른 질문으로 이어집니다. 번들을 업데이트하는 것과 프래그먼트를 업데이트하는 것 사이에 중요한 차이가 있습니까? – Nadeem