Hello. You've probably not seen my own answers on the post to update it with my last tests : - the bundle has no problem when installed out of the feature, and I think the service manifest itself is not the issue - In this manifest, I understand the requirement on the jms service, but the existing connection factory should satisfy it - why the similar jdbc datasource requirement is processed as expected and doesn't lead to a similar issue ? - Disabling the serviceRequirements in the feature configuration, the feature installer works as expected.
I agree with you, I'm going to post a new message on the Karaf list. Do you think that in my new post I should mention a Karaf feature installer's (its "resolver") issue, since the bundle installer has no problem finding the existing services to satisfy requirements ? Thanks again. Le jeu. 25 août 2022 à 07:23, Jean-Baptiste Onofré <j...@nanthrax.net> a écrit : > > Hi, > > you have a requirement in your bundle: it's the Import-Service > statement. The problem comes from there: it's nothing about the > runtime. > > I would recommend adding configuration to maven-bundle-plugin to not > put this requirement in your bundle MANIFEST. > > I already answered similar questions on the Karaf mailing list several times. > > By the way, this kind of question should be discussed on the Karaf > mailing list IMHO. > > Regards > JB > > On Tue, Aug 23, 2022 at 10:35 AM Ephemeris Lappis > <ephemeris.lap...@gmail.com> wrote: > > > > Hello again ! > > > > Well, I'm not sure I understand what you mean about "requirements" in my > > bundle. I have no requirement in my manifest. Here the full copy of the > > manifest : > > > > Manifest-Version: 1.0 > > Bnd-LastModified: 1661240801094 > > Build-Jdk-Spec: 1.8 > > Bundle-Blueprint: OSGI-INF/blueprint/routes.xml > > Bundle-Description: Fifi-T26 :: Camel routes > > Bundle-ManifestVersion: 2 > > Bundle-Name: Fifi-T26 :: Camel > > Bundle-SymbolicName: my-test-26-karaf-2-routes > > Bundle-Version: 0.0.1.SNAPSHOT > > Created-By: Apache Maven Bundle Plugin 5.1.8 > > DynamicImport-Package: groovy.*,org.codehaus.groovy.* > > Import-Package: javax.jms,javax.sql,my.test.t26.helper;version="[0.0,1 > > )",my.test.t26.uow;version="[0.0,1)",org.osgi.service.blueprint;versi > > on="[1.0.0,2.0.0)" > > Import-Service: javax.jms.ConnectionFactory;multiple:=false,my.test.t2 > > 6.helper.Helper;multiple:=false,my.test.t26.uow.CustomUnitOfWorkFacto > > ry;multiple:=false,javax.sql.DataSource;multiple:=false;filter=(osgi. > > jndi.service.name=jdbc/fifi) > > Tool: Bnd-6.3.1.202206071316 > > > > I aim to provide my bundle (and all similar bundles in our projects) as a > > feature, with dependencies that pull all the common features. For that I > > have created a global common feature, and for every applicative bundle, > > this feature is referenced as a prerequisite. Here are the bundle feature > > and the common one : > > > > <?xml version="1.0" encoding="UTF-8" standalone="yes"?> > > <features xmlns="http://karaf.apache.org/xmlns/features/v1.6.0" > > name="my-test-26-karaf-2-routes"> > > > > <repository>mvn:my.tests/my-test-26-karaf-x-feature/0.0.1-SNAPSHOT/xml/features</repository> > > <feature name="my-test-26-karaf-2-routes-cfg" description="Fifi-T26 :: > > Camel routes - Configuration" version="0.0.1.SNAPSHOT"> > > <details>Fifi-T26 :: Camel routes - Configuration</details> > > <configfile > > finalname="/etc/my_test_26_karaf_2_routes.cfg">mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT/cfg/configuration</configfile> > > </feature> > > <feature name="my-test-26-karaf-2-routes" description="Fifi-T26 :: > > Camel" version="0.0.1.SNAPSHOT"> > > <details>Fifi-T26 :: Camel routes</details> > > <feature version="0.0.1-SNAPSHOT" > > prerequisite="true">my-test-26-karaf-x-feature</feature> > > <feature version="0.0.1-SNAPSHOT" > > prerequisite="true">my-test-26-karaf-2-routes-cfg</feature> > > > > <bundle>mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT</bundle> > > </feature> > > </features> > > > > <?xml version="1.0" encoding="UTF-8" standalone="yes"?> > > <features xmlns="http://karaf.apache.org/xmlns/features/v1.6.0" > > name="my-test-26-karaf"> > > > > <repository>mvn:org.apache.camel.karaf/apache-camel/2.25.4/xml/features</repository> > > <feature name="my-test-26-karaf-x-feature" description="Fifi-T26 :: > > Feature" version="0.0.1.SNAPSHOT"> > > <details>Fifi-T26 :: Feature Definition</details> > > <feature>transaction</feature> > > <feature version="2.25.4">camel-spring</feature> > > <feature version="2.25.4">camel-blueprint</feature> > > <feature version="2.25.4">camel-groovy</feature> > > <feature version="2.25.4">camel-csv</feature> > > <feature version="2.25.4">camel-jms</feature> > > <feature version="2.25.4">camel-sql</feature> > > > > <bundle>mvn:my.tests/my-test-26-karaf-1-service/0.0.1-SNAPSHOT</bundle> > > <bundle>mvn:my.tests/my-test-26-karaf-1-api/0.0.1-SNAPSHOT</bundle> > > </feature> > > </features> > > > > The error happens when I try to install my bundle as a feature : > > repo-add mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT/XML/features > > feature:install my-test-26-karaf-2-routes > > > > All the dependent features and their bundles are installed and started as > > expected, and when my bundle is deployed, the missing jms service message > > appears, and the operation fails. > > > > org.apache.felix.resolver.reason.ReasonException: Unable to resolve > > my-test-26-karaf-2-routes/0.0.1.SNAPSHOT: missing requirement > > [my-test-26-karaf-2-routes/0.0.1.SNAPSHOT] osgi.service; effective:=active; > > filter:="(objectClass=javax.jms.ConnectionFactory)" > > > > BUT when I install my bundle manually, it works : no missing service ! > > > > bundle:install -s mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT > > > > The referenced services (my custom ones, a data source and the jms > > connection factory) are all found without any problem, and my routes are > > started, and work as expected, including XA transactions... > > > > What's wrong when the bundle is deployed using its feature ? What is the > > difference between a raw bundle installing and doing the same using the > > feature ? > > > > Thanks again for your help. > > > > Regards. > > > > > > Le mar. 23 août 2022 à 07:09, Jean-Baptiste Onofré <j...@nanthrax.net> a > > écrit : > >> > >> Hi, > >> > >> That's not a problem of package but of OSGi requirement. > >> > >> You can do: > >> - do not include requirement in your my-test... bundle > >> - provide the capability in your feature (similar to > >> https://github.com/apache/karaf/blob/main/examples/karaf-jpa-example/karaf-jpa-example-features/src/main/feature/feature.xml#L28) > >> > >> IMHO, the easiest way is to avoid requirement in your bundle (adding > >> this to the maven-bundle-plugin configuration). > >> > >> So, there's no problem with the packages, etc. The problem is simply > >> the requirement in your bundle (you can see in the MANIFEST of your > >> bundle, you will see a Require-Capability/Require-Service > >> instructions). > >> > >> Regards > >> JB > >> > >> See: > >> > >> On Mon, Aug 22, 2022 at 12:23 PM Ephemeris Lappis > >> <ephemeris.lap...@gmail.com> wrote: > >> > > >> > Hello again. > >> > > >> > As it seems I have no solution to get an implicit connection factory, > >> > I've adapted my POC setting myself a reference. But it seems that it > >> > doesn't work because the service that is created by the jms:create > >> > command doesn't match some class definition. > >> > > >> > In my POC's code I've added a dependency javax.jms-api version 2.0 to > >> > match the API version that the bundle that is deployed is providing. > >> > karaf@root()> exports | grep javax.jms > >> > javax.jms.doc-files │ 2.0.0 │ > >> > 83 │ javax.jms-api > >> > javax.jms │ 2.0.0 │ > >> > 83 │ javax.jms-api > >> > > >> > In my blueprints I've added the service reference, and used it on my JMS > >> > routes : > >> > <reference > >> > id="myJMS" > >> > interface="javax.jms.ConnectionFactory" > >> > availability="mandatory" /> > >> > > >> > <from uri="jms:queue:k1-test-queue-1?connectionFactory=#myJMS" /> > >> > > >> > My bundle's manifest imports the correct package and service : > >> > Import-Package: javax.jms;version="[2.0,3)",my.test.t26.helper;version > >> > ="[0.0,1)",my.test.t26.uow;version="[0.0,1)",org.osgi.service.bluepri > >> > nt;version="[1.0.0,2.0.0)" > >> > Import-Service: javax.jms.ConnectionFactory;multiple:=false,my.test.t2 > >> > 6.helper.Helper;multiple:=false,my.test.t26.uow.CustomUnitOfWorkFacto > >> > ry;multiple:=false > >> > > >> > The service seems to be present on Karaf : > >> > > >> > karaf@root()> jms:connectionfactories > >> > JMS Connection Factory > >> > ────────────────────── > >> > jms/my_amq > >> > > >> > and with service:list : > >> > > >> > [javax.jms.ConnectionFactory] > >> > ----------------------------- > >> > name = my_amq > >> > osgi.jndi.service.name = jms/my_amq > >> > password = secret > >> > pax.jms.managed = true > >> > service.bundleid = 93 > >> > service.factoryPid = org.ops4j.connectionfactory > >> > service.id = 147 > >> > service.pid = > >> > org.ops4j.connectionfactory.4d276d00-2c50-49b0-93f9-18dc16a107ce > >> > service.scope = singleton > >> > type = activemq > >> > url = tcp://localhost:61616 > >> > user = application > >> > Provided by : > >> > OPS4J Pax JMS Config (93) > >> > Used by: > >> > System Bundle (0) > >> > > >> > [javax.management.MBeanRegistration, > >> > org.apache.karaf.features.management.FeaturesServiceMBean, > >> > javax.management.NotificationEmitter, > >> > javax.management.NotificationBroadcaster, javax.management.DynamicMBean, > >> > javax.management.MBeanRegistration] > >> > > >> > But when installing my feature, the services do not match, and I have > >> > the following error :( !!! > >> > > >> > Unable to resolve root: missing requirement [root] osgi.identity; > >> > osgi.identity=my-test-26-karaf-2-routes; type=karaf.feature; > >> > version="[0.0.1.SNAPSHOT,0.0.1.SNAPSHOT]"; > >> > filter:="(&(osgi.identity=my-test-26-karaf-2-routes)(type=karaf.feature)(version>=0.0.1.SNAPSHOT)(version<=0.0.1.SNAPSHOT))" > >> > [caused by: Unable to resolve my-test-26-karaf-2-routes/0.0.1.SNAPSHOT: > >> > missing requirement [my-test-26-karaf-2-routes/0.0.1.SNAPSHOT] > >> > osgi.identity; osgi.identity=my-test-26-karaf-2-routes; > >> > type=osgi.bundle; version="[0.0.1.SNAPSHOT,0.0.1.SNAPSHOT]"; > >> > resolution:=mandatory [caused by: Unable to resolve > >> > my-test-26-karaf-2-routes/0.0.1.SNAPSHOT: missing requirement > >> > [my-test-26-karaf-2-routes/0.0.1.SNAPSHOT] osgi.service; > >> > effective:=active; filter:="(objectClass=javax.jms.ConnectionFactory)"]] > >> > > >> > I thought it may come from the class origin, but only one bundle seems > >> > to export it. So I tried to find the issue elsewhere... > >> > > >> > Inspecting the ActiveMQ OSGi bundle : > >> > 52 │ Active │ 80 │ 5.17.1 │ ActiveMQ :: OSGi bundle > >> > > >> > I saw that it also gets the class, but doesn't export it : > >> > > >> > karaf@root()> bundle:classes 52 | grep javax.jms.ConnectionFactory > >> > javax/jms/ConnectionFactory.class | exported: false > >> > > >> > Can I deduce that the JMS connection factory service may have been > >> > created using a bad class from a private package, and this may be the > >> > reason why it doesn't match my reference, and perhaps why the camel-jms > >> > component doesn't detect it ? > >> > > >> > With previous versions of ActiveMQ I think it was working... > >> > > >> > Thanks a lot for your help. > >> > > >> > Regards. > >> > > >> > > >> > Le lun. 22 août 2022 à 07:01, Jean-Baptiste Onofré <j...@nanthrax.net> a > >> > écrit : > >> >> > >> >> Hi, > >> >> > >> >> here's the documentation about camel-activemq: > >> >> https://camel.apache.org/components/3.18.x/activemq-component.html > >> >> > >> >> About the ConnectionFactory, you have to define it as reference in > >> >> your route. You can find an example here: > >> >> > >> >> https://github.com/jbonofre/camel-amq-redelivery/blob/master/src/main/resources/OSGI-INF/blueprint/route.xml > >> >> https://github.com/jbonofre/camel-amq-redelivery/blob/master/src/main/resources/OSGI-INF/blueprint/connectionfactory.xml > >> >> > >> >> Regards > >> >> JB > >> >> > >> >> On Sun, Aug 21, 2022 at 10:22 AM Ephemeris Lappis > >> >> <ephemeris.lap...@gmail.com> wrote: > >> >> > > >> >> > Hello. > >> >> > > >> >> > I've never seen any documentation about "camel-activeemq" : what's the > >> >> > feature that provides it ? > >> >> > > >> >> > As I've said before, I've been trying to use camel-jms but > >> >> > surprisingly > >> >> > my unique connection factory is not detected, and the component asks > >> >> > for > >> >> > an explicit declaration. I thought that one unique connection factory > >> >> > should be taken into account... I've created a unique connection > >> >> > factory > >> >> > using "jms:create" connecting to an external ActiveMQ, and I've > >> >> > checked > >> >> > that the service is present declaring the right interface. Is there a > >> >> > special way of declaring or naming the connexion factory to make it > >> >> > available for routes with camel-jms endpoints ? > >> >> > > >> >> > Thanks a lot for your help. > >> >> > > >> >> > Regards. > >> >> > > >> >> > Ephemeris Lappis > >> >> > > >> >> > Le 21/08/2022 à 08:12, Jean-Baptiste Onofré a écrit : > >> >> > > That's correct: activemq-camel has been removed. > >> >> > > > >> >> > > You can now use camel-jms (recommended) or camel-activeemq. > >> >> > > > >> >> > > You can wrap your own component if needed, but I would rather update > >> >> > > to camel-jms (not so hard to do). > >> >> > > > >> >> > > Regards > >> >> > > JB > >> >> > > > >> >> > > On Fri, Aug 19, 2022 at 12:33 PM Ephemeris Lappis > >> >> > > <ephemeris.lap...@gmail.com> wrote: > >> >> > >> Hello. > >> >> > >> > >> >> > >> I've been working before on ActiveMQ 5.16.5, but as this version > >> >> > >> leads to > >> >> > >> too many problems on Karaf 4.4.1 (spring compatibility among other > >> >> > >> issues), > >> >> > >> I've decided to switch to ActiveMQ 5.17.1. > >> >> > >> > >> >> > >> Before, I think the component camel-activemq was provided by the > >> >> > >> feature > >> >> > >> activemq-camel, but with 5.17.1 it doesn't appear anymore in this > >> >> > >> feature, > >> >> > >> if I'm not wrong... > >> >> > >> > >> >> > >> I've also tried as you suggested to use the jms component in my > >> >> > >> routes, but > >> >> > >> the connection factory I've created to connect to my ActiveMQ > >> >> > >> server is not > >> >> > >> taken into account by the component that requires an explicit > >> >> > >> connection > >> >> > >> factory... Changing all our about 100 camel projects to change from > >> >> > >> activemq to jms and declare a connection factory reference seems > >> >> > >> to be a > >> >> > >> very bad choice for us... > >> >> > >> > >> >> > >> So, from both sides I've issues. > >> >> > >> > >> >> > >> Any idea to get out of this sad situation 😥 ? > >> >> > >> > >> >> > >> Thanks a lot ! > >> >> > >> > >> >> > >> Regards. > >> >> > >> > >> >> > >> PS: Perhaps the documentation on the component should say that it's > >> >> > >> available "Since Camel 1.0" but also only with restriction after a > >> >> > >> given > >> >> > >> version... > >> >> > >> > >> >> > >> > >> >> > >> Le ven. 19 août 2022 à 11:51, Claus Ibsen <claus.ib...@gmail.com> > >> >> > >> a écrit : > >> >> > >> > >> >> > >>> camel-activemq is not out of the box in Apache Camel in Camel v2. > >> >> > >>> It comes from Apache ActiveMQ 5.x instead. > >> >> > >>> > >> >> > >>> However starting from ActiveMQ 5.17 then they dropped their > >> >> > >>> camel-activemq > >> >> > >>> JAR and its no longer available. > >> >> > >>> Instead use the generic camel-jms instead. Or go back to ActiveMQ > >> >> > >>> 5.16.x > >> >> > >>> > >> >> > >>> In the Camel website make sure to browse the components list for > >> >> > >>> the Camel > >> >> > >>> version you use. The list is different per version. > >> >> > >>> > >> >> > >>> > >> >> > >>> On Fri, Aug 19, 2022 at 11:35 AM Ephemeris Lappis < > >> >> > >>> ephemeris.lap...@gmail.com> wrote: > >> >> > >>> > >> >> > >>>> Hello. > >> >> > >>>> > >> >> > >>>> I've already asked the question, but probably not clearly... > >> >> > >>>> > >> >> > >>>> I don't understand why I can't resolve the dependency for : > >> >> > >>>> org.apache.camel:camel-activemq:jar:2.25.4 > >> >> > >>>> > >> >> > >>>> I used this component for a long time on old servicemix > >> >> > >>>> environments, > >> >> > >>>> and I'm trying to port my projects to Karaf using Camel 2.25.4 > >> >> > >>>> (and > >> >> > >>>> ActiveMQ 5.17.1). > >> >> > >>>> > >> >> > >>>> The component is still documented on the Camel components list, > >> >> > >>>> but I > >> >> > >>>> can't find it. > >> >> > >>>> > >> >> > >>>> Any help ? > >> >> > >>>> > >> >> > >>>> Thanks in advance. > >> >> > >>>> > >> >> > >>>> Regards. > >> >> > >>>> > >> >> > >>> > >> >> > >>> -- > >> >> > >>> Claus Ibsen > >> >> > >>> ----------------- > >> >> > >>> http://davsclaus.com @davsclaus > >> >> > >>> Camel in Action 2: https://www.manning.com/ibsen2 > >> >> > >>> > >> >> > > >> >> > -- > >> >> > Cet e-mail a été vérifié par le logiciel antivirus d'Avast. > >> >> > www.avast.com