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

