Hi,

On 12 déc. 2013, at 15:04, Bengt Rodehav <[email protected]> wrote:

> 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.

Actually, accept is receiving the ‘original’ service reference that does not 
have the ‘intercepted’ property. I should have a point about that in the 
documentation.

> 
> 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?

Should be out for Christmas (quite soon actually….)

Clement

> 
> /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>
>>>>> 
>>>>> 
>>>>> 
>>>> 
>> 
>> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to