Sorry, just saw that you answered how to provide capability via the feature - will try that.
/Bengt Den tors 10 mars 2022 kl 09:06 skrev Bengt Rodehav <[email protected]>: > Thanks a lot JB - this really helps! > > Do you also know if it is possible to make pax-jdbc generate the > corresponding "provides"? Otherwise I might do as you suggest and disable > the capabilities. > > /Bengt > > Den ons 9 mars 2022 kl 21:02 skrev Jean-Baptiste Onofré <[email protected]>: > >> Exactly: maven-bundle-plugin 2.3.7 doesn't generate the >> Requirement/Capability headers. That's why it works. If you deploy your >> bundles built with this version, you won't have the problem. >> >> maven-bundle-plugin 5.1.4 generates the req/cap headers, used by the >> features service. If you want, you can disable req/cap headers generation. >> Just pass the following instructions to maven-bundle-plugin: >> >> <_norequirements>true</_norequirements> >> <_nocapabilities>true</_nocapabilities> >> >> So, it's what I said in my previous email: it's not related directly to >> Karaf (Karaf features resolver use req/cap since Karaf 4.2.x), it's because >> your bundles MANIFEST have changed (when you upgraded the >> maven-bundle-plugin version). >> >> Regards >> JB >> >> On Wed, Mar 9, 2022 at 8:37 PM Bengt Rodehav <[email protected]> wrote: >> >>> Aha - thanks a lot. I thought I was goin crazy. I use pax-jdbc for the >>> data source. I'll need to check if it can provide the capability. Or, maybe >>> the problem is in the other end. I updated to a newer version of maven >>> bundle plugin (from 2.3.7 to 5.1.4) - maybe the old one didn't require the >>> capability. >>> >>> /Bengt >>> >>> On Wed, 9 Mar 2022, 18:27 Jean-Baptiste Onofré, <[email protected]> wrote: >>> >>>> No, you didn't get my point. >>>> >>>> The fact the datasource is there or not doesn't matter at runtime if it >>>> doesn't provide the capability. >>>> >>>> Let me explain. >>>> >>>> Your bundles history-stuff contains in META-INF/MANIFEST: >>>> >>>> Require-Capability: >>>> osgi.service;effective:=active;objectClass="javax.sql.DataSource";filter=.... >>>> >>>> When you install with bundle:install, this header is simply ignored. >>>> >>>> BUT, when you install using features service, the feature resolver >>>> check all bundles requirements/capabilities. >>>> >>>> So, the feature resolver is looking for: >>>> - a bundle containing Provide-Capability header in MANIFEST >>>> matching the requirement >>>> - a feature containing <capability/> matching the requirement >>>> >>>> It's nothing related to runtime (the actual bundle installed and >>>> running), only the MANIFEST cap/req matter; >>>> >>>> So, in your case, you can just provide the capability in the feature >>>> providing the datasource. It's exactly what you can see in the >>>> karaf-jpa-example: >>>> https://github.com/apache/karaf/blob/main/examples/karaf-jpa-example/karaf-jpa-example-features/src/main/feature/feature.xml#L28 >>>> >>>> Regards >>>> JB >>>> >>>> On Wed, Mar 9, 2022 at 5:30 PM Bengt Rodehav <[email protected]> wrote: >>>> >>>>> But the filetransfoerhistoryjta datasource is there. I've verified >>>>> that. And if I install the bundle directly instead of going through the >>>>> feature it works fine and connects to the datasource. Why can it not be >>>>> found when I go through the feature but when I install the bundle >>>>> directly? >>>>> >>>>> /Bengt >>>>> >>>>> Den ons 9 mars 2022 kl 17:10 skrev Jean-Baptiste Onofré < >>>>> [email protected]>: >>>>> >>>>>> I don't think anything changed on the resolver, maybe you updated >>>>>> maven-bundle-plugin or bnd to create your bundle, and now it includes the >>>>>> requirement (whereas your bundles didn't contain requirement in MANIFEST >>>>>> before). >>>>>> >>>>>> On Wed, Mar 9, 2022 at 4:59 PM Bengt Rodehav <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> I didn't have any problems with this using Karaf 4.3.3. Do you know >>>>>>> if something has changed? I'm using Karaf 4.3.6 now. >>>>>>> >>>>>>> /Bengt >>>>>>> >>>>>>> Den ons 9 mars 2022 kl 16:46 skrev Bengt Rodehav <[email protected] >>>>>>> >: >>>>>>> >>>>>>>> Is there any way to stop the feature installer from using the >>>>>>>> resolver? >>>>>>>> >>>>>>>> /Bengt >>>>>>>> >>>>>>>> Den ons 9 mars 2022 kl 16:37 skrev Bengt Rodehav <[email protected] >>>>>>>> >: >>>>>>>> >>>>>>>>> Unfortunately I didn't get any extra information. I got the same >>>>>>>>> as before which is: >>>>>>>>> >>>>>>>>> 2022-03-09T16:26:02,494 | INFO | pipe-feature:install -v >>>>>>>>> connect-filetransfer-history-db | FeaturesServiceImpl | >>>>>>>>> 18 - >>>>>>>>> org.apache.karaf.features.core - 4.3.6 | Adding features: >>>>>>>>> connect-filetransfer-history-db/[3.1.0.SNAPSHOT,3.1.0.SNAPSHOT] >>>>>>>>> 2022-03-09T16:26:02,901 | ERROR | Karaf local console user karaf | >>>>>>>>> ShellUtil | 70 - org.apache.karaf.shell.core - >>>>>>>>> 4.3.6 >>>>>>>>> | Exception caught while executing command >>>>>>>>> org.apache.felix.resolver.reason.ReasonException: Unable to >>>>>>>>> resolve root: missing requirement [root] osgi.identity; >>>>>>>>> osgi.identity=connect-filetransfer-history-db; type=karaf.feature; >>>>>>>>> version="[3.1.0.SNAPSHOT,3.1.0.SNAPSHOT]"; >>>>>>>>> filter:="(&(osgi.identity=connect-filetransfer-history-db)(type=karaf.feature)(version>=3.1.0.SNAPSHOT)(version<=3.1.0.SNAPSHOT))" >>>>>>>>> [caused by: Unable to resolve >>>>>>>>> connect-filetransfer-history-db/3.1.0.SNAPSHOT: missing requirement >>>>>>>>> [connect-filetransfer-history-db/3.1.0.SNAPSHOT] osgi.identity; >>>>>>>>> osgi.identity=se.digia.connect.services.filetransfer.history-domain; >>>>>>>>> type=osgi.bundle; version="[3.1.0.SNAPSHOT,3.1.0.SNAPSHOT]"; >>>>>>>>> resolution:=mandatory [caused by: Unable to resolve >>>>>>>>> se.digia.connect.services.filetransfer.history-domain/3.1.0.SNAPSHOT: >>>>>>>>> missing requirement >>>>>>>>> [se.digia.connect.services.filetransfer.history-domain/3.1.0.SNAPSHOT] >>>>>>>>> osgi.service; objectClass=javax.sql.DataSource; effective:=active; >>>>>>>>> filter:="(osgi.jndi.service.name=jdbc/filetransferhistoryjta)"]] >>>>>>>>> at >>>>>>>>> org.apache.felix.resolver.Candidates$MissingRequirementError.toException(Candidates.java:1341) >>>>>>>>> ~[?:?] >>>>>>>>> at >>>>>>>>> org.apache.felix.resolver.ResolverImpl.doResolve(ResolverImpl.java:433) >>>>>>>>> ~[?:?] >>>>>>>>> at >>>>>>>>> org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:420) >>>>>>>>> ~[?:?] >>>>>>>>> at >>>>>>>>> org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:374) >>>>>>>>> ~[?:?] >>>>>>>>> at >>>>>>>>> org.apache.karaf.features.internal.region.SubsystemResolver.resolve(SubsystemResolver.java:257) >>>>>>>>> ~[?:?] >>>>>>>>> at >>>>>>>>> org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:399) >>>>>>>>> ~[?:?] >>>>>>>>> at >>>>>>>>> org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1069) >>>>>>>>> ~[?:?] >>>>>>>>> at >>>>>>>>> org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:1004) >>>>>>>>> ~[?:?] >>>>>>>>> at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?] >>>>>>>>> at >>>>>>>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) >>>>>>>>> ~[?:?] >>>>>>>>> at >>>>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) >>>>>>>>> ~[?:?] >>>>>>>>> at java.lang.Thread.run(Thread.java:833) [?:?] >>>>>>>>> Caused by: org.apache.felix.resolver.reason.ReasonException: >>>>>>>>> Unable to resolve connect-filetransfer-history-db/3.1.0.SNAPSHOT: >>>>>>>>> missing >>>>>>>>> requirement [connect-filetransfer-history-db/3.1.0.SNAPSHOT] >>>>>>>>> osgi.identity; >>>>>>>>> osgi.identity=se.digia.connect.services.filetransfer.history-domain; >>>>>>>>> type=osgi.bundle; version="[3.1.0.SNAPSHOT,3.1.0.SNAPSHOT]"; >>>>>>>>> resolution:=mandatory [caused by: Unable to resolve >>>>>>>>> se.digia.connect.services.filetransfer.history-domain/3.1.0.SNAPSHOT: >>>>>>>>> missing requirement >>>>>>>>> [se.digia.connect.services.filetransfer.history-domain/3.1.0.SNAPSHOT] >>>>>>>>> osgi.service; objectClass=javax.sql.DataSource; effective:=active; >>>>>>>>> filter:="(osgi.jndi.service.name=jdbc/filetransferhistoryjta)"] >>>>>>>>> at >>>>>>>>> org.apache.felix.resolver.Candidates$MissingRequirementError.toException(Candidates.java:1341) >>>>>>>>> ~[?:?] >>>>>>>>> ... 12 more >>>>>>>>> Caused by: org.apache.felix.resolver.reason.ReasonException: >>>>>>>>> Unable to resolve >>>>>>>>> se.digia.connect.services.filetransfer.history-domain/3.1.0.SNAPSHOT: >>>>>>>>> missing requirement >>>>>>>>> [se.digia.connect.services.filetransfer.history-domain/3.1.0.SNAPSHOT] >>>>>>>>> osgi.service; objectClass=javax.sql.DataSource; effective:=active; >>>>>>>>> filter:="(osgi.jndi.service.name=jdbc/filetransferhistoryjta)" >>>>>>>>> at >>>>>>>>> org.apache.felix.resolver.Candidates$MissingRequirementError.toException(Candidates.java:1341) >>>>>>>>> ~[?:?] >>>>>>>>> at >>>>>>>>> org.apache.felix.resolver.Candidates$MissingRequirementError.toException(Candidates.java:1341) >>>>>>>>> ~[?:?] >>>>>>>>> ... 12 more >>>>>>>>> >>>>>>>>> I tried the "--store" option which gave me a quite large file that >>>>>>>>> I unfortunately did not understand fully. Not sure if it helps any. >>>>>>>>> >>>>>>>>> /Bengt >>>>>>>>> >>>>>>>>> Den ons 9 mars 2022 kl 16:22 skrev Bengt Rodehav < >>>>>>>>> [email protected]>: >>>>>>>>> >>>>>>>>>> OK - thanks. Will try that. >>>>>>>>>> >>>>>>>>>> /Bengt >>>>>>>>>> >>>>>>>>>> Den ons 9 mars 2022 kl 16:16 skrev Jean-Baptiste Onofré < >>>>>>>>>> [email protected]>: >>>>>>>>>> >>>>>>>>>>> Hi >>>>>>>>>>> >>>>>>>>>>> The main difference is that feature used the resolver to >>>>>>>>>>> optimize the installation. Bundle installation doesn’t use the >>>>>>>>>>> feature >>>>>>>>>>> resolver. >>>>>>>>>>> >>>>>>>>>>> You can use feature:install -v to get resolver output and you >>>>>>>>>>> will probably see the chain found by the resolver. >>>>>>>>>>> >>>>>>>>>>> Regards >>>>>>>>>>> JB >>>>>>>>>>> >>>>>>>>>>> Le mer. 9 mars 2022 à 15:22, Bengt Rodehav <[email protected]> >>>>>>>>>>> a écrit : >>>>>>>>>>> >>>>>>>>>>>> I have a very strange problem (in Karaf 4.3.6). I use JPA and >>>>>>>>>>>> have a bundle containing a persistence.xml in which a datasource is >>>>>>>>>>>> referenced: >>>>>>>>>>>> >>>>>>>>>>>> <jta-data-source>osgi:service/javax.sql.DataSource/( >>>>>>>>>>>> osgi.jndi.service.name >>>>>>>>>>>> =jdbc/filetransferhistoryjta)</jta-data-source> >>>>>>>>>>>> >>>>>>>>>>>> If the datasource is not available when I install this bundle >>>>>>>>>>>> then I will get an error complaining that the datasource is not >>>>>>>>>>>> present. >>>>>>>>>>>> The strange thing is that it seems to be dependent on how I >>>>>>>>>>>> install this >>>>>>>>>>>> bundle - directly installing the bundle or doing it via a feature. >>>>>>>>>>>> In the >>>>>>>>>>>> first case it works but in the latter it doesn't. >>>>>>>>>>>> >>>>>>>>>>>> If I first install all the prerequisites I need and then issue >>>>>>>>>>>> the following command in the Karaf shell: >>>>>>>>>>>> >>>>>>>>>>>> bundle:install -s >>>>>>>>>>>> mvn:se.digia.connect.services.filetransfer/history-domain/3.1-SNAPSHOT >>>>>>>>>>>> >>>>>>>>>>>> Then it works fine. It even works if I remove the "-s" and >>>>>>>>>>>> start the bundle afterwards instead. >>>>>>>>>>>> >>>>>>>>>>>> However, if I use the following feature: >>>>>>>>>>>> >>>>>>>>>>>> <feature name="connect-filetransfer-history-db" >>>>>>>>>>>> version="3.1-SNAPSHOT"> >>>>>>>>>>>> >>>>>>>>>>>> <bundle>mvn:se.digia.connect.services.filetransfer/history-domain/3.1-SNAPSHOT</bundle> >>>>>>>>>>>> </feature> >>>>>>>>>>>> >>>>>>>>>>>> And then issue the following command: >>>>>>>>>>>> >>>>>>>>>>>> feature:install connect-filetransfer-history-db >>>>>>>>>>>> >>>>>>>>>>>> Then the datasource cannot be found and the install fails. This >>>>>>>>>>>> happens consistently. I am using Pax-Jdbc for exposing the >>>>>>>>>>>> datasource via >>>>>>>>>>>> JNDI. >>>>>>>>>>>> >>>>>>>>>>>> First I thought that there might be a timing problem and that >>>>>>>>>>>> you have to wait a while to get the datasource published but it >>>>>>>>>>>> doesn't >>>>>>>>>>>> seem to have anything to do with that at all. I can wait 5 minutes >>>>>>>>>>>> after >>>>>>>>>>>> installing the datasource. I also check with the command >>>>>>>>>>>> "jndi:names" that >>>>>>>>>>>> it is published. But it still doesn't work using a feature. >>>>>>>>>>>> >>>>>>>>>>>> Can anyone tell me what is being done differently when I use a >>>>>>>>>>>> feature compared to when I just install the bundle directly? There >>>>>>>>>>>> is >>>>>>>>>>>> apparently some kind of difference. >>>>>>>>>>>> >>>>>>>>>>>> /Bengt >>>>>>>>>>>> >>>>>>>>>>>>
