Hi,

It's normal that the bundle works outside of the feature: it's the
feature resolver who checks the requirements/capabilities of the
bundles/features.

And you didn't get my point: the fact that a ConnectionFactory service
is there or not at runtime doesn't matter. The most important is to
have a bundle/feature that provides the service capability (not the
service itself).

Regards
JB

On Thu, Aug 25, 2022 at 1:45 PM Ephemeris Lappis
<ephemeris.lap...@gmail.com> wrote:
>
> 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

Reply via email to