JB, Keep in mind the web application, .war not .wab, correctly retrieved a Bluetooth define service. It is the @Component defined service that was not found.
Is there some additional information I can provide? Below are the methods used to retrieve services via JNDI, I can add additional logging if needed. import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NameNotFoundException; import javax.naming.NamingException; protected <T> T getServiceViaJndi(Context ctx, Class<T> serviceInterfaceClass) { T service = null; String serviceInterface = serviceInterfaceClass.getCanonicalName(); try { service = (T) ctx.lookup("osgi:service/" + serviceInterface); } catch (NameNotFoundException e) { getLogger().warn("Not Found Service " + serviceInterface, e); } catch (NamingException e) { getLogger().warn("Exception Loading Service " + serviceInterface, e); } getLogger().info("Loaded Service {} = {}", serviceInterface, service); return service; } protected <T> T getServiceViaJndi(Class<T> serviceInterfaceClass) { try { Context ctx = new InitialContext(); return getServiceViaJndi(ctx, serviceInterfaceClass); } catch (NamingException e) { getLogger().error("Getting " + serviceInterfaceClass.getName(), e); return null; } } Paul Spencer > On Sep 9, 2020, at 2:22 PM, Jean-Baptiste Onofre <j...@nanthrax.net> wrote: > > If the InitialContextFactory is the one of Karaf (not one embedded in the > WebApplication), it should work. > I suspect that, as you don’t have the import, when you do new > InitialContextFactory in the WAR (in its own class loader), you don’t > actually the context factory from Karaf. > > Let me prepare a test case to check this. > > Regards > JB > >> Le 9 sept. 2020 à 18:52, Paul Spencer <paulspen...@mindspring.com> a écrit : >> >> JB, >> 1) I am using “new InitialContext()” as defined in the 4.17.3 of the Karaf >> Container Documentation. >> >> 2) The application is deployed as a WAR >> >> Paul Spencer >> >>> On Sep 9, 2020, at 12:39 PM, Jean-Baptiste Onofre <j...@nanthrax.net> wrote: >>> >>> Does your WebApplication use the InitialContextFactory from Karaf ? >>> >>> I mean: how do you deploy your WebApplication ? As WebBundle or WAR ? >>> >>> About JNDI "name" for service, you just have to add osgi.jndi.service.name >>> service property. >>> >>> For instance, using "pure" Activator, you can do: >>> >>> Hashtable<String, String> serviceProperties = new Hashtable(); >>> serviceProperties.put("osgi.jndi.service.name", "my/foo"); >>> ref = bundleContext.registerService(Foo.class, foo, serviceProperties); >>> >>> Regards >>> JB >>> >>>> Le 9 sept. 2020 à 18:31, Paul Spencer <paulspen...@mindspring.com> a écrit >>>> : >>>> >>>> JB, >>>> 1) The feature JNDI feature is install. >>>> >>>> 2) I have a OSGi command that has access to the >>>> TouchPointManagerWebService service via JNDI. It is the Web Application >>>> that has no access to the TouchPointManagerWebService service. Both the >>>> command and the Web Application have access to the EwmConfigurationService >>>> service. The EwmConfigurationService Is defined via Blueprint. >>>> >>>> 3) Please provide an example of “You can also add a service property >>>> osgi.jndi.name to simplify the lookup.” >>>> >>>> *** >>>> * Supporting information >>>> **** >>>> karaf@ewm-server()> bundle:services -p ewm-tpm-client ewm-configuration >>>> >>>> TouchPoint Manager Web Service Client (186) provides: >>>> -------------------------------------------------------------- >>>> component.id = 29 >>>> component.name = >>>> com.example.touchPointClient.internal.TouchPointWebServiceImpl >>>> objectClass = >>>> [com.example.touchPointWsApi.webServices.TouchPointManagerWebService] >>>> service.bundleid = 186 >>>> service.id = 253 >>>> service.scope = bundle >>>> >>>> Configuration (176) provides: >>>> -------------------------------------- >>>> objectClass = [com.example.core.services.EwmConfigurationService] >>>> osgi.service.blueprint.compname = ewmConfigurationService >>>> service.bundleid = 176 >>>> service.id = 219 >>>> service.scope = bundle >>>> ---- >>>> objectClass = [org.osgi.service.blueprint.container.BlueprintContainer] >>>> osgi.blueprint.container.symbolicname = ewm-configuration >>>> osgi.blueprint.container.version = 2.0.0.SNAPSHOT >>>> service.bundleid = 176 >>>> service.id = 250 >>>> service.scope = singleton >>>> karaf@root()> >>>> >>>> karaf@ root()> feature:list --installed | grep -i jndi >>>> >>>> >>>> >>>> jndi │ 4.2.9 │ x │ Started │ >>>> enterprise-4.2.9 │ OSGi Service Registry JNDI access >>>> karaf@root()> list -t 0| grep -i jndi >>>> 84 │ Active │ 30 │ 9.4.28.v20200408 │ Jetty :: JNDI Naming >>>> 197 │ Active │ 30 │ 1.1.0 │ Apache Aries JNDI API >>>> 198 │ Active │ 30 │ 1.0.2 │ Apache Aries JNDI Core >>>> 199 │ Active │ 30 │ 1.0.0 │ Apache Aries JNDI Support >>>> for Legacy Runtimes >>>> 200 │ Active │ 30 │ 1.0.0 │ Apache Aries JNDI RMI >>>> Handler >>>> 201 │ Active │ 30 │ 1.1.0 │ Apache Aries JNDI URL >>>> Handler >>>> 202 │ Active │ 30 │ 4.2.9 │ Apache Karaf :: JNDI :: Core >>>> karaf@root()> jndi:names >>>> JNDI Name │ Class Name >>>> ────────────────────────┼─────────────────────────────────────────────── >>>> osgi:service/jndi │ org.apache.karaf.jndi.internal.JndiServiceImpl >>>> osgi:service/jdbc/test │ org.postgresql.jdbc2.optional.SimpleDataSource >>>> karaf@root()> >>>> >>>> >>>> Paul Spencer >>>> >>>> >>>>>> On Sep 9, 2020, at 12:07 PM, Jean-Baptiste Onofre <j...@nanthrax.net> >>>>>> wrote: >>>>> >>>>> Hi Paul, >>>>> >>>>> If your component expose a service (that you can see with bundle:services >>>>> for instance), and you have also the jndi feature installed, nothing to >>>>> do: you will have the JNDI name mapped to the OSGi service (it’s not >>>>> related to blueprint or DS, it’s directly service). You can also add a >>>>> service property osgi.jndi.name to simplify the lookup. >>>>> >>>>> Regards >>>>> JB >>>>> >>>>>> Le 9 sept. 2020 à 18:03, Paul Spencer <paulspen...@mindspring.com> a >>>>>> écrit : >>>>>> >>>>>> Karaf 4.2.9 >>>>>> PAX-WEB 7.2.16 >>>>>> >>>>>> I have a running in a MyFaces web application and I am not getting an >>>>>> OSGi Service defined via @Component via JNDI? >>>>>> >>>>>> I am following the "OSGi Services Registry and JNDI" documentation in >>>>>> https://karaf.apache.org/manual/latest/#_naming_jndi to access the >>>>>> service. Services defined via Blueprint are available to the web >>>>>> application where as services defined via @Component are not. >>>>>> Specifically the ctx.lookup(“osgi:service/...”) returns null for >>>>>> services define via @Component. >>>>>> >>>>>> What is needed for services defined using @Component >>>>>> (org.osgi.service.component.annotations.Component) to be available to a >>>>>> Web Application using PAX-WEB via the JNDI schema >>>>>> osgi:service/<interface>[/<filter>] ? >>>>>> >>>>>> Note: I have defined command in Karaf that is able to access the >>>>>> service via @Reference >>>>>> (org.apache.karaf.shell.api.action.lifecycle.Reference) and the JNDI >>>>>> schema osgi:service/<interface>[/<filter>] >>>>>> >>>>>> >>>>>> *** >>>>>> * Environment information >>>>>> *** >>>>>> karaf@root()> feature:list --installed | grep -i pax >>>>>> >>>>>> >>>>>> >>>>>> pax-http-service │ 7.2.16 │ │ Started │ >>>>>> standard-4.2.9 │ Pax-Web OSGi HTTP Service >>>>>> pax-web-core │ 7.2.16 │ │ Started │ >>>>>> org.ops4j.pax.web-7.2.16 │ Provide Core pax-web bundles >>>>>> pax-jetty │ 9.4.28.v20200408 │ │ Started │ >>>>>> org.ops4j.pax.web-7.2.16 │ Provide Jetty engine support >>>>>> pax-http-jetty │ 7.2.16 │ │ Started │ >>>>>> org.ops4j.pax.web-7.2.16 │ >>>>>> pax-http │ 7.2.16 │ │ Started │ >>>>>> org.ops4j.pax.web-7.2.16 │ Implementation of the OSGI HTTP Service >>>>>> pax-http-whiteboard │ 7.2.16 │ │ Started │ >>>>>> org.ops4j.pax.web-7.2.16 │ Provide HTTP Whiteboard pattern support >>>>>> pax-war │ 7.2.16 │ x │ Started │ >>>>>> org.ops4j.pax.web-7.2.16 │ Provide support of a full WebContainer >>>>>> pax-transx-tm-api │ 0.4.4 │ │ Started │ >>>>>> pax-transx-0.4.4 │ >>>>>> pax-transx-tm-geronimo │ 0.4.4 │ │ Started │ >>>>>> pax-transx-0.4.4 │ >>>>>> pax-jdbc-spec │ 1.4.4 │ │ Started │ >>>>>> org.ops4j.pax.jdbc-1.4.4 │ Provides OSGi JDBC Service spec >>>>>> pax-jdbc │ 1.4.4 │ │ Started │ >>>>>> org.ops4j.pax.jdbc-1.4.4 │ Provides JDBC Service support >>>>>> pax-jdbc-config │ 1.4.4 │ │ Started │ >>>>>> org.ops4j.pax.jdbc-1.4.4 │ Provides JDBC Config support >>>>>> pax-jdbc-postgresql │ 1.4.4 │ x │ Started │ >>>>>> org.ops4j.pax.jdbc-1.4.4 │ Provides JDBC PostgreSQL DataSourceFactory >>>>>> pax-cdi │ 1.1.3 │ x │ Started │ >>>>>> org.ops4j.pax.cdi-1.1.3 │ Provide CDI support >>>>>> pax-cdi-weld │ 1.1.3 │ │ Started │ >>>>>> org.ops4j.pax.cdi-1.1.3 │ Weld CDI 1.2 support >>>>>> karaf@root()> list | grep -i pax >>>>>> 133 │ Active │ 80 │ 1.4.4 │ OPS4J Pax JDBC Generic >>>>>> Driver Extender >>>>>> 134 │ Active │ 80 │ 1.4.4 │ OPS4J Pax JDBC Config >>>>>> 135 │ Active │ 80 │ 1.4.4 │ OPS4J Pax JDBC Pooling >>>>>> Support Base >>>>>> 143 │ Active │ 80 │ 0.4.4 │ pax-transx-tm-api >>>>>> 144 │ Active │ 80 │ 0.4.4 │ pax-transx-tm-geronimo >>>>>> 233 │ Active │ 80 │ 1.1.3 │ OPS4J Pax CDI Bean Bundle >>>>>> API >>>>>> 234 │ Active │ 80 │ 1.1.3 │ OPS4J Pax CDI Extender for >>>>>> Bean Bundles >>>>>> 235 │ Active │ 80 │ 1.1.3 │ OPS4J Pax CDI Portable >>>>>> Extension for OSGi >>>>>> 236 │ Active │ 80 │ 1.1.3 │ OPS4J Pax CDI Service >>>>>> Provider Interface >>>>>> 237 │ Active │ 80 │ 1.1.3 │ OPS4J Pax CDI Weld Adapter >>>>>> karaf@root()> >>>>>> karaf@root()> list | grep -i faces >>>>>> 230 │ Resolved │ 80 │ 5.1.0 │ primefaces >>>>>> 240 │ Resolved │ 80 │ 2.2.12 │ Apache MyFaces JSF-2.2 >>>>>> Core API >>>>>> 242 │ Resolved │ 80 │ 2.2.12 │ Apache MyFaces JSF-2.2 >>>>>> Core Impl >>>>>> >>>>>> Paul Spencer >>>>>> >>>>>> >>>>> >>>> >>> >> >