felix-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Clement Escoffier <clement.escoff...@gmail.com>
Subject Re: Using iPojo interceptors
Date Wed, 11 Dec 2013 17:40:39 GMT
Hi,

I did something pretty close to your implementation:
https://gist.github.com/cescoffier/7914911

It works as expected, however the reconfiguration listener is called only when the instance is reconfigured (so setting the field from the code is not enough).

Regards,

Clement


On 9 déc. 2013, at 08:19, Bengt Rodehav <bengt@rodehav.com> wrote:

> 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