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