Thanks again - it worked fine. Do you think this a bad idea (The "May lead to fun cases" got me a little worried)?
What I'm doing is making my filter dynamic. In this case a configuration property is used to wire my service against the appropriate service providers. The service providers expose a list of "qualifiers" (as service properties) that they support. The service consumer specifies a "qualifier" that is required. By dynamically setting the filter I can change the service consumers service requirements dynamically in runtime. /Bengt 2012/11/28 Clement Escoffier <[email protected]> > Hi, > > Are you trying to modify your own filter ? May lead to fun cases :-) > > In that case: > > InstanceManager me = (InstanceManager) ((Pojo) > this).getComponentInstance(); > > > Explanations: > - each iPOJO instance is implementing a org.apache.felix.ipojo.Pojo > interface > - so implements the getComponentInstance method returning a > ComponentInstance > - you cast the ComponentInstance to InstanceManager and you're back on > track > > Regards, > > Clement > > > On 28 nov. 2012, at 14:19, Bengt Rodehav <[email protected]> wrote: > > > Sorry for bothering you again.... > > > > I use iPOJO annotations like this: > > > > * @Component(name = "componentName", propagation = true, immediate = > true)* > > * @Provides* > > * public class MyClass {* > > > > > > I tried the following cast: > > > > * InstanceManager im = (InstanceManager) this;* > > > > where "this" is an instance of MyClass. The cast doesn't work since > > MyClass is not a sub class of InstanceManager. How do I get hold of a > > component instance? > > > > /Bengt > > > > > > > > > > 2012/11/28 Bengt Rodehav <[email protected]> > > > >> Thanks a lot, will try this approach. > >> > >> /Bengt > >> > >> > >> 2012/11/28 Clement Escoffier <[email protected]> > >> > >>> Hi, > >>> > >>> The DependencyModel is the parent class of all the iPOJO's service > >>> dependencies. So, the easiest way is to access to your service > dependency: > >>> > >>> InstanceManager im = (InstanceManager) componentInstance; > >>> DependencyHandler handler = > >>> im.getHandler("org.apache.felix.ipojo:requires"); > >>> Dependencies[] deps = handler.getDependencies(); > >>> // Lookup your dependency from deps (by id, by specification…) > >>> dep.setFilter(filter); > >>> > >>> Regards, > >>> > >>> Clement > >>> > >>> > >>> > >>> > >>> On 28 nov. 2012, at 13:09, Bengt Rodehav <[email protected]> wrote: > >>> > >>>> Thanks for you reply Clement, > >>>> > >>>> So, the following should work (in principal)? > >>>> > >>>> * @Property(name = "myProperty" mandatory = true)* > >>>> * public void setMyPropertey(String theProperty) {* > >>>> * // Calculate new filter based on myProperty* > >>>> * String filter = ....* > >>>> * > >>>> * > >>>> * // How do I get an instance of "DependencyModel"?* > >>>> * DependencyModel.setFilter(filter);* > >>>> * }* > >>>> > >>>> I've never used the DependencyModel class before. How do I gain access > >>> to > >>>> the correct instance? What maven artifact do I need for this? > >>>> > >>>> /Bengt > >>>> > >>>> > >>>> 2012/11/28 Clement Escoffier <[email protected]> > >>>> > >>>>> Hi, > >>>>> > >>>>> Using the iPOJO API you can use 'setFilter' to update the LDAP filter > >>> of a > >>>>> dependency (DependencyModel.setFilter). When changed the set of bound > >>>>> services is recomputed. Be aware that it may lead to an invalidation > >>> of the > >>>>> instance if no providers match the new filter. > >>>>> > >>>>> What we did in the past is to develop a handler receiving the new > >>>>> properties, computing the new filter and applying it to the targeted > >>>>> dependency. > >>>>> > >>>>> Regards, > >>>>> > >>>>> Clement > >>>>> > >>>>> On 27 nov. 2012, at 11:41, Bengt Rodehav <[email protected]> wrote: > >>>>> > >>>>>> I'm using the latest iPOJO version. I'm trying to use configuration > >>>>>> properties (via config admin) to make my service wiring dynamic. > >>>>>> > >>>>>> I have handler services that expose service properties (that tells > the > >>>>>> world what they can handle). The consumer of these services uses > >>> @Require > >>>>>> with an LDAP filter to specify what needs to be handled and thus > limit > >>>>> what > >>>>>> handlers can be used. > >>>>>> > >>>>>> But, I want the LDAP filter to be dynamic so that I can wire up > >>> service > >>>>>> providers with service consumers by configuration properties on the > >>>>>> consumers and providers. > >>>>>> > >>>>>> I've tried to buld the LDAP filter dynamically (using a configurable > >>>>>> property) but I get the compilation error: > >>>>>> > >>>>>> * The value for annotation attribute Requires.filter must be a > >>> constant > >>>>>> expression* > >>>>>> > >>>>>> I was hoping that if I changed a configuration property, iPOJO would > >>>>>> refresh its list of provider services to match the changed LDAP > >>> filter. > >>>>>> > >>>>>> How can I accomplish what I want? Is there a best practice? > >>>>>> > >>>>>> /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] > >

