I did a more complete trace where I also take into account the cases where the instance should become valid (ENABLED) and when it shouldn't become valid (DISABLED). Not sure if it helps but here is the result:
/Bengt BOTH MATCHING AND SELECTED, DISABLED bin\karaf.bat clean ------------------- accept: intercepted onServiceArrival: 1 matching references getServiceReferences accept: intercepted bin\karaf.bat ------------- accept: intercepted configurationChanged invalidating... Invalidating matching... accept: intercepted Invalidating selected... Done invalidating Validated getServiceReferences Invalidated BOTH MATCHING AND SELECTED, ENABLED bin\karaf.bat clean ------------------- accept: intercepted onServiceArrival: 1 matching references getServiceReferences configurationChanged invalidating... Invalidating matching... accept: intercepted getServiceReferences Invalidating selected... getServiceReferences Done invalidating Invalidating matching... accept: intercepted getServiceReferences Invalidating selected... getServiceReferences Done invalidating configurationChanged invalidating... Invalidating matching... accept: intercepted getServiceReferences Invalidating selected... getServiceReferences Done invalidating Invalidating matching... accept: intercepted getServiceReferences Invalidating selected... getServiceReferences Done invalidating Validated Invalidated accept: intercepted bin\karaf.bat ------------- accept: intercepted configurationChanged invalidating... Invalidating matching... accept: intercepted Invalidating selected... Done invalidating Validated getServiceReferences ONLY SELECTED, DISABLED bin\karaf.bat clean ------------------- accept: intercepted onServiceArrival: 1 matching references getServiceReferences accept: intercepted bin\karaf.bat ------------- accept: intercepted configurationChanged invalidating... Invalidating selected... Done invalidating Validated getServiceReferences Invalidated ONLY SELECTED, ENABLED bin\karaf.bat clean ------------------- accept: intercepted onServiceArrival: 1 matching references getServiceReferences calculateExtenders: 1 extenders configurationChanged invalidating... Invalidating selected... getServiceReferences calculateExtenders: 1 extenders Done invalidating Invalidating selected... getServiceReferences calculateExtenders: 1 extenders Done invalidating configurationChanged invalidating... Invalidating selected... getServiceReferences calculateExtenders: 1 extenders Done invalidating Invalidating selected... getServiceReferences calculateExtenders: 1 extenders Done invalidating Validated Invalidated accept: intercepted bin\karaf.bat ------------- accept: intercepted configurationChanged invalidating... Invalidating selected... Done invalidating Validated getServiceReferences ONLY MATCHING, DISABLED bin\karaf.bat clean ------------------- accept: intercepted onServiceArrival: 1 matching references getServiceReferences bin\karaf.bat ------------- accept: intercepted configurationChanged invalidating... Invalidating matching... accept: intercepted Done invalidating Validated getServiceReferences Invalidated ONLY MATCHING, ENABLED bin\karaf.bat clean ------------------- accept: intercepted onServiceArrival: 1 matching references getServiceReferences configurationChanged invalidating... Invalidating matching... accept: intercepted getServiceReferences Done invalidating Invalidating matching... accept: intercepted getServiceReferences Done invalidating configurationChanged invalidating... Invalidating matching... accept: intercepted getServiceReferences Done invalidating Invalidating matching... accept: intercepted getServiceReferences Done invalidating Validated accept: intercepted bin\karaf.bat ------------- accept: intercepted configurationChanged invalidating... Invalidating matching... accept: intercepted Done invalidating Validated getServiceReferences 2014-03-03 17:10 GMT+01:00 Clement Escoffier <[email protected]>: > > On 3 mars 2014, at 16:48, Bengt Rodehav <[email protected]> wrote: > > > I now tried to call only one of those methods with the following result: > > > > ONLY SELECTED > > > > bin\karaf.bat clean > > ------------------- > > accept: intercepted > > onServiceArrival: 1 matching references > > getServiceReferences > > accept: intercepted > > > > bin\karaf.bat > > ------------- > > accept: intercepted > > configurationChanged invalidating... > > Invalidating selected... > > Done invalidating > > Validated > > getServiceReferences > > Invalidated > > > > > > ONLY MATCHING > > > > bin\karaf.bat clean > > ------------------- > > accept: intercepted > > onServiceArrival: 1 matching references > > getServiceReferences > > > > bin\karaf.bat > > ------------- > > karaf@root> accept: intercepted > > configurationChanged invalidating... > > Invalidating matching... > > accept: intercepted > > Done invalidating > > Validated > > getServiceReferences > > Invalidated > > > > It seems to give the same result as calling both of them. > > Invalidating matching services, also invalidate the selected services (as > selected is a sorted subset of matching). > So, something is wrong when invalidating the matching service set. > > I suspect something in > org.apache.felix.ipojo.dependency.impl.ServiceReferenceManager#computeChangesInMatchingServices. > > Clement > > > > > > > /Bengt > > > > > > 2014-03-03 16:36 GMT+01:00 Bengt Rodehav <[email protected]>: > > > >> I call both of them: > >> > >> public void invalidateSelectedServices() { > >> List<DependencyModel> list = new ArrayList<DependencyModel>(); > >> synchronized (this) { > >> list.addAll(dependencies); > >> } > >> > >> for (DependencyModel dep : list) { > >> if (isMine(dep)) { > >> System.out.println("Invalidating matching..."); > >> dep.invalidateMatchingServices(); > >> System.out.println("Invalidating selected..."); > >> dep.invalidateSelectedServices(); > >> System.out.println("Done invalidating"); > >> } > >> } > >> } > >> > >> @Override > >> synchronized public void configurationChanged(ComponentInstance > theArg0, > >> Map<String, Object> theArg1) { > >> System.out.println("configurationChanged invalidating..."); > >> invalidateSelectedServices(); > >> } > >> > >> I think I used to only call invalidateSelectedServices() but then I had > >> the opposite problem. Since the accept() method wasn't called, the > >> intercepted property was not set to true. Also, if I only call > >> invalidateMatchingServices(), the service references are not > recalculated. > >> It is important that both my accept() method and my > getServiceReferences() > >> method are called. > >> > >> Sounds like this might be an issue now that you mention it. How are the > >> invalidateXYZ() methods supposed to work? > >> > >> /Bengt > >> > >> > >> 2014-03-03 16:19 GMT+01:00 Clement Escoffier < > [email protected]> > >> : > >> > >> > >>> On 3 mars 2014, at 16:09, Bengt Rodehav <[email protected]> wrote: > >>> > >>>> I now added logging to the following methods: > >>>> > >>>> - onServiceArrival > >>>> - onServiceDeparture > >>>> - onServiceModified > >>>> > >>>> I tried starting both with a clean start and then without clean. I got > >>> the > >>>> following results: > >>>> > >>>> *bin\karaf.bat clean* > >>>> accept: intercepted > >>>> onServiceArrival: 1 matching references > >>>> getServiceReferences > >>>> accept: intercepted > >>>> > >>>> *bin\karaf.bat* > >>>> accept: intercepted > >>>> configurationChanged invalidating... > >>>> Invalidating matching... > >>>> accept: intercepted > >>>> Invalidating selected... > >>>> Done invalidating > >>>> Validated > >>>> getServiceReferences > >>>> Invalidated > >>>> > >>>> As you can see the instance never becomes valid on a clean start. Then > >>>> again, no configuration changes are detected on a clean start. It > seems > >>> to > >>>> be when I detect a configuration change and manually invalidate the > >>>> dependencies that the problem appears. > >>>> > >>>> Does this give you any clue? > >>> > >>> Which method are you calling ? invalidateMatchingServices, or > >>> invalidateSelectedServices(), anyway it narrows the location of the > bug to > >>> a small amount of code: > >>> > >>> public void invalidateMatchingServices() { > >>> ChangeSet changeset; > >>> try { > >>> m_dependency.acquireWriteLockIfNotHeld(); > >>> m_matchingReferences.clear(); > >>> changeset = computeChangesInMatchingServices(); > >>> } finally { > >>> m_dependency.releaseWriteLockIfHeld(); > >>> } > >>> m_dependency.onChange(changeset); > >>> } > >>> > >>> public void invalidateSelectedServices() { > >>> ChangeSet changeset; > >>> try { > >>> m_dependency.acquireWriteLockIfNotHeld(); > >>> ServiceReference oldBest = getFirstService(); > >>> List<ServiceReference> beforeRanking = > getSelectedServices(); > >>> m_selectedReferences.clear(); > >>> final List<ServiceReference> allServices = > >>> getMatchingServices(); > >>> List<ServiceReference> references = Collections.emptyList(); > >>> if (!allServices.isEmpty()) { > >>> references = > >>> m_rankingInterceptor.getServiceReferences(m_dependency, allServices); > >>> } > >>> RankingResult result = computeDifferences(beforeRanking, > >>> references); > >>> m_selectedReferences = result.selected; > >>> changeset = new ChangeSet(getSelectedServices(), > >>> result.departures, result.arrivals, oldBest, > >>> getFirstService(), null, null); > >>> } finally { > >>> m_dependency.releaseWriteLockIfHeld(); > >>> } > >>> > >>> m_dependency.onChange(changeset); > >>> } > >>> > >>>> > >>>> /Bengt > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> 2014-03-03 15:53 GMT+01:00 Bengt Rodehav <[email protected]>: > >>>> > >>>>> OK - I now understand what you mean. It seems that the design is > >>> supposed > >>>>> to do what I expected then. We think alike :-) > >>>>> > >>>>> I'll add some more tracing as you suggested and then get back to you. > >>>>> > >>>>> /Bengt > >>>>> > >>>>> > >>>>> 2014-03-03 15:46 GMT+01:00 Clement Escoffier < > >>> [email protected]> > >>>>> : > >>>>> > >>>>> > >>>>>> On 3 mars 2014, at 15:18, Bengt Rodehav <[email protected]> wrote: > >>>>>> > >>>>>>> Hi Clement, > >>>>>>> > >>>>>>> Yes, I use the filter to make sure that the instance does not > become > >>>>>> valid > >>>>>>> until it has been intercepted - that part seems to work. However, > in > >>> my > >>>>>>> case, the instance become valid AFTER my accept() method has been > >>> called > >>>>>>> but BEFORE my getServiceReferences() method has been called. This > is > >>>>>>> causing my problems. > >>>>>>> > >>>>>>> I'm a little curious regarding your wording: > >>>>>>> > >>>>>>> "A (mandatory) dependency becomes valid only if the selected > service > >>>>>> set is > >>>>>>> not empty. In other words, all your interceptors should have been > >>> called > >>>>>>> before deciding to set the dependency state to valid." > >>>>>>> > >>>>>>> I don't see how the first sentence has anything to do with the > second > >>>>>>> sentence. > >>>>>> > >>>>>> This is how iPOJO resolves services. It first considers the services > >>> from > >>>>>> the service registry (called base service set). This set is > processed > >>> by > >>>>>> tracking interceptor (such as LDAP filter...) to get a matching > >>> service set. > >>>>>> Then, a ranking interceptor is called to sort the set, and to get > the > >>>>>> selected service set. A mandatory service dependency cannot be valid > >>> if > >>>>>> this last set is empty (in theory). That means that both accept and > >>>>>> getServiceReferences should have been called to determine whether or > >>> not > >>>>>> the dependency is valid. The accept method is called to build the > >>> matching > >>>>>> service set, while getServiceReferences is called to retrieve the > >>> selected > >>>>>> service set. > >>>>>> > >>>>>>> > >>>>>>> I have a dependency declared as follows: > >>>>>>> > >>>>>>> @Requires(optional = false, id = "extenders", filter = > >>>>>>> "(intercepted=true)") > >>>>>>> private IRouteExtender[] mExtenders; > >>>>>>> > >>>>>>> Thus it is mandatory. Also, there are services of type > IRouteExtender > >>>>>>> registered so that part is resolved. But until the accept() method > >>> has > >>>>>> been > >>>>>>> called the "(intercepted=true)" part is not satisfied. When my > >>> accept() > >>>>>>> method has been called the "(intercepted=true)" part becomes > >>> satisfied > >>>>>> and > >>>>>>> my instance becomes valid right away instead of waiting for the > >>> result > >>>>>> of > >>>>>>> the getServiceReferences() method. This is the problem because in > my > >>>>>>> getServiceReferences() method I evalutate the matching dependencies > >>> (by > >>>>>>> looking at a property) and determine that they are not valid. I > >>>>>> therefore > >>>>>>> return an empty set of matching service references and the instance > >>> now > >>>>>>> becomes invalid. > >>>>>>> > >>>>>>> I do not think it should be possible to validate an instance "in > the > >>>>>> midst > >>>>>>> of intercepting" as is the case for me. I must be completely done > >>>>>>> intercepting first. > >>>>>> > >>>>>> That should not be the case. Definitely a bug.... The dependency > state > >>>>>> should not be re-evaluated before having notified the ranking > >>> interceptor. > >>>>>> > >>>>>> So far, you are implementing only getServiceReferences, can you > >>> implement > >>>>>> and add traces in onServiceArrival ? > >>>>>> > >>>>>> Clement > >>>>>> > >>>>>> > >>>>>> > >>>>>>> > >>>>>>> /Bengt > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> 2014-03-03 13:51 GMT+01:00 Clement Escoffier < > >>>>>> [email protected]>: > >>>>>>> > >>>>>>>> Hi, > >>>>>>>> > >>>>>>>> On 3 mars 2014, at 13:14, Bengt Rodehav <[email protected]> > wrote: > >>>>>>>> > >>>>>>>>> Hello again Clement! > >>>>>>>>> > >>>>>>>>> Skiing trip is now over - time to get back to the interceptors... > >>>>>>>>> > >>>>>>>>> Regarding your questions in the last post: Yes, I only add a > >>> property > >>>>>> on > >>>>>>>>> the chosen service reference (intercepted is set to true), I do > not > >>>>>>>> change > >>>>>>>>> the filter. > >>>>>>>>> > >>>>>>>>> I have tested the theory regarding config admin / file install > and > >>> it > >>>>>> is > >>>>>>>>> not the problem. > >>>>>>>>> > >>>>>>>>> It seems to me that there is no guarantee that both accept() and > >>> the > >>>>>>>>> getServiceReferences() are both called before an instance becomes > >>>>>> valid. > >>>>>>>> I > >>>>>>>>> haven't looked at the source code in detail yet but is the design > >>> such > >>>>>>>> that > >>>>>>>>> this is not supposed to be possible or am I requesting a new > >>> feature? > >>>>>> In > >>>>>>>>> other words, have I found a bug or not? > >>>>>>>>> > >>>>>>>>> Ideally I think it should work as follows: > >>>>>>>>> > >>>>>>>>> - When in "interceptor mode" the state of the instance should not > >>>>>> change > >>>>>>>>> until all the interceptors (and all callbacks of the > interceptors) > >>>>>> have > >>>>>>>>> taken effect. > >>>>>>>>> > >>>>>>>>> - Initially then instance should not become valid until all the > >>>>>>>>> interceptors (and all callbacks of the interceptors) have taken > >>>>>> effect. > >>>>>>>>> > >>>>>>>>> With "interceptor mode" I mean that something has triggered iPojo > >>> to > >>>>>>>> begin > >>>>>>>>> calling the registered interceptors. > >>>>>>>>> > >>>>>>>>> Not sure if this is in accordance with your design. How is it > >>>>>> supposed to > >>>>>>>>> work? > >>>>>>>> > >>>>>>>> > >>>>>>>> It might be a bug and a new feature. > >>>>>>>> > >>>>>>>> I designed interceptors to be highly dynamic, so can come and > leave > >>> at > >>>>>>>> anytime, and without having the components aware of them. That's > why > >>>>>>>> service dependencies do not know which interceptors handle them. > >>>>>>>> Unfortunately, this design has some trade-off / drawbacks. If your > >>>>>> instance > >>>>>>>> starts before the interceptors, it might be valid for a little > >>> amount > >>>>>> of > >>>>>>>> time, until the interceptors handle the dependency. However in > your > >>>>>> case > >>>>>>>> you have a filter on the dependency that should avoid this case. > >>>>>>>> > >>>>>>>> If you still have this filter, it is definitely a bug. A > >>> (mandatory) > >>>>>>>> dependency becomes valid only if the selected service set is not > >>>>>> empty. In > >>>>>>>> other words, all your interceptors should have been called before > >>>>>> deciding > >>>>>>>> to set the dependency state to valid. > >>>>>>>> > >>>>>>>> About the feature, I start thinking that the independence between > >>> the > >>>>>>>> interceptor and the dependencies may be problematic. For instance, > >>> I've > >>>>>>>> another use case where they implement a new handler (an extension > of > >>>>>> the > >>>>>>>> dependency handler) to ensure the availability of one specific > >>>>>> interceptor. > >>>>>>>> The dependency is invalid until the interceptor arrives. > >>>>>>>> > >>>>>>>> Clement > >>>>>>>> > >>>>>>>>> > >>>>>>>>> /Bengt > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> 2014-02-24 8:17 GMT+01:00 Clement Escoffier < > >>>>>> [email protected] > >>>>>>>>> : > >>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> On 21 févr. 2014, at 14:15, Bengt Rodehav <[email protected]> > >>> wrote: > >>>>>>>>>> > >>>>>>>>>>> Hello Clement, > >>>>>>>>>>> > >>>>>>>>>>> Some comments inline below. > >>>>>>>>>>> > >>>>>>>>>>> /Bengt > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> 2014-02-21 12:53 GMT+01:00 Clement Escoffier < > >>>>>>>>>> [email protected]>: > >>>>>>>>>>> > >>>>>>>>>>>> Hi, > >>>>>>>>>>>> > >>>>>>>>>>>> On 20 févr. 2014, at 13:22, Bengt Rodehav <[email protected]> > >>>>>> wrote: > >>>>>>>>>>>> > >>>>>>>>>>>>> This is a follow up on another discussion I had with Clement > on > >>>>>> this > >>>>>>>>>>>>> mailing list: > >>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>> > >>>>>>>> > >>>>>> > >>> > http://apache-felix.18485.x6.nabble.com/Using-iPojo-interceptors-tt5006168.html#a5006276 > >>>>>>>>>>>>> > >>>>>>>>>>>>> I'm now trying to get the interceptor solution into > production. > >>>>>>>>>>>>> > >>>>>>>>>>>>> Remember that I have to invalidate my instances when their > >>>>>>>>>> configuration > >>>>>>>>>>>> is > >>>>>>>>>>>>> changed. This is because I need to re-evalutate the > >>> dependencies > >>>>>> for > >>>>>>>>>> the > >>>>>>>>>>>>> instance. > >>>>>>>>>>>>> > >>>>>>>>>>>>> Originally, I only called the invalidateSelectedServices() > >>> method > >>>>>> on > >>>>>>>>>> the > >>>>>>>>>>>>> DependencyModel. This worked mostly but not when starting a > >>> fresh > >>>>>>>>>>>> container > >>>>>>>>>>>>> (I use Karaf and start it with "bin\karaf.bat clean"). My > >>> instance > >>>>>>>> then > >>>>>>>>>>>>> first becomes valid but then becomes invalid. I think this is > >>>>>> because > >>>>>>>>>> of > >>>>>>>>>>>>> the ordering. The accept() method had not been called prior > to > >>>>>>>>>>>>> the getServiceReferences() method. The dependency is > therefore > >>> not > >>>>>>>> set > >>>>>>>>>> to > >>>>>>>>>>>>> "intercepted=true" which makes it invalid. > >>>>>>>>>>>> > >>>>>>>>>>>> the filter is updated by the interceptor. (just want to be > sure > >>> I > >>>>>>>>>>>> understand). In that case, if the interceptor arrives after > the > >>>>>>>> instance > >>>>>>>>>>>> creation, the filter will be set when the interceptor arrives. > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> Yes, my interceptor sets intercepted to true on the dependency > >>> which > >>>>>>>>>> makes > >>>>>>>>>>> sure that the filter match. > >>>>>>>>>> > >>>>>>>>>> So the filter is not modified by the interceptor, it just add a > >>> new > >>>>>>>>>> property on the chosen service reference to match the filter. > >>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>> Replacing the call to invalidateSelectedServices() with a > >>> call to > >>>>>>>>>>>>> invalidateMatchingServices() seems to do the trick. However, > >>>>>> there is > >>>>>>>>>> one > >>>>>>>>>>>>> small glitch that I would like to fix. > >>>>>>>>>>>>> > >>>>>>>>>>>>> If I have a configuration that should not be valid (e g I > >>>>>> specified > >>>>>>>> an > >>>>>>>>>>>>> extender id that is not present) the instance should never be > >>>>>> valid. > >>>>>>>>>> But, > >>>>>>>>>>>>> when starting Karaf (both with "bin\karaf.bat" and > >>> "bin\karaf.bat > >>>>>>>>>>>> clean"), > >>>>>>>>>>>>> the instance becomes valid before it becomes invalid. It does > >>> end > >>>>>> up > >>>>>>>> in > >>>>>>>>>>>> the > >>>>>>>>>>>>> right state (invalid in this case) but for a short period of > >>> time > >>>>>> it > >>>>>>>> is > >>>>>>>>>>>>> valid which will cause a lot of things to happen in my code > >>> that > >>>>>> then > >>>>>>>>>>>> must > >>>>>>>>>>>>> be reversed when it becomes invalid. > >>>>>>>>>>>>> > >>>>>>>>>>>>> I logged the sequence of events and it seems that the > accept() > >>>>>> method > >>>>>>>>>> is > >>>>>>>>>>>>> called first. I will then set "intercepted=true". This > >>> immediately > >>>>>>>>>> makes > >>>>>>>>>>>>> the instance valid. Shortly thereafter getServiceReferences() > >>> is > >>>>>>>>>> called. > >>>>>>>>>>>> I > >>>>>>>>>>>>> will then re-calculate the dependency requirements and when I > >>>>>> later > >>>>>>>>>>>>> invalidate the dependencies the instance will become valid. > >>>>>>>>>>>>> > >>>>>>>>>>>>> So, there is a short time frame where the instance is valid > >>>>>> although > >>>>>>>> it > >>>>>>>>>>>>> shouldn't be. How can I fix that? > >>>>>>>>>>>> > >>>>>>>>>>>> This looks like a bug, as the dependency can be valid only if > >>> the > >>>>>> set > >>>>>>>> of > >>>>>>>>>>>> selected services is not empty. From what you say, it looks > like > >>>>>> the > >>>>>>>>>>>> dependency is valid because the set of matching services is > not > >>>>>> empty. > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> Is there anything I can do to investigate this? Is it possible > >>> for > >>>>>> you > >>>>>>>> to > >>>>>>>>>>> take a look if there is indeed a "gap" where this can happen? > >>>>>>>>>> > >>>>>>>>>> My first guess would be in the ServiceReferenceManager > >>> coordinating > >>>>>> the > >>>>>>>>>> interceptors. > >>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> I think that things are a little complicated since I also > listen > >>> on > >>>>>>>>>>> configuration changes. I need to recalculate the matching > >>> services > >>>>>> when > >>>>>>>>>> the > >>>>>>>>>>> configuration of the intercepted instance changes. When > starting > >>> the > >>>>>>>>>>> container (Karaf), I get more than one configuration change and > >>> thus > >>>>>>>> the > >>>>>>>>>>> dependencies are invalidated more than once. What if the > sequence > >>>>>> were: > >>>>>>>>>>> > >>>>>>>>>>> 1. Configuration change causing the dependencies to become > >>>>>> invalidated > >>>>>>>>>>> 2. Accept. Will set intercepted to true > >>>>>>>>>>> 3. getServiceReferences which will calculate the required > >>>>>> dependencies > >>>>>>>>>>> 4. Configuration change again causing the dependencies to > become > >>>>>>>>>> invalidated > >>>>>>>>>>> 5. Accept. Will set intercepted to true > >>>>>>>>>>> 6. getServiceReferences which will calculate the required > >>>>>> dependencies > >>>>>>>>>>> > >>>>>>>>>>> Not sure if there is any point in which an instance could > become > >>>>>> valid > >>>>>>>>>> when > >>>>>>>>>>> it shouldn't. > >>>>>>>>>>> > >>>>>>>>>>> I will also try to see if the problem could be the > configuration > >>>>>>>> admin. I > >>>>>>>>>>> use file install for my configuration. I have a feeling that > the > >>>>>> first > >>>>>>>>>>> configuration being pushed is a default configuration and not > the > >>>>>> one > >>>>>>>>>> from > >>>>>>>>>>> the configuration file. Then that might explain it. > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> Oh, that's an interesting hint. That's definitely possible. > >>>>>>>>>> > >>>>>>>>>> Enjoy your vacations, mine are over.... > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> Regards, > >>>>>>>>>> > >>>>>>>>>> Clement > >>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>> From my point of view this is similar to a transaction. I do > >>> not > >>>>>> want > >>>>>>>>>> the > >>>>>>>>>>>>> instance to become valid before I have done all my > >>> "intercepting" > >>>>>>>> which > >>>>>>>>>>>> is > >>>>>>>>>>>>> after BOTH the accept() method AND the getServiceReferences() > >>>>>> method > >>>>>>>>>> have > >>>>>>>>>>>>> been called. > >>>>>>>>>>>> > >>>>>>>>>>>> In theory, it is how it should work... > >>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>> BTW I also noted that the "dependencies" member in > >>>>>>>>>>>>> the DefaultDependencyInterceptor class (I extend the > >>>>>>>>>>>>> DefaultServiceRankingInterceptor class) seems to contain > >>>>>> duplicates > >>>>>>>> of > >>>>>>>>>> my > >>>>>>>>>>>>> dependency. The same DependencyModel instance occurs twice in > >>> the > >>>>>>>> List. > >>>>>>>>>>>>> Seems like a bug to me. Perhaps the List should be a Set? > >>>>>>>>>>>> > >>>>>>>>>>>> Definitely, could you open an issue ? > >>>>>>>>>>>> > >>>>>>>>>>>> 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] > >

