2014-11-15 4 views
0

Я пытался понять странное поведение 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 дал бы мне услугу на лета

Благодаря

ответ

2

Потребителя расслоение импортирует пакет mypackage.helloworldservice из кувшина службы. Когда вы удаляете банку службы, потребительская банка все еще подключается к уже устаревшему пакету из деинсталлированной банки. Когда вы устанавливаете новую банку службы, она экспортирует новую «копию» пакета mypackage.helloworldservice (я подозреваю, что банкомат службы также не импортирует пакет mypackage.helloworldservice). Поэтому вам нужно обновить потребительскую банку, чтобы заставить ее подключиться к новому пакету mypackage.helloworldservice.

Смежные вопросы