OK, now I understand.
So the issue is I do have the following

Feature A containing bundle a
Feature B containing bundle b
which has a optional dependency on a.
But since A and B don't really have a common
root (in the concrete example it would be A the eventadmin feature
and B the http feature) you don't make those two
features dependent on each other.
Now how would this be handled. Is there an easy way of
handling this in future?


> Right, so it's a bit more focused ...
>
> So let's say we have:
>    * Feature A containing bundle a
>    * Feature B containing
>         feature A
>         bundle b
> so that bundle b solves an optional package for bundle a.
>
> Now, you install feature A, so bundle a gets resolved.
> You then install feature B.  The algorithm will find all bundles that
> 'would have been installed' and check if one should be refreshed.
> In that case, bundle a should be refreshed.
>
>
> On Mon, Dec 6, 2010 at 23:30, Achim Nierbeck <[email protected]> wrote:
>> Well, taken the example I explained in KARAF-312 I have the following
>>
>> // First pass: include all bundles contained in these features
>>        Set<Bundle> bundles = new HashSet<Bundle>(state.bundles); <<
>> Here the current bundle eventadmin is added
>>        bundles.removeAll(state.installed); <<< Here the same is removed
>>        if (bundles.isEmpty()) { <<< therefore it is empty :(
>>            return bundles;
>>        }
>>
>>> It should start from the installed features set and check if one of
>>> the newly installed bundles solve an optional import of an already
>>> installed bundle, or if it is a fragment to attach on an already
>>> installed bundle.
>>> This avoid refreshing bundles that are not related to the newly
>>> installed features.
>>>
>>> On Mon, Dec 6, 2010 at 23:12, Achim Nierbeck <[email protected]> 
>>> wrote:
>>>> After debugging, I'm not sure I do understand how this works. Does the
>>>> FeaturesServiceImpl#findBundlesToRefresh() method only work on the
>>>> newly installed feature set? I thought it helps me refreshing already
>>>> installed
>>>> bundles/features.
>>>>
>>>>> I will try to debug into this also,
>>>>> Jira Issue KARAF-312, does tell how to reproduce this.
>>>>>
>>>>>> I can try to investigate if you raise a JIRA and add the steps to 
>>>>>> reproduce ...
>>>>>>
>>>>>> On Mon, Dec 6, 2010 at 11:13, Achim Nierbeck <[email protected]> 
>>>>>> wrote:
>>>>>>> Ok,
>>>>>>>
>>>>>>> this was exactly what I was expecting from the behavior.
>>>>>>> Now with a concrete example. Working on Pax-Web, one of the bundles
>>>>>>> has an optional dependency to eventadmin service packages.
>>>>>>> Now the eventadmin service feature is deployed after the pax-web stuff.
>>>>>>> I do get an exception since the bundle that declared those packages as
>>>>>>> optional dependencies wasn't refreshed, but the service tracker already
>>>>>>> worked :(
>>>>>>>
>>>>>>> Thanks, Achim
>>>>>>>
>>>>>>>> So the features service tries to find out which bundles are to be 
>>>>>>>> refreshed.
>>>>>>>> This is done by checking all bundles previously installed (note that
>>>>>>>> if you install several features, even including dependencies, bundles
>>>>>>>> should only be resolved at the end, so it only considers bundles that
>>>>>>>> were installed before the installation of the current features) for
>>>>>>>> optional packages that could be refreshed or new fragments.
>>>>>>>> The code is in FeaturesServiceImpl#findBundlesToRefresh() if you want
>>>>>>>> to have a look.
>>>>>>>> There are certainly some possible enhancements here, as it basically
>>>>>>>> try to do a poor-man's resolution (or at least try to check if
>>>>>>>> fragment's host and packages can be matched ...)  I guess ideally,
>>>>>>>> we'd do a fake resolution, and this might become possible with the
>>>>>>>> next OBR generation, but not really now.
>>>>>>>>
>>>>>>>> On Sun, Dec 5, 2010 at 21:36, Achim Nierbeck <[email protected]> 
>>>>>>>> wrote:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> how does the refresh mechanism work for features?
>>>>>>>>> For example you have a features A deployed and deploy another 
>>>>>>>>> features B.
>>>>>>>>> I sometimes see that certain bundles of features A are refreshed. How 
>>>>>>>>> is
>>>>>>>>> this
>>>>>>>>> accomplished? How am I able to trigger something like this?
>>>>>>>>>
>>>>>>>>> Greetings, Achim
>>>>>>>>>
>>>
>>
>
>

Reply via email to