You can always disable service requirements globally by setting
  serviceRequirements = disable
in the etc/org.apache.karaf.features.cfg config file.


2016-08-31 15:34 GMT+02:00 Jean-Baptiste Onofré <j...@nanthrax.net>:

> Hi Benson,
>
> I agree: we had a long discussion with Guillaume about that in the past ;)
>
> As a workaround, you can use the feature capability definition (and it can
> be done at runtime using feature:* commands). So your DS components don't
> have to change.
>
> Regards
> JB
>
>
> On 08/31/2016 03:30 PM, Benson Margulies wrote:
>
>> Gentlemen,
>>
>> Thank you very much for the help. I want to offer a small argument for
>> an option to turn all this off in a CFG file, before I get to work
>> using the solutions you've offered.
>>
>> One of the virtues of DS is that you can mix-and-match: a DS component
>> can transparently use non-DS services. This resolver feature disables
>> that nice transparency by requiring any service used in a DS component
>> to be accounted for in a Provide-Capability. So you might accept the
>> proposition that this resolver enforcement is not so good for
>> everyone.
>>
>> --benson
>>
>>
>>
>>
>> On Wed, Aug 31, 2016 at 6:13 AM, Guillaume Nodet <gno...@apache.org>
>> wrote:
>>
>>>
>>>
>>> 2016-08-31 15:00 GMT+02:00 Benson Margulies <ben...@basistech.com>:
>>>
>>>>
>>>> On Wed, Aug 31, 2016 at 5:50 AM, Jean-Baptiste Onofré <j...@nanthrax.net>
>>>> wrote:
>>>>
>>>>> So, I will explain a new time (for the third time ;)).
>>>>>
>>>>
>>>> JB,
>>>>
>>>> I apologize for not being awake when this came through before.
>>>>
>>>> I just want to make sure that I am completely following this. The
>>>> resolver is requiring that some bundle mentions the service in a
>>>> Provide-Capability -- NOT that the service is actually running?
>>>>
>>>
>>>
>>> The resolver looks at the bundle manifest. It runs before they are
>>> installed
>>> / started, so it can't really look at if they are running or not.
>>>
>>>
>>>>
>>>> The service in question is provided by an 'old' OSGi bundle that does
>>>> not bother to do a Provide-Capability for it; it's not a service, just
>>>> a service launched the old-fashioned way.
>>>>
>>>> Is there some thread you can point me to that offers suggestions for
>>>> dealing with this? I would rather not have to go add
>>>> Provide-Capability manifest entries for all my dynamically created
>>>> OSGi services. Is there an option in a cfg file or a feature.xml that
>>>> turns this back off?
>>>>
>>>
>>>
>>> This could be done for karaf 4.1 with a new xsd.
>>>
>>>
>>>>
>>>> Perhaps I can persuade BND not to list them as requirements.
>>>>
>>>
>>>
>>> Yeah, that's definitely the easiest way, you can easily remove the
>>> Require-Capability header, or disable the service requirements,
>>> depending on
>>> how they are generated.
>>>
>>>
>>>
>>>>
>>>> Thanks,
>>>> benson
>>>>
>>>>
>>>>
>>>>> When you are using features XML with namespace 1.3 or 1.4, the feature
>>>>> resolver uses the service enforcement. It means that it checks the
>>>>> service
>>>>> capability in the bundles. The service requirement is basically a
>>>>> bundle
>>>>> that needs a service "A" at runtime. So the resolver will check the
>>>>> features
>>>>> containing the bundle providing such capability (exposing the service).
>>>>> It's
>>>>> what the effective:=active mean.
>>>>>
>>>>> The corresponding MANIFEST header is:
>>>>>
>>>>> <Provide-Capability>
>>>>> osgi.service;effective:=active;objectClass=myService
>>>>> </Provide-Capability>
>>>>>
>>>>> On the other hand, the requirement header looks like:
>>>>>
>>>>> <Require-Capability>
>>>>> osgi.service;effective:=active;filter:="(objectClass=aService)"
>>>>> </Require-Capability>
>>>>>
>>>>>
>>>>> Unfortunately, in Karaf 4.0.3, 4.0.4, 4.0.5, the service enforcement
>>>>> was
>>>>> enabled for features xmlns 1.3.0 NOT for 1.4.0 (it was a bug). This bug
>>>>> has
>>>>> been fixed in Karaf 4.0.6. That's why when you upgraded from 4.0.4 to
>>>>> 4.0.6,
>>>>> the feature resolver is now "active" for your features XML and check
>>>>> the
>>>>> service enforcement.
>>>>>
>>>>> Regards
>>>>> JB
>>>>>
>>>>>
>>>>> On 08/31/2016 02:31 PM, Benson Margulies wrote:
>>>>>
>>>>>>
>>>>>> I just tried the experiment of moving our platform from 4.0.4 to
>>>>>> 4.0.6, changing nothing but the karaf version. I received in return a
>>>>>> resolution error that I've never seen the like of before, complaining
>>>>>> that a particular service is missing with 'effective:=active'.
>>>>>>
>>>>>> Since Karaf does not come to command level when this sort of thing
>>>>>> goes wrong, it is not obvious to me how to gain any insight into what
>>>>>> is wrong. The service reference itself is very strange;
>>>>>> 'RosetteBundleWarmup' a DS reference like:
>>>>>>
>>>>>> @Reference(target = "(component-name=name-matching)")
>>>>>> public void setWarmup(RosetteBundleWarmup warmup) {
>>>>>>     this.componentWarmup = warmup;
>>>>>> }
>>>>>>
>>>>>> and I don't see the component-name filter in the error message. It's
>>>>>> also new to me that DS @Reference is even visible to resolution at the
>>>>>> time that boot features are being resolved.
>>>>>>
>>>>>>
>>>>>> 2016-08-31 08:25:36,304 | ERROR | pool-6-thread-1  |
>>>>>> BootFeaturesInstaller            | 6 - org.apache.karaf.features.core
>>>>>> - 4.0.6 | Error installing boot features
>>>>>> org.osgi.service.resolver.ResolutionException: Unable to resolve
>>>>>> root:
>>>>>> missing requirement [root] osgi.identity;
>>>>>> osgi.identity=rosapi-all-sdks; type=karaf.feature;
>>>>>> version="[1.2.6.SNAPSHOT,1.2.6.SNAPSHOT]";
>>>>>>
>>>>>>
>>>>>> filter:="(&(osgi.identity=rosapi-all-sdks)(type=karaf.featur
>>>>>> e)(version>=1.2.6.SNAPSHOT)(version<=1.2.6.SNAPSHOT))"
>>>>>> [caused by: Unable to resolve rosapi-all-sdks/1.2.6.SNAPSHOT: missing
>>>>>> requirement [rosapi-all-sdks/1.2.6.SNAPSHOT] osgi.identity;
>>>>>> osgi.identity=rosapi-worker-rni-rnt-sdk; type=karaf.feature [caused
>>>>>> by: Unable to resolve rosapi-worker-rni-rnt-sdk/1.2.6.SNAPSHOT:
>>>>>> missing requirement [rosapi-worker-rni-rnt-sdk/1.2.6.SNAPSHOT]
>>>>>> osgi.identity;
>>>>>> osgi.identity=com.basistech.ws.rosapi-worker-rni-rnt-sdk;
>>>>>> type=osgi.bundle;
>>>>>> version="[1.2.6.v20160831122227,1.2.6.v20160831122227]";
>>>>>> resolution:=mandatory [caused by: Unable to resolve
>>>>>> com.basistech.ws.rosapi-worker-rni-rnt-sdk/1.2.6.v20160831122227:
>>>>>> missing requirement
>>>>>> [com.basistech.ws.rosapi-worker-rni-rnt-sdk/1.2.6.v20160831122227]
>>>>>> osgi.service;
>>>>>> filter:="(objectClass=com.basistech.rosette.osgi.RosetteBund
>>>>>> leWarmup)";
>>>>>> effective:=active]]]
>>>>>>
>>>>>>
>>>>> --
>>>>> Jean-Baptiste Onofré
>>>>> jbono...@apache.org
>>>>> http://blog.nanthrax.net
>>>>> Talend - http://www.talend.com
>>>>>
>>>>
>>>
>>>
>>>
>>> --
>>> ------------------------
>>> Guillaume Nodet
>>> ------------------------
>>> Red Hat, Open Source Integration
>>>
>>> Email: gno...@redhat.com
>>> Web: http://fusesource.com
>>> Blog: http://gnodet.blogspot.com/
>>>
>>>
> --
> Jean-Baptiste Onofré
> jbono...@apache.org
> http://blog.nanthrax.net
> Talend - http://www.talend.com
>



-- 
------------------------
Guillaume Nodet
------------------------
Red Hat, Open Source Integration

Email: gno...@redhat.com
Web: http://fusesource.com
Blog: http://gnodet.blogspot.com/

Reply via email to