Yes, it's what we agreed for 4.0.0. Regards JB
On 08/31/2016 04:14 PM, Guillaume Nodet wrote:
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 <mailto: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 <mailto:gno...@apache.org>> wrote: 2016-08-31 15:00 GMT+02:00 Benson Margulies <ben...@basistech.com <mailto:ben...@basistech.com>>: On Wed, Aug 31, 2016 at 5:50 AM, Jean-Baptiste Onofré <j...@nanthrax.net <mailto: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.feature)(version>=1.2.6.SNAPSHOT)(version<=1.2.6.SNAPSHOT))" [caused by: Unable to resolve rosapi-all-sdks/1.2.6. <http://1.2.6.>SNAPSHOT: missing requirement [rosapi-all-sdks/1.2.6. <http://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 <http://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. <http://1.2.6.>v20160831122227: missing requirement [com.basistech.ws.rosapi-worker-rni-rnt-sdk/1.2.6. <http://1.2.6.>v20160831122227] osgi.service; filter:="(objectClass=com.basistech.rosette.osgi.RosetteBundleWarmup)"; effective:=active]]] -- Jean-Baptiste Onofré jbono...@apache.org <mailto:jbono...@apache.org> http://blog.nanthrax.net Talend - http://www.talend.com -- ------------------------ Guillaume Nodet ------------------------ Red Hat, Open Source Integration Email: gno...@redhat.com <mailto:gno...@redhat.com> Web: http://fusesource.com Blog: http://gnodet.blogspot.com/ -- Jean-Baptiste Onofré jbono...@apache.org <mailto:jbono...@apache.org> http://blog.nanthrax.net Talend - http://www.talend.com -- ------------------------ Guillaume Nodet ------------------------ Red Hat, Open Source Integration Email: gno...@redhat.com <mailto:gno...@redhat.com> Web: http://fusesource.com <http://fusesource.com/> Blog: http://gnodet.blogspot.com/
-- Jean-Baptiste Onofré jbono...@apache.org http://blog.nanthrax.net Talend - http://www.talend.com