Hi Paul,

Thanks for the update. I agree: it seems something about your application 
and/or environment.

I will take a look tomorrow (I’m busy tonight).

Regards
JB

> Le 13 sept. 2020 à 16:53, Paul Spencer <[email protected]> a écrit :
> 
> JB,
> I have created a simplified example based on the Karaf Booking examples and 
> the JNDI service lookup works are you expected, which means there is 
> something about my service or environment that is preventing the service from 
> being accessible via JNDI within a PAX-WEB environment.
> 
> Paul Spencer
> 
>> On Sep 10, 2020, at 10:19 AM, Paul Spencer <[email protected]> 
>> wrote:
>> 
>> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 
>>>>> 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 <[email protected]> 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 <[email protected]> 
>>>>>>>> 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 <[email protected]> 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
>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> 
> 

Reply via email to