felix-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Clement Escoffier <clement.escoff...@gmail.com>
Subject Re: iPOJO and dynamic ldap filter
Date Wed, 28 Nov 2012 13:50:26 GMT
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 <bengt@rodehav.com> 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 <bengt@rodehav.com>
> 
>> Thanks a lot, will try this approach.
>> 
>> /Bengt
>> 
>> 
>> 2012/11/28 Clement Escoffier <clement.escoffier@gmail.com>
>> 
>>> 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 <bengt@rodehav.com> 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 <clement.escoffier@gmail.com>
>>>> 
>>>>> 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 <bengt@rodehav.com> 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: users-unsubscribe@felix.apache.org
>>>>> For additional commands, e-mail: users-help@felix.apache.org
>>>>> 
>>>>> 
>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
>>> For additional commands, e-mail: users-help@felix.apache.org
>>> 
>>> 
>> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Mime
View raw message