Я пытался понять странное поведение OSGI. Надеясь, что кто-то может пролить свет на него. Вот моя установкаOSGI: Как обновить пакет «потребитель»
1) Использование затмение \ Plugins \ org.eclipse.osgi_3.7.0.v20110613.jar
2) У меня есть Bundle, который экспортирует услугу (HelloworldService)
Он регистрирует службы в активаторе как таковой
public void start(BundleContext context) throws Exception { IHelloService helloService = new HelloServiceImpl(); helloServiceRegistration =context.registerService( IHelloService.class.getName(), helloService, null ); }
3) у меня есть «потребительский» пакет, который использует службу через ServiceTracker
ServiceReference externalServiceReference = Activator.getContext().getServiceReference(IHelloService.class.getName()); IHelloService externalService = (IHelloService) Activator.getContext().getService(externalServiceReference);
Теперь, когда я развертываю обе эти банки в OSGI (helloworld.jar и helloworldservice.jar); он отлично работает. Я могу получить объект «IHelloService» impl и совершать вызовы. Я могу начать/остановить пучки и когда они вернутся; он отлично работает
Проблема возникает, когда я деинсталлирую и устанавливаю пакет HelloWorldservice. В этом случае; потребительский внешний вид «Helloworld» ExternalServiceReference равен NULL. Если я просматриваю информацию о пакете; Я вижу это
osgi> bundle 1 mypackage.helloworld_1.0.0.qualifier [1] Id=1, Status=RESOLVED Data Root=C:\Users\\dev\eclipse\plugins\configuration\org.eclipse.obundles\1\data No registered services. No services in use. No exported packages Imported packages mypackage.helloworldservice; version="0.0.0" **stale** org.osgi.framework; version="1.6.0" org.osgi.util.tracker; version="1.5.0" No fragment bundles Named class space mypackage.helloworld; bundle-version="1.0.0.qualifier"[provided] No required bundles
Обратите внимание, что его «импортированные пакеты» имеют GONE STALE. Вот строка, о которой идет речь
Импортированные упаковки mypackage.helloworldservice; version = "0.0.0" < stale
Теперь я могу исправить это, выпустив команду «update» с консоли.
Вот мой вопрос
1) Как программно сделать это из моей пачки «потребителя» .. 2) Если я в производственной системе и развернуть новую «копию» в helloworlservice .jar (замена существующей версии); Должна ли я обновить свои пользователь .. Я думал, что ServiceTracker дал бы мне услугу на лета
Благодаря