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

Reply via email to