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

