felix-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bengt Rodehav <be...@rodehav.com>
Subject Re: Using iPojo interceptors
Date Mon, 09 Dec 2013 07:19:53 GMT
Going back to the mailing list again. Just didn't want to send our java
code on a public list.

/Bengt


2013/12/9 Bengt Rodehav <bengt@rodehav.com>

> OK - I hadn't noticed that the parent classes kept a list...
>
> In my case, however, I only want to intercept certain instances (the ones
> with the factory name equals to "connect.generic2". In the open method I
> check the factory name and then store my houskeeping information in a map
> with the dependency model as a key. In my callbacks I can then check
> whether the dependency model is in the map or not. If it is, then my logic
> should kick in otherwise not.
>
> /Bengt
>
>
> 2013/12/9 Clement Escoffier <clement.escoffier@gmail.com>
>
>> Hi,
>>
>>
>> On 9 déc. 2013, at 08:02, Bengt Rodehav <bengt@rodehav.com> wrote:
>>
>> Here is my inteceptor Clement. It's a bit polluted with logging since
>> I've been trying to find out what the problem is. Also, I wasn't sure
>> whether it was OK to add add the property "intercepted" more than once.
>> Therefore I now hold all the intercepted instances in a Map to be able to
>> store some housekeeping stuff. Not sure what would be the best practice
>> here.
>>
>>
>> Thanks,
>> Just had a very quick look.
>>
>> In my case I've just extended DefaultDependencyInterceptor avoiding
>> maintaining my own list. You should be able to add ‘intercepted’ several
>> times as it’s backed in a map, so the previous value is overridden.
>>
>> Will have a closer look Today,
>>
>> Regards,
>>
>> Clement
>>
>>
>> I deploy this in Karaf 2.3.3.
>>
>> /Benke
>>
>>
>> 2013/12/9 Bengt Rodehav <bengt@rodehav.com>
>>
>>> I'll send the java code to your personal email Clement,
>>>
>>> /Bengt
>>>
>>>
>>> 2013/12/8 Clement Escoffier <clement.escoffier@gmail.com>
>>>
>>>> Hi,
>>>>
>>>> Would you be able to send me your interceptor class ? Indeed, my tests
>>>> work as expected.
>>>> Here is my code: https://gist.github.com/cescoffier/7859472
>>>>
>>>> Regards,
>>>>
>>>> Clement
>>>>
>>>> On 6 déc. 2013, at 16:47, Bengt Rodehav <bengt@rodehav.com> wrote:
>>>>
>>>> > No rush - I was just curious.I think it's an interesting use case
>>>> myself
>>>> > and allows me to dynamically build camel routes with a number of
>>>> predefined
>>>> > "bricks/components". Very useful for us.
>>>> >
>>>> > /Bengt
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > 2013/12/6 Clement Escoffier <clement.escoffier@gmail.com>
>>>> >
>>>> >> Not yet, was travelling (finally back to my office). Will check
>>>> today or
>>>> >> tomorrow.
>>>> >> Actually, your use case make me think to a very interesting
>>>> application
>>>> >> I’m working on. So, for sure you will get news soon.
>>>> >>
>>>> >> Regards,
>>>> >>
>>>> >> Clement
>>>> >>
>>>> >> On 6 déc. 2013, at 15:25, Bengt Rodehav <bengt@rodehav.com> wrote:
>>>> >>
>>>> >>> Did you have any chance to check this Clement?
>>>> >>>
>>>> >>> /Bengt
>>>> >>>
>>>> >>>
>>>> >>> 2013/12/3 Clement Escoffier <clement.escoffier@gmail.com>
>>>> >>>
>>>> >>>>
>>>> >>>> On 3 déc. 2013, at 19:23, Bengt Rodehav <bengt@rodehav.com> wrote:
>>>> >>>>
>>>> >>>>> Yes, I think I'm getting close now but it's been a bit more
>>>> complicated
>>>> >>>>> than I expected. I learn a lot about iPojo though.
>>>> >>>>>
>>>> >>>>> About triggering a re-compute...
>>>> >>>>>
>>>> >>>>> In my case The set of accepted services will not change. But my
>>>> propety
>>>> >>>>> "extenders" has changed so The services must still be recomputed.
>>>> I
>>>> >> need
>>>> >>>> to
>>>> >>>>> force it.
>>>> >>>>
>>>> >>>> Then calling mDependencyModel.invalidateSelectedServices() should
>>>> make
>>>> >> it
>>>> >>>> work. I will check why it’s not called.
>>>> >>>>
>>>> >>>> Regards,
>>>> >>>>
>>>> >>>> Clement
>>>> >>>>
>>>> >>>>>
>>>> >>>>> /Bengt
>>>> >>>>> Den 3 dec 2013 17:32 skrev "Clement Escoffier" <
>>>> >>>> clement.escoffier@gmail.com
>>>> >>>>>> :
>>>> >>>>>
>>>> >>>>>> Hi,
>>>> >>>>>>
>>>> >>>>>> It looks you are making great progresses.
>>>> >>>>>>
>>>> >>>>>> On 3 déc. 2013, at 17:13, Bengt Rodehav <bengt@rodehav.com>
>>>> wrote:
>>>> >>>>>>
>>>> >>>>>>> Thanks Clement,
>>>> >>>>>>>
>>>> >>>>>>> When I started using the bundle context retrieved using:
>>>> >>>>>>>
>>>> >>>>>>> BundleContext bc = model.getComponentInstance().getContext();
>>>> >>>>>>>
>>>> >>>>>>> then it started to work even without using the
>>>> >> "getWrappedReference()".
>>>> >>>>>> Not
>>>> >>>>>>> sure why but it does work.
>>>> >>>>>>
>>>> >>>>>> Yes, the bundle context retrieved this way is an ‘iPOJO-aware’
>>>> bundle
>>>> >>>>>> context, aware of the transformation aspect.
>>>> >>>>>>
>>>> >>>>>>>
>>>> >>>>>>> I've now added a configuration listener in the open() method
>>>> that I
>>>> >>>>>> remove
>>>> >>>>>>> in the close() method. The notifications seem to work as well.
>>>> >>>>>>>
>>>> >>>>>>> In my  listener I try to trigger a recomputing of the service
>>>> >>>>>> dependencies
>>>> >>>>>>> (that I currently now do in the "getServiceReferences()" method
>>>> as
>>>> >>>>>> follows:
>>>> >>>>>>>
>>>> >>>>>>>     mDependencyModel.invalidateMatchingServices();
>>>> >>>>>>>     mDependencyModel.invalidateSelectedServices();
>>>> >>>>>>>
>>>> >>>>>>> This seems to trigger a new call to accept() but no call to
>>>> >>>>>>> getServiceReferences(). How can I accomplish that?
>>>> >>>>>>
>>>> >>>>>> First, I think that the first call would be enough. If the set of
>>>> >>>> accepted
>>>> >>>>>> services change, then the getServiceReferences should be called.
>>>> >>>>>>
>>>> >>>>>> Clement
>>>> >>>>>>
>>>> >>>>>>>
>>>> >>>>>>> /Bengt
>>>> >>>>>>>
>>>> >>>>>>>
>>>> >>>>>>> 2013/12/3 Clement Escoffier <clement.escoffier@gmail.com>
>>>> >>>>>>>
>>>> >>>>>>>> Hi,
>>>> >>>>>>>>
>>>> >>>>>>>> The error is ‘expected’ as interceptors are dealing with
>>>> transformed
>>>> >>>>>>>> service references and not (genuine) service references. Try
>>>> to use
>>>> >>>>>>>> `transformed.getWrappedReference()` to retrieve the original
>>>> >>>> reference.
>>>> >>>>>>>>
>>>> >>>>>>>> Regards,
>>>> >>>>>>>>
>>>> >>>>>>>> Clement
>>>> >>>>>>>>
>>>> >>>>>>>> On 3 déc. 2013, at 10:57, Bengt Rodehav <bengt@rodehav.com>
>>>> wrote:
>>>> >>>>>>>>
>>>> >>>>>>>>> I've tried something like this:
>>>> >>>>>>>>>
>>>> >>>>>>>>> BundleContext bundleContext =
>>>> >>>>>>>>>
>>>> FrameworkUtil.getBundle(IRouteExtender.class).getBundleContext();
>>>> >>>>>>>>>
>>>> >>>>>>>>> for (ServiceReference ref : theMatchingRefs) {
>>>> >>>>>>>>> IRouteExtender extender = (IRouteExtender)
>>>> >>>>>>>> bundleContext.getService(ref);
>>>> >>>>>>>>> // Causes exception
>>>> >>>>>>>>> System.out.println("Found extender with id: " +
>>>> >>>>>>>> extender.getExtenderId());
>>>> >>>>>>>>> }
>>>> >>>>>>>>>
>>>> >>>>>>>>> But I get the following exception:
>>>> >>>>>>>>>
>>>> >>>>>>>>> ERROR: Bundle se.digia.connect.services.generic.service [164]
>>>> >>>>>>>>> EventDispatcher: Error during dispatch.
>>>> >>>> (java.lang.ClassCastException:
>>>> >>>>>>>>>
>>>> >>>>
>>>> org.apache.felix.ipojo.dependency.impl.TransformedServiceReferenceImpl
>>>> >>>>>>>>> cannot be cast to
>>>> >>>>>>>>>
>>>> >>>>>>
>>>> >>
>>>> org.apache.felix.framework.ServiceRegistrationImpl$ServiceReferenceImpl)
>>>> >>>>>>>>> java.lang.ClassCastException:
>>>> >>>>>>>>>
>>>> >>>>
>>>> org.apache.felix.ipojo.dependency.impl.TransformedServiceReferenceImpl
>>>> >>>>>>>>> cannot be cast to
>>>> >>>>>>>>>
>>>> >>>>
>>>> org.apache.felix.framework.ServiceRegistrationImpl$ServiceReferenceImpl
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.framework.ServiceRegistry.getService(ServiceRegistry.java:250)
>>>> >>>>>>>>>    at
>>>> org.apache.felix.framework.Felix.getService(Felix.java:3420)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.framework.BundleContextImpl.getService(BundleContextImpl.java:468)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> se.digia.connect.service.generic.service.ExtenderInterceptor.__M_calculateExtenders(ExtenderInterceptor.java:104)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> se.digia.connect.service.generic.service.ExtenderInterceptor.calculateExtenders(ExtenderInterceptor.java)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> se.digia.connect.service.generic.service.ExtenderInterceptor.__M_getServiceReferences(ExtenderInterceptor.java:84)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> se.digia.connect.service.generic.service.ExtenderInterceptor.getServiceReferences(ExtenderInterceptor.java)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.dependency.interceptors.DefaultServiceRankingInterceptor.onServiceArrival(DefaultServiceRankingInterceptor.java:61)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.dependency.impl.ServiceReferenceManager.applyRankingOnArrival(ServiceReferenceManager.java:559)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.dependency.impl.ServiceReferenceManager.onNewMatchingService(ServiceReferenceManager.java:510)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.dependency.impl.ServiceReferenceManager.addedService(ServiceReferenceManager.java:496)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.util.Tracker$Tracked.trackAdding(Tracker.java:711)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> org.apache.felix.ipojo.util.Tracker$Tracked.track(Tracker.java:672)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.util.Tracker$Tracked.serviceChanged(Tracker.java:633)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:932)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:793)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:543)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4260)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>
>>>> org.apache.felix.framework.Felix.registerService(Felix.java:3275)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:346)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.IPojoContext.registerService(IPojoContext.java:395)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.handlers.providedservice.ProvidedService.registerService(ProvidedService.java:338)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandler.__M_stateChanged(ProvidedServiceHandler.java:484)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandler.stateChanged(ProvidedServiceHandler.java)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:536)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>
>>>> org.apache.felix.ipojo.InstanceManager.start(InstanceManager.java:418)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.java:179)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:319)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:240)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> org.apache.felix.ipojo.IPojoFactory.updated(IPojoFactory.java:737)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.ConfigurationTracker.registerFactory(ConfigurationTracker.java:100)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.IPojoFactory.computeFactoryState(IPojoFactory.java:846)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.ComponentFactory.addedService(ComponentFactory.java:400)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.util.Tracker$Tracked.trackAdding(Tracker.java:711)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.util.Tracker$Tracked.trackInitialServices(Tracker.java:596)
>>>> >>>>>>>>>    at
>>>> org.apache.felix.ipojo.util.Tracker.open(Tracker.java:210)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.ComponentFactory.starting(ComponentFactory.java:249)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>
>>>> org.apache.felix.ipojo.IPojoFactory.start(IPojoFactory.java:671)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.extender.internal.linker.ManagedType$ExtensionSupport$1.call(ManagedType.java:229)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.extender.internal.linker.ManagedType$ExtensionSupport$1.call(ManagedType.java:216)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> org.apache.felix.ipojo.extender.internal.queue.JobInfoCallable.call(JobInfoCallable.java:114)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>>>> >>>>>>>>>    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>>>> >>>>>>>>>    at
>>>> >>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>>>> >>>>>>>>>    at java.lang.Thread.run(Thread.java:662)
>>>> >>>>>>>>>
>>>> >>>>>>>>> Any ideas?
>>>> >>>>>>>>>
>>>> >>>>>>>>> BTW, the exception is only logged in the console - not in any
>>>> log
>>>> >>>>>> files.
>>>> >>>>>>>>>
>>>> >>>>>>>>> /Bengt
>>>> >>>>>>>>>
>>>> >>>>>>>>>
>>>> >>>>>>>>>
>>>> >>>>>>>>>
>>>> >>>>>>>>> 2013/12/3 Bengt Rodehav <bengt@rodehav.com>
>>>> >>>>>>>>>
>>>> >>>>>>>>>> I've now tested against trunk and I've come a lot further.
>>>> Another
>>>> >>>>>>>>>> question for you...
>>>> >>>>>>>>>>
>>>> >>>>>>>>>> I need access to my service object in the
>>>> getServiceReferences()
>>>> >>>>>> method.
>>>> >>>>>>>>>> It is possible if I have the BundleContext. In the accept()
>>>> >> method I
>>>> >>>>>> get
>>>> >>>>>>>>>> the BundleContext passed as a parameter but not in the
>>>> >>>>>>>>>> getServiceReferences(). Why is that?
>>>> >>>>>>>>>>
>>>> >>>>>>>>>> How can I access the service object from the
>>>> ServiceReference in
>>>> >> the
>>>> >>>>>>>>>> getServiceReferences() method? Perhaps the signature of the
>>>> >>>>>>>>>> getServiceReferences() method should be changed to take a
>>>> >>>>>> BundleContext
>>>> >>>>>>>> as
>>>> >>>>>>>>>> well?
>>>> >>>>>>>>>>
>>>> >>>>>>>>>> /Bengt
>>>> >>>>>>>>>>
>>>> >>>>>>>>>>
>>>> >>>>>>>>>> 2013/11/29 Bengt Rodehav <bengt@rodehav.com>
>>>> >>>>>>>>>>
>>>> >>>>>>>>>>> Thanks Clement. I'll check out trunk and see how far I'll
>>>> get.
>>>> >>>>>>>>>>>
>>>> >>>>>>>>>>> /Bengt
>>>> >>>>>>>>>>>
>>>> >>>>>>>>>>>
>>>> >>>>>>>>>>> 2013/11/29 Clement Escoffier <clement.escoffier@gmail.com>
>>>> >>>>>>>>>>>
>>>> >>>>>>>>>>>> Hi,
>>>> >>>>>>>>>>>> On 29 nov. 2013, at 16:21, Bengt Rodehav <
>>>> bengt@rodehav.com>
>>>> >>>> wrote:
>>>> >>>>>>>>>>>>
>>>> >>>>>>>>>>>>> Thanks Clement!
>>>> >>>>>>>>>>>>>
>>>> >>>>>>>>>>>>> I compared our code it turns out I had a type: I had
>>>> specified
>>>> >>>> the
>>>> >>>>>>>>>>>> handler
>>>> >>>>>>>>>>>>> to "org.apache.felix.ipojo.properties" instead of
>>>> >>>>>>>>>>>>> "org.apache.felix.ipojo:properties".. I had a period
>>>> instead
>>>> >> of a
>>>> >>>>>>>>>>>> colon.
>>>> >>>>>>>>>>>>> That explains my NPE.
>>>> >>>>>>>>>>>>
>>>> >>>>>>>>>>>> I probably did a mistake while explaining. The syntax is
>>>> >>>>>>>>>>>> namespace:handlername.
>>>> >>>>>>>>>>>>
>>>> >>>>>>>>>>>>>
>>>> >>>>>>>>>>>>> Now I can also retrieve the property. I can also call the
>>>> >>>>>> getValue()
>>>> >>>>>>>>>>>> method
>>>> >>>>>>>>>>>>> that returns the value in "toString" format. Can't get the
>>>> >>>>>>>>>>>> getObjectValue()
>>>> >>>>>>>>>>>>> to work though. Looking forward to the new
>>>> getCurrentValue()
>>>> >>>>>> method.
>>>> >>>>>>>>>>>>
>>>> >>>>>>>>>>>> Unfortunately the getObjectValue only work for immutable
>>>> >>>> properties.
>>>> >>>>>>>>>>>>
>>>> >>>>>>>>>>>>>
>>>> >>>>>>>>>>>>> Is it just the org.apache.felix.ipojo artifact I need to
>>>> check
>>>> >>>> out
>>>> >>>>>>>> and
>>>> >>>>>>>>>>>>> build on trunk?
>>>> >>>>>>>>>>>>
>>>> >>>>>>>>>>>> The following version contains the new method:
>>>> >>>>>>>>>>>>
>>>> >>>>>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> https://repository.apache.org/content/repositories/snapshots/org/apache/felix/org.apache.felix.ipojo/1.11.1-SNAPSHOT/org.apache.felix.ipojo-1.11.1-20131129.182110-3.jar
>>>> >>>>>>>>>>>>
>>>> >>>>>>>>>>>> Clement
>>>> >>>>>>>>>>>>
>>>> >>>>>>>>>>>>>
>>>> >>>>>>>>>>>>> /Bengt
>>>> >>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>
>>>> >>>>>>>>>>>>> 2013/11/29 Clement Escoffier <clement.escoffier@gmail.com
>>>> >
>>>> >>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>> Hi,
>>>> >>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>> I’ve done some testing:
>>>> >>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>> 1) I’m able to retrieve the properties
>>>> >>>>>>>>>>>>>> 2) I’m not able to retrieve the value
>>>> >>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>> Here is my accept method:
>>>> >>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>> @Override
>>>> >>>>>>>>>>>>>> public <S> TransformedServiceReference<S>
>>>> >> accept(DependencyModel
>>>> >>>>>>>>>>>>>> dependency, BundleContext context,
>>>> >>>> TransformedServiceReference<S>
>>>> >>>>>>>>>>>> ref) {
>>>> >>>>>>>>>>>>>>   ConfigurationHandlerDescription h =
>>>> >>>>>>>>>>>>>> (ConfigurationHandlerDescription)
>>>> >>>>>>>>>>>>>>
>>>> dependency.getComponentInstance().getInstanceDescription()
>>>> >>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>
>>>> .getHandlerDescription("org.apache.felix.ipojo:properties");
>>>> >>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>   if (h == null) {
>>>> >>>>>>>>>>>>>>       return null;
>>>> >>>>>>>>>>>>>>   }
>>>> >>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>   PropertyDescription description =
>>>> >>>>>>>>>>>> h.getPropertyByName(“extenders");
>>>> >>>>>>>>>>>>>>   if (description == null) {
>>>> >>>>>>>>>>>>>>       return null;
>>>> >>>>>>>>>>>>>>   }
>>>> >>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>   System.out.println(description.getValue() + " / " +
>>>> >>>>>>>>>>>>>> Arrays.toString(
>>>> >>>>>>>>>>>>>>           (String[]) description.getCurrentValue()));
>>>> >>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>   return ref;
>>>> >>>>>>>>>>>>>> }
>>>> >>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>> I’ve added the getCurrentValue() to PropertyDescription
>>>> to
>>>> >>>>>> retrieve
>>>> >>>>>>>>>>>> the
>>>> >>>>>>>>>>>>>> current property value (gonna commit this ASAP).
>>>> >>>>>>>>>>>>>> (full code here:
>>>> https://gist.github.com/cescoffier/7705901)
>>>> >>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>> Clement
>>>> >>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>> On 28 nov. 2013, at 15:06, Bengt Rodehav <
>>>> bengt@rodehav.com>
>>>> >>>>>> wrote:
>>>> >>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>> Thanks!
>>>> >>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>> 2013/11/28 Clement Escoffier <
>>>> clement.escoffier@gmail.com>
>>>> >>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>> On 28 nov. 2013, at 14:36, Bengt Rodehav <
>>>> bengt@rodehav.com
>>>> >>>
>>>> >>>>>>>> wrote:
>>>> >>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>> Hello Clement,
>>>> >>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>> I changed to the following line:
>>>> >>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>> PropertyDescription[] propDescs =
>>>> >>>>>>>>>>>>>>>>> configHandlerDescription.getProperties();
>>>> >>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>> But I still get an NPE. Have you tried to call these
>>>> >> methods
>>>> >>>>>> from
>>>> >>>>>>>>>>>>>> within
>>>> >>>>>>>>>>>>>>>> an
>>>> >>>>>>>>>>>>>>>>> interceptor?
>>>> >>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>> Not this method, but I did something pretty similar.
>>>> Will
>>>> >>>>>>>>>>>> investigate to
>>>> >>>>>>>>>>>>>>>> see why you get an NPE.
>>>> >>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>> Clement
>>>> >>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>> /Bengt
>>>> >>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>> 2013/11/28 Clement Escoffier <
>>>> clement.escoffier@gmail.com>
>>>> >>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>> On 28 nov. 2013, at 12:17, Bengt Rodehav <
>>>> >> bengt@rodehav.com
>>>> >>>>>
>>>> >>>>>>>>>>>> wrote:
>>>> >>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>> Hello again Clement!
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>> I was away on business yesterday which is why I'm
>>>> late
>>>> >>>>>>>> replying.
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>> I've come a bit further now but still have problems
>>>> >>>> accessing
>>>> >>>>>>>> my
>>>> >>>>>>>>>>>>>>>>>>> component's "extenders" property. Here is what my
>>>> code
>>>> >>>> looks
>>>> >>>>>>>> like
>>>> >>>>>>>>>>>>>> now:
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>> *  public List<ServiceReference>
>>>> >>>>>>>>>>>> getServiceReferences(DependencyModel
>>>> >>>>>>>>>>>>>>>>>>> theDependencyModel,*
>>>> >>>>>>>>>>>>>>>>>>> *      List<ServiceReference> theMatching) {*
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>> *    ComponentInstance instance =
>>>> >>>>>>>>>>>>>>>>>>> theDependencyModel.getComponentInstance();*
>>>> >>>>>>>>>>>>>>>>>>> *    InstanceDescription instanceDescription =
>>>> >>>>>>>>>>>>>>>>>>> instance.getInstanceDescription();*
>>>> >>>>>>>>>>>>>>>>>>> *    ComponentTypeDescription
>>>> componentTypeDescription =
>>>> >>>>>>>>>>>>>>>>>>> instanceDescription.getComponentDescription();*
>>>> >>>>>>>>>>>>>>>>>>> *    String factoryName =
>>>> >>>>>>>>>>>>>>>>>>>
>>>> componentTypeDescription.getFactory().getFactoryName();*
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>> *    if (FACTORY_NAME.equals(factoryName)) {*
>>>> >>>>>>>>>>>>>>>>>>> *      System.out.println("Found a
>>>> GenericService2");*
>>>> >>>>>>>>>>>>>>>>>>> *      ConfigurationHandlerDescription
>>>> >>>>>>>> configHandlerDescription =
>>>> >>>>>>>>>>>>>>>>>>> (ConfigurationHandlerDescription)
>>>> instanceDescription*
>>>> >>>>>>>>>>>>>>>>>>> *
>>>> >>>>>>>>>>>>>>>>
>>>> >> .getHandlerDescription("org.apache.felix.ipojo.properties");*
>>>> >>>>>>>>>>>>>>>>>>> *      int state = instanceDescription.getState();*
>>>> >>>>>>>>>>>>>>>>>>> *      System.out.println("State: " + state);*
>>>> >>>>>>>>>>>>>>>>>>> *      if(ComponentInstance.VALID ==
>>>> >>>>>>>>>>>> instanceDescription.getState())
>>>> >>>>>>>>>>>>>> {*
>>>> >>>>>>>>>>>>>>>>>>> *        PropertyDescription propDesc =
>>>> >>>>>>>>>>>>>>>>>>>
>>>> configHandlerDescription.getPropertyByName("extenders");
>>>> >> //
>>>> >>>>>>>> NPE*
>>>> >>>>>>>>>>>>>>>>>>> *        if(propDesc != null) {*
>>>> >>>>>>>>>>>>>>>>>>> *          String extenders = propDesc.getValue();*
>>>> >>>>>>>>>>>>>>>>>>> *          System.out.println("Extenders: " +
>>>> >> extenders);*
>>>> >>>>>>>>>>>>>>>>>>> *        }*
>>>> >>>>>>>>>>>>>>>>>>> *        else {*
>>>> >>>>>>>>>>>>>>>>>>> *          System.out.println("Extenders is null");*
>>>> >>>>>>>>>>>>>>>>>>> *        }*
>>>> >>>>>>>>>>>>>>>>>>> *      }*
>>>> >>>>>>>>>>>>>>>>>>> *    }*
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>> I check the factory name to determine if this is a
>>>> >>>> component
>>>> >>>>>>>>>>>> that I
>>>> >>>>>>>>>>>>>>>>>> should
>>>> >>>>>>>>>>>>>>>>>>> intercept. Presently I wait until the component is
>>>> valid
>>>> >>>> but
>>>> >>>>>>>> I'm
>>>> >>>>>>>>>>>> not
>>>> >>>>>>>>>>>>>>>> sure
>>>> >>>>>>>>>>>>>>>>>>> if I can wait since my interceptor has to kick in
>>>> before
>>>> >>>>>> that.
>>>> >>>>>>>>>>>>>>>> Presently
>>>> >>>>>>>>>>>>>>>>>> I
>>>> >>>>>>>>>>>>>>>>>>> get a null pointer exception when I try to retrieve
>>>> my
>>>> >>>>>>>> property.
>>>> >>>>>>>>>>>> Do
>>>> >>>>>>>>>>>>>> you
>>>> >>>>>>>>>>>>>>>>>>> have any idea why? It doesn't seem possible to
>>>> retrieve
>>>> >>>>>>>>>>>> properties at
>>>> >>>>>>>>>>>>>>>>>> this
>>>> >>>>>>>>>>>>>>>>>>> pont.
>>>> >>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>> Did you try to inter ate over the set of properties
>>>> and
>>>> >> see
>>>> >>>>>> what
>>>> >>>>>>>>>>>> are
>>>> >>>>>>>>>>>>>>>> they ?
>>>> >>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>> I also noticed that the method
>>>> >>>> PropertyDescription.getValue()
>>>> >>>>>>>>>>>> always
>>>> >>>>>>>>>>>>>>>>>>> returns a String. In my case the underlying object
>>>> is an
>>>> >>>>>> array
>>>> >>>>>>>> of
>>>> >>>>>>>>>>>>>>>> String
>>>> >>>>>>>>>>>>>>>>>>> (String[]). Is it possible to get the value in the
>>>> >> correct
>>>> >>>>>>>> type?
>>>> >>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>> Yes, there is a getObjectValue(BundleContext context)
>>>> >>>> method,
>>>> >>>>>>>> but
>>>> >>>>>>>>>>>> you
>>>> >>>>>>>>>>>>>>>> need
>>>> >>>>>>>>>>>>>>>>>> to give a bundle context object used if it needs to
>>>> load
>>>> >>>>>>>> classes.
>>>> >>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>> Clement
>>>> >>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>> /Bengt
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>> 2013/11/27 Clement Escoffier <
>>>> >> clement.escoffier@gmail.com>
>>>> >>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>> Hi,
>>>> >>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>> On 26 nov. 2013, at 16:00, Bengt Rodehav <
>>>> >>>> bengt@rodehav.com
>>>> >>>>>>>
>>>> >>>>>>>>>>>> wrote:
>>>> >>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>> I'm getting a bit closer regarding the
>>>> interceptors.
>>>> >>>> Still
>>>> >>>>>>>> two
>>>> >>>>>>>>>>>>>>>> problems
>>>> >>>>>>>>>>>>>>>>>>>> for
>>>> >>>>>>>>>>>>>>>>>>>>> me:
>>>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>> a) I still don't understand how to get hold of my
>>>> >>>>>> intercepted
>>>> >>>>>>>>>>>>>>>> instance
>>>> >>>>>>>>>>>>>>>>>>>> from
>>>> >>>>>>>>>>>>>>>>>>>>> within my interceptor. I get a reference to a
>>>> >>>>>> DependencyModel
>>>> >>>>>>>>>>>> from
>>>> >>>>>>>>>>>>>>>>>> which
>>>> >>>>>>>>>>>>>>>>>>>> I
>>>> >>>>>>>>>>>>>>>>>>>>> can get a ComponentInstance. But how do I go from
>>>> there
>>>> >>>> to
>>>> >>>>>> my
>>>> >>>>>>>>>>>>>>>>>> ComponentA
>>>> >>>>>>>>>>>>>>>>>>>>> class. I need to access the property "extenders"
>>>> in
>>>> >> order
>>>> >>>>>> for
>>>> >>>>>>>>>>>> my
>>>> >>>>>>>>>>>>>>>>>>>>> interceptor to do its job.
>>>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>> It depends how how is managed the extender
>>>> property,
>>>> >> let’s
>>>> >>>>>>>>>>>> imagine
>>>> >>>>>>>>>>>>>>>> it’s
>>>> >>>>>>>>>>>>>>>>>> a
>>>> >>>>>>>>>>>>>>>>>>>> @Property. In this case, from the Dependency
>>>> Model, you
>>>> >>>> can
>>>> >>>>>>>>>>>> retrieve
>>>> >>>>>>>>>>>>>>>> the
>>>> >>>>>>>>>>>>>>>>>>>> component instance. From the instance, you have
>>>> access
>>>> >> to
>>>> >>>>>> the
>>>> >>>>>>>>>>>>>>>>>> introspection
>>>> >>>>>>>>>>>>>>>>>>>> layer (getInstanceDescription()), which let you
>>>> analyze
>>>> >>>> the
>>>> >>>>>>>>>>>> iPOJO
>>>> >>>>>>>>>>>>>>>>>> container.
>>>> >>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>> To be a bit more clear, let’s see some code:
>>>> >>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>> //First retrieve the configuration handler
>>>> description
>>>> >>>> from
>>>> >>>>>>>> the
>>>> >>>>>>>>>>>>>>>> instance
>>>> >>>>>>>>>>>>>>>>>>>> container:
>>>> >>>>>>>>>>>>>>>>>>>> ConfigurationHandlerDescription description =
>>>> >>>>>>>>>>>>>>>>>>>> (ConfigurationHandlerDescription)
>>>> >>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>
>>>> model.getComponentInstance().getInstanceDescription().getHandlerDescription("org.apache.felix.ipojo.properties”);
>>>> >>>>>>>>>>>>>>>>>>>> // Find the extenders property
>>>> >>>>>>>>>>>>>>>>>>>> String extenders =
>>>> >>>>>>>>>>>>>>>>>>
>>>> description.getPropertyByName("extenders").getValue();
>>>> >>>>>>>>>>>>>>>>>>>> // You have your value !
>>>> >>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>> b) Also, when the property "extenders" is
>>>> changed, I
>>>> >> need
>>>> >>>>>> to
>>>> >>>>>>>>>>>> force
>>>> >>>>>>>>>>>>>>>> the
>>>> >>>>>>>>>>>>>>>>>>>>> interceptor to recalculate the dependencies. How
>>>> can I
>>>> >>>>>>>>>>>> accomplish
>>>> >>>>>>>>>>>>>>>> that?
>>>> >>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>> It also depends on how this reconfiguration happen.
>>>> >> Let’s
>>>> >>>>>> say
>>>> >>>>>>>>>>>> that
>>>> >>>>>>>>>>>>>> the
>>>> >>>>>>>>>>>>>>>>>>>> instance is reconfigured from the configuration
>>>> admin or
>>>> >>>>>> iPOJO
>>>> >>>>>>>>>>>>>>>>>>>> reconfiguration abilities. In these case being
>>>> notified
>>>> >> is
>>>> >>>>>>>> quite
>>>> >>>>>>>>>>>>>>>>>> simple, as
>>>> >>>>>>>>>>>>>>>>>>>> you can register a ConfigurationListener on the
>>>> >>>>>>>>>>>>>>>>>>>> ConfigurationHandlerDescription object:
>>>> >>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>> description.addListener(new
>>>> ConfigurationListener() {
>>>> >>>>>>>>>>>>>>>>>>>>    public void
>>>> configurationChanged(ComponentInstance
>>>> >>>>>>>>>>>>>> instance,
>>>> >>>>>>>>>>>>>>>>>>>> Map<String, Object> configuration) {
>>>> >>>>>>>>>>>>>>>>>>>>        // The extender property may have been
>>>> modified
>>>> >>>>>>>>>>>>>>>>>>>>    }
>>>> >>>>>>>>>>>>>>>>>>>> });
>>>> >>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>> Don’t forget to unregister the listener when the
>>>> >>>> interceptor
>>>> >>>>>>>> is
>>>> >>>>>>>>>>>>>>>>>> unplugged
>>>> >>>>>>>>>>>>>>>>>>>> from the instance.
>>>> >>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>> Getting deeper into iPojo than I've been before…
>>>> >>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>> It’s just the beginning…. (contributions are
>>>> welcome if
>>>> >>>> you
>>>> >>>>>>>> see
>>>> >>>>>>>>>>>> some
>>>> >>>>>>>>>>>>>>>>>>>> dark(er) area)
>>>> >>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>> /Bengt
>>>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>> 2013/11/26 Bengt Rodehav <bengt@rodehav.com>
>>>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>> Thanks Clement!
>>>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>> 2013/11/26 Clement Escoffier <
>>>> >>>> clement.escoffier@gmail.com
>>>> >>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>> Hi,
>>>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>> On 25 nov. 2013, at 20:19, Bengt Rodehav <
>>>> >>>>>>>> bengt@rodehav.com>
>>>> >>>>>>>>>>>>>>>> wrote:
>>>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>> Hello Clement and as always thanks for your
>>>> detailed
>>>> >>>>>>>> answer!
>>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>> You’re welcome.
>>>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>> It does seem a bit complicated to "require" an
>>>> >>>>>>>> interceptor.
>>>> >>>>>>>>>>>>>>>> Perhaps
>>>> >>>>>>>>>>>>>>>>>> an
>>>> >>>>>>>>>>>>>>>>>>>>>>>> easier way of doing this might be possible in
>>>> the
>>>> >>>>>> future.
>>>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>> I think it would be a good addition. Thinking
>>>> about
>>>> >> it.
>>>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>> Anyway, I'm not
>>>> >>>>>>>>>>>>>>>>>>>>>>>> exactly sure that I understood what you meant.
>>>> Just
>>>> >> to
>>>> >>>>>>>>>>>> clarify:
>>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>> My Component A (the component to be
>>>> intercepted) has
>>>> >>>> the
>>>> >>>>>>>>>>>>>> following
>>>> >>>>>>>>>>>>>>>>>>>> code:
>>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>> @Property(name = "extenders", mandatory =
>>>> false)
>>>> >>>>>>>>>>>>>>>>>>>>>>>> private String[] mExtenderIds;
>>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>> @Requires(optional = true, id = "extenders")
>>>> >>>>>>>>>>>>>>>>>>>>>>>> private IExtender[] mExtenders;
>>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>> Do you mean that I should put a filter on the
>>>> >>>> @Requires
>>>> >>>>>>>> with
>>>> >>>>>>>>>>>>>>>>>>>>>>> id="extenders"
>>>> >>>>>>>>>>>>>>>>>>>>>>>> (the intercepted = true) so that it can only be
>>>> >>>>>> satisfied
>>>> >>>>>>>>>>>> if my
>>>> >>>>>>>>>>>>>>>>>>>>>>> interceptor
>>>> >>>>>>>>>>>>>>>>>>>>>>>> has added that property?
>>>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>> Exactly.
>>>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>> But how do I then handle the situation where my
>>>> >>>>>> Component
>>>> >>>>>>>> A
>>>> >>>>>>>>>>>> does
>>>> >>>>>>>>>>>>>>>> not
>>>> >>>>>>>>>>>>>>>>>>>>>>>> require any extenders? In that case I was
>>>> planning
>>>> >> on
>>>> >>>>>>>>>>>> setting
>>>> >>>>>>>>>>>>>> the
>>>> >>>>>>>>>>>>>>>>>>>>>>>> dependency to optional to make my instance
>>>> valid
>>>> >>>> without
>>>> >>>>>>>> any
>>>> >>>>>>>>>>>>>>>>>>>> extenders.
>>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>> Or, perhaps I could first set the @Requires to
>>>> >>>> mandatory
>>>> >>>>>>>>>>>> (with
>>>> >>>>>>>>>>>>>> the
>>>> >>>>>>>>>>>>>>>>>>>>>>> filter):
>>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>> @Requires(optional = false, id = "extenders",
>>>> >>>>>>>>>>>>>>>>>>>>>>> filter="(intercepted=true)")
>>>> >>>>>>>>>>>>>>>>>>>>>>>> private IExtender[] mExtenders;
>>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>> Then, if my interceptor sees that the instance
>>>> does
>>>> >>>> not
>>>> >>>>>>>>>>>> require
>>>> >>>>>>>>>>>>>>>> any
>>>> >>>>>>>>>>>>>>>>>>>>>>>> extenders it can set the dependency to become
>>>> >>>> optional.
>>>> >>>>>>>> This
>>>> >>>>>>>>>>>>>> way I
>>>> >>>>>>>>>>>>>>>>>>>> both
>>>> >>>>>>>>>>>>>>>>>>>>>>>> require the interceptor (via the filter) and I
>>>> >> ensure
>>>> >>>>>> that
>>>> >>>>>>>>>>>> the
>>>> >>>>>>>>>>>>>>>> only
>>>> >>>>>>>>>>>>>>>>>>>> way
>>>> >>>>>>>>>>>>>>>>>>>>>>> to
>>>> >>>>>>>>>>>>>>>>>>>>>>>> allow the instance to be valid without the
>>>> >> dependency
>>>> >>>> is
>>>> >>>>>>>> if
>>>> >>>>>>>>>>>> the
>>>> >>>>>>>>>>>>>>>>>>>>>>> interceptor
>>>> >>>>>>>>>>>>>>>>>>>>>>>> has explicitly set the dependency to optional.
>>>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>> That would work. You can change the optionality
>>>> >> status
>>>> >>>> of
>>>> >>>>>>>> the
>>>> >>>>>>>>>>>>>>>>>>>> dependency
>>>> >>>>>>>>>>>>>>>>>>>>>>> from the dependency model you get in the
>>>> interceptor.
>>>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>> Regards,
>>>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>> Clement
>>>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>> /Bengt
>>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>> 2013/11/25 Clement Escoffier <
>>>> >>>>>> clement.escoffier@gmail.com
>>>> >>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> On 25 nov. 2013, at 11:04, Bengt Rodehav <
>>>> >>>>>>>>>>>> bengt@rodehav.com>
>>>> >>>>>>>>>>>>>>>>>> wrote:
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> I've started to investigate using iPojo
>>>> >>>> interceptors.
>>>> >>>>>>>> I'm
>>>> >>>>>>>>>>>>>> using
>>>> >>>>>>>>>>>>>>>>>>>> iPojo
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> version 1.11.0. I want to accomplish the
>>>> >> following:
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Component A can be "extended" by specifying
>>>> a list
>>>> >>>> of
>>>> >>>>>>>>>>>>>> (required)
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> "extenders" (actually their id's), like this:
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> @Property(name = "extenders", mandatory =
>>>> false)
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> private String[] mExtenderIds;
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> @Requires(optional = true, id = "extenders")
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> private IExtender[] mExtenders;
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> The property is optional but if any
>>>> extenderId's
>>>> >> are
>>>> >>>>>>>>>>>> listed
>>>> >>>>>>>>>>>>>> then
>>>> >>>>>>>>>>>>>>>>>> the
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> @Requires should require that IExtender's
>>>> with the
>>>> >>>>>>>>>>>>>> corresponding
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> extenderId
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> is started.
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> The IExtender interface contains the
>>>> following
>>>> >>>> method:
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> public String getExtenderId();
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Thus, every extender has an extenderId and
>>>> if that
>>>> >>>> id
>>>> >>>>>> is
>>>> >>>>>>>>>>>>>> listed
>>>> >>>>>>>>>>>>>>>>>> in a
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> components "extender" property then the
>>>> >>>> corresponding
>>>> >>>>>>>>>>>> service
>>>> >>>>>>>>>>>>>>>>>> should
>>>> >>>>>>>>>>>>>>>>>>>>>>> be
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> required, otherwise not.
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> My idea (actually Clement's idea from a
>>>> previous
>>>> >>>>>>>>>>>> conversation
>>>> >>>>>>>>>>>>>> on
>>>> >>>>>>>>>>>>>>>>>>>> this
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> list). is to use a RankingInterceptor that
>>>> returns
>>>> >>>> an
>>>> >>>>>>>>>>>> empty
>>>> >>>>>>>>>>>>>>>> array
>>>> >>>>>>>>>>>>>>>>>>>>>>> until
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> all
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> required services are present.
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> I think this is doable but in order for my
>>>> >>>>>>>>>>>> RankingInterceptor
>>>> >>>>>>>>>>>>>> to
>>>> >>>>>>>>>>>>>>>>>>>>>>> work, it
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> must have access to the component's
>>>> "extenders"
>>>> >>>>>>>> property.
>>>> >>>>>>>>>>>> It
>>>> >>>>>>>>>>>>>>>> would
>>>> >>>>>>>>>>>>>>>>>>>>>>> then
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> go
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> through all the services implementing the
>>>> >> IExtender
>>>> >>>>>>>>>>>> interface
>>>> >>>>>>>>>>>>>>>> and
>>>> >>>>>>>>>>>>>>>>>> if
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> there
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> are extenders corresponding to the required
>>>> >>>>>> extenderId's
>>>> >>>>>>>>>>>> it
>>>> >>>>>>>>>>>>>>>> would
>>>> >>>>>>>>>>>>>>>>>>>>>>> return
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> all of those, otherwise it would return an
>>>> empty
>>>> >>>> list.
>>>> >>>>>>>>>>>> Also,
>>>> >>>>>>>>>>>>>> if
>>>> >>>>>>>>>>>>>>>> a
>>>> >>>>>>>>>>>>>>>>>>>>>>> list of
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> extenderId's was specified, then the service
>>>> >>>>>> dependency
>>>> >>>>>>>>>>>> is set
>>>> >>>>>>>>>>>>>>>> to
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> mandatory, otherwise to optional.
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> My problem is how to gain access to the
>>>> >>>> configuration
>>>> >>>>>>>>>>>> property
>>>> >>>>>>>>>>>>>>>>>> (the
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> "extenders" property) of my component from
>>>> the
>>>> >>>>>>>>>>>> interceptor.
>>>> >>>>>>>>>>>>>> How
>>>> >>>>>>>>>>>>>>>>>> can
>>>> >>>>>>>>>>>>>>>>>>>> I
>>>> >>>>>>>>>>>>>>>>>>>>>>> do
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> this?
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> When the interceptor is hooked to a
>>>> dependency, it
>>>> >>>>>>>>>>>> receives the
>>>> >>>>>>>>>>>>>>>>>>>>>>> dependency
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> model object. From this object you can
>>>> retrieve the
>>>> >>>>>>>>>>>> component
>>>> >>>>>>>>>>>>>>>>>>>> instance
>>>> >>>>>>>>>>>>>>>>>>>>>>> and
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> get the introspection metadata.
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Another question I have is how to make sure
>>>> that
>>>> >> the
>>>> >>>>>>>>>>>>>> interceptor
>>>> >>>>>>>>>>>>>>>>>> is
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> active.
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> If the interceptor is not active then my
>>>> component
>>>> >>>>>> could
>>>> >>>>>>>>>>>>>> become
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> erroneously
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> valid. Would it be feasible to have a
>>>> mandatory
>>>> >>>>>>>>>>>> dependency on
>>>> >>>>>>>>>>>>>>>> the
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> interceptor?
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> Unfortunately not, at least not easily. What
>>>> you
>>>> >> can
>>>> >>>> do
>>>> >>>>>>>> is
>>>> >>>>>>>>>>>> a
>>>> >>>>>>>>>>>>>>>>>>>>>>> combination
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> between a filter and two interceptors: the
>>>> ranking
>>>> >>>>>>>>>>>> interceptors
>>>> >>>>>>>>>>>>>>>> as
>>>> >>>>>>>>>>>>>>>>>>>> you
>>>> >>>>>>>>>>>>>>>>>>>>>>> did,
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> and a tracking interceptor. Let me explain:
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> Let’s imagine your consumer with your service
>>>> >>>>>> dependency.
>>>> >>>>>>>>>>>> Add a
>>>> >>>>>>>>>>>>>>>>>>>> filter
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> that will be resolved only if your
>>>> interceptor is
>>>> >>>>>> there,
>>>> >>>>>>>>>>>>>>>> something
>>>> >>>>>>>>>>>>>>>>>>>>>>> like:
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> (intercepted=true).
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> Your interceptor implement both tracking and
>>>> >> ranking
>>>> >>>>>>>>>>>>>>>> interceptors.
>>>> >>>>>>>>>>>>>>>>>>>> When
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> the accept method is called on your
>>>> interceptor, it
>>>> >>>>>> can
>>>> >>>>>>>>>>>>>>>>>> ‘transform’
>>>> >>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> original service reference to add the
>>>> ‘intercepted’
>>>> >>>>>>>>>>>> property
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> (ref.addProperty(“intercepted”, true);) This
>>>> >> modified
>>>> >>>>>>>>>>>> service
>>>> >>>>>>>>>>>>>>>>>>>> reference
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> matches your filter. Then, do your ranking
>>>> policy
>>>> >> are
>>>> >>>>>> we
>>>> >>>>>>>>>>>>>>>> discussed.
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> This solution ensure that your dependency can
>>>> only
>>>> >> be
>>>> >>>>>>>>>>>> resolved
>>>> >>>>>>>>>>>>>> if
>>>> >>>>>>>>>>>>>>>>>>>> your
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> interceptor is there. Indeed without the
>>>> >> interceptor,
>>>> >>>>>> the
>>>> >>>>>>>>>>>>>> filter
>>>> >>>>>>>>>>>>>>>>>> does
>>>> >>>>>>>>>>>>>>>>>>>>>>> not
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> match.
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> Regards,
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> Clement
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> /Bengt
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>
>>>> >>>>>>
>>>> ---------------------------------------------------------------------
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> To unsubscribe, e-mail:
>>>> >>>>>>>> users-unsubscribe@felix.apache.org
>>>> >>>>>>>>>>>>>>>>>>>>>>>>> For additional commands, e-mail:
>>>> >>>>>>>>>>>> users-help@felix.apache.org
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>
>>>> >>>>>>
>>>> ---------------------------------------------------------------------
>>>> >>>>>>>>>>>>>>>>>>>>>>> To unsubscribe, e-mail:
>>>> >>>>>> users-unsubscribe@felix.apache.org
>>>> >>>>>>>>>>>>>>>>>>>>>>> For additional commands, e-mail:
>>>> >>>>>>>> users-help@felix.apache.org
>>>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>
>>>> >>>>>>>>
>>>> >> ---------------------------------------------------------------------
>>>> >>>>>>>>>>>>>>>>>>>> To unsubscribe, e-mail:
>>>> >>>> users-unsubscribe@felix.apache.org
>>>> >>>>>>>>>>>>>>>>>>>> For additional commands, e-mail:
>>>> >>>>>> users-help@felix.apache.org
>>>> >>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>
>>>> >>>>>>
>>>> ---------------------------------------------------------------------
>>>> >>>>>>>>>>>>>>>>>> To unsubscribe, e-mail:
>>>> >> users-unsubscribe@felix.apache.org
>>>> >>>>>>>>>>>>>>>>>> For additional commands, e-mail:
>>>> >>>> users-help@felix.apache.org
>>>> >>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>
>>>> >>>>>>
>>>> ---------------------------------------------------------------------
>>>> >>>>>>>>>>>>>>>> To unsubscribe, e-mail:
>>>> users-unsubscribe@felix.apache.org
>>>> >>>>>>>>>>>>>>>> For additional commands, e-mail:
>>>> >> users-help@felix.apache.org
>>>> >>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>>>
>>>> >>>>>>>>>>>>
>>>> >>>>>>>>>>>>
>>>> >>>>>>>>>>>>
>>>> >>>>>>
>>>> ---------------------------------------------------------------------
>>>> >>>>>>>>>>>> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
>>>> >>>>>>>>>>>> For additional commands, e-mail:
>>>> users-help@felix.apache.org
>>>> >>>>>>>>>>>>
>>>> >>>>>>>>>>>>
>>>> >>>>>>>>>>>
>>>> >>>>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>>>
>>>> >> ---------------------------------------------------------------------
>>>> >>>>>>>> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
>>>> >>>>>>>> For additional commands, e-mail: users-help@felix.apache.org
>>>> >>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>
>>>> >>>>>>
>>>> >>>>>>
>>>> ---------------------------------------------------------------------
>>>> >>>>>> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
>>>> >>>>>> For additional commands, e-mail: users-help@felix.apache.org
>>>> >>>>>>
>>>> >>>>>>
>>>> >>>>
>>>> >>>>
>>>> >>>>
>>>> ---------------------------------------------------------------------
>>>> >>>> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
>>>> >>>> For additional commands, e-mail: users-help@felix.apache.org
>>>> >>>>
>>>> >>>>
>>>> >>
>>>> >>
>>>> >> ---------------------------------------------------------------------
>>>> >> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
>>>> >> For additional commands, e-mail: users-help@felix.apache.org
>>>> >>
>>>> >>
>>>>
>>>>
>>>
>> <ExtenderInterceptor.java>
>>
>>
>>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message