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]

