felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Richard S. Hall" <he...@ungoverned.org>
Subject Re: Problem moving to Felix
Date Tue, 21 Nov 2006 16:32:13 GMT
Damian Minkov wrote:
> Hi,
> I'm not sure I've understood the question - but if the question is 
> whether I import the package the answer is yes :)
> Actually the package "Service-Found-In-SomeBundle" is exported from 
> someBundle.
> And the pseudo code in my previous mail is actually in other bundle 
> which imports this package.

Well, that is probably the cause of your difficulty then. As you 
probably know, uninstalling a bundle does not remove its packages, 
leaving them available for existing bundles that are using them. 
However, uninstalling a bundle does make the packages unavailable to 
subsequently installed bundles (personally, I didn't like this clarified 
R4 interpretation of how uninstalled packages are treated, but that is 
the way it works now).

So, in short, when you uninstall and re-install the new version of 
"someBundle", it is using its "new" version of the service package, 
while your existing bundle is using the old version of the package. The 
two classes are from different class loaders, thus they are not 
compatible, which is why your existing bundle can not see the new service.

The simple way around this is to package your service interfaces in a 
separate bundle.

-> richard

> damencho
> Richard S. Hall wrote:
>> Damian Minkov wrote:
>>> Hello,
>>> In the SIP Communicator project we were happily using oscar 2.0 for 
>>> a while but have now decided to move to Felix. We are however 
>>> running into some difficulties so I thought that someone might have 
>>> an idea what is causing them.
>>> Here is one such Felix related problem that we didn't have with Oscar.
>>> Bundle someBundle ......
>>> bundleContext.getServiceReference("Service-Exported-By-someBundle");
>>> //the service is found and working
>>> someBundle.uninstall();
>>> someBundle = 
>>> bundleContext.installBundle("Service-Exported-By-someBundle");
>>> bundleContext.getServiceReference("Service-Found-In-SomeBundle"); 
>>> //!!! Not found
>>> someBundle.getRegisteredServices()
>>> // The "Service-Exported-By-someBundle" is among the registered 
>>> services
>>> The problem is that the bundlecontext instance we are using seems to 
>>> not be valid anymore.
>> Does the code above get access to the service interface of the 
>> service provided by "someBundle"? In other words, does the bundle 
>> containing the code above access the service using reflection or does 
>> the bundle actually have a wire to the service interface package?
>> -> richard

View raw message