Hello Clement - thanks for the code sample!

I've compared and tested all day. I've now finally got it to work. I now
follow your example since your way of handling listeners was less complex
than mine.

The problem I had was that I was trying to be too smart in the accept()
method. I only added the "intercepted" property if I hadn't done it before
for this dependency model. However,it seems like I need to do it everytime
the accept() method gets called. Otherwise the condition
"(intercepted=true)" isn't fullfilled - which was my problem.

I thought that once I had set the "intercepted" property it would stick. Do
you know why it doesn't? It doesn't really matter now that it works for me
but I'm a bit curious.

BTW, when are you planning the next release of iPOJO?

/Bengt


2013/12/11 Clement Escoffier <[email protected]>

> 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 <[email protected]> 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 <[email protected]>
> >
> >> 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 <[email protected]>
> >>
> >>> Hi,
> >>>
> >>>
> >>> On 9 déc. 2013, at 08:02, Bengt Rodehav <[email protected]> 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 <[email protected]>
> >>>
> >>>> I'll send the java code to your personal email Clement,
> >>>>
> >>>> /Bengt
> >>>>
> >>>>
> >>>> 2013/12/8 Clement Escoffier <[email protected]>
> >>>>
> >>>>> 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 <[email protected]> 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 <[email protected]>
> >>>>>>
> >>>>>>> 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 <[email protected]> wrote:
> >>>>>>>
> >>>>>>>> Did you have any chance to check this Clement?
> >>>>>>>>
> >>>>>>>> /Bengt
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> 2013/12/3 Clement Escoffier <[email protected]>
> >>>>>>>>
> >>>>>>>>>
> >>>>>>>>> On 3 déc. 2013, at 19:23, Bengt Rodehav <[email protected]>
> 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" <
> >>>>>>>>> [email protected]
> >>>>>>>>>>> :
> >>>>>>>>>>
> >>>>>>>>>>> Hi,
> >>>>>>>>>>>
> >>>>>>>>>>> It looks you are making great progresses.
> >>>>>>>>>>>
> >>>>>>>>>>> On 3 déc. 2013, at 17:13, Bengt Rodehav <[email protected]>
> >>>>> 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 <[email protected]>
> >>>>>>>>>>>>
> >>>>>>>>>>>>> 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 <[email protected]>
> >>>>> 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 <[email protected]>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> 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 <[email protected]>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Thanks Clement. I'll check out trunk and see how far I'll
> >>>>> get.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> /Bengt
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> 2013/11/29 Clement Escoffier <[email protected]
> >
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Hi,
> >>>>>>>>>>>>>>>>> On 29 nov. 2013, at 16:21, Bengt Rodehav <
> >>>>> [email protected]>
> >>>>>>>>> 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 <
> [email protected]
> >>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> 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 <
> >>>>> [email protected]>
> >>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Thanks!
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> 2013/11/28 Clement Escoffier <
> >>>>> [email protected]>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> On 28 nov. 2013, at 14:36, Bengt Rodehav <
> >>>>> [email protected]
> >>>>>>>>
> >>>>>>>>>>>>> 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 <
> >>>>> [email protected]>
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> On 28 nov. 2013, at 12:17, Bengt Rodehav <
> >>>>>>> [email protected]
> >>>>>>>>>>
> >>>>>>>>>>>>>>>>> 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 <
> >>>>>>> [email protected]>
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> Hi,
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> On 26 nov. 2013, at 16:00, Bengt Rodehav <
> >>>>>>>>> [email protected]
> >>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> 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 <[email protected]>
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks Clement!
> >>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>> 2013/11/26 Clement Escoffier <
> >>>>>>>>> [email protected]
> >>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>> On 25 nov. 2013, at 20:19, Bengt Rodehav <
> >>>>>>>>>>>>> [email protected]>
> >>>>>>>>>>>>>>>>>>>>> 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 <
> >>>>>>>>>>> [email protected]
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On 25 nov. 2013, at 11:04, Bengt Rodehav <
> >>>>>>>>>>>>>>>>> [email protected]>
> >>>>>>>>>>>>>>>>>>>>>>> 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:
> >>>>>>>>>>>>> [email protected]
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> For additional commands, e-mail:
> >>>>>>>>>>>>>>>>> [email protected]
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>>>>>>>>>>>>>>>>>>>>>>>>> To unsubscribe, e-mail:
> >>>>>>>>>>> [email protected]
> >>>>>>>>>>>>>>>>>>>>>>>>>>>> For additional commands, e-mail:
> >>>>>>>>>>>>> [email protected]
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>
> ---------------------------------------------------------------------
> >>>>>>>>>>>>>>>>>>>>>>>>> To unsubscribe, e-mail:
> >>>>>>>>> [email protected]
> >>>>>>>>>>>>>>>>>>>>>>>>> For additional commands, e-mail:
> >>>>>>>>>>> [email protected]
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>>>>>>>>>>>>>>>>>>>> To unsubscribe, e-mail:
> >>>>>>> [email protected]
> >>>>>>>>>>>>>>>>>>>>>>> For additional commands, e-mail:
> >>>>>>>>> [email protected]
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>>>>>>>>>>>>>>>>>> To unsubscribe, e-mail:
> >>>>> [email protected]
> >>>>>>>>>>>>>>>>>>>>> For additional commands, e-mail:
> >>>>>>> [email protected]
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>>>>>>>>>>>>>> To unsubscribe, e-mail:
> [email protected]
> >>>>>>>>>>>>>>>>> For additional commands, e-mail:
> >>>>> [email protected]
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>
> ---------------------------------------------------------------------
> >>>>>>>>>>>>> To unsubscribe, e-mail: [email protected]
> >>>>>>>>>>>>> For additional commands, e-mail: [email protected]
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>>>>>>>> To unsubscribe, e-mail: [email protected]
> >>>>>>>>>>> For additional commands, e-mail: [email protected]
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>>>>>> To unsubscribe, e-mail: [email protected]
> >>>>>>>>> For additional commands, e-mail: [email protected]
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> ---------------------------------------------------------------------
> >>>>>>> To unsubscribe, e-mail: [email protected]
> >>>>>>> For additional commands, e-mail: [email protected]
> >>>>>>>
> >>>>>>>
> >>>>>
> >>>>>
> >>>>
> >>> <ExtenderInterceptor.java>
> >>>
> >>>
> >>>
> >>
>
>

Reply via email to