Hi,
First, thank you for your answer.
I totally agree with your point regarding the name convention.
But what I propose is different. The idea is just to have an Array of key/value
pairs where keys are the identity of the dependencies and the values are the
filter of each dependency. This Array could be transformed into a Dictionary
object at the beginning of the "configure()" method of the "DependencyHandler"
class.
Imagine you have a class with following dependencies:
@Requires(id="myFirstDep")
private A a;
@Requires(id=" mySecondDep ")
private B b;
What I propose is to build the following property to inject in the instance:
conf.put("requires.filters", new String[] {"myFirstDep",
"(property1=value1)", "mySecondDep", "(property2=value2)"});
And the transformation from the Array to the Dictionary could be:
private Dictionary getRequiresFilters(Object requiresFiltersValue)
throws ConfigurationException
{
if (requiresFiltersValue != null &&
requiresFiltersValue.getClass().isArray())
{
String[] filtersArray = (String[]) requiresFiltersValue;
if (filtersArray.length % 2 != 0)
{
throw new ConfigurationException("A requirement filter is
invalid : " + requiresFiltersValue);
}
Dictionary requiresFilters = new Hashtable();
for (int i = 0; i < filtersArray.length; i += 2)
{
requiresFilters.put(filtersArray[i], filtersArray[i+1]);
}
return requiresFilters;
}
return (Dictionary) requiresFiltersValue;
}
Concerning your proposal to use iPojo factories instead of ConfigAdmin: we
tested that and it's working perfectly, but we need to persist the
configuration (the "requires.filters" property but also all the configuration
properties of each instance) and by only using iPojo, it's not persisted.
We also tested the use of the API to update the filter, but this was the same
conclusion as previous point: no persistence.
This is why we need to use iPojo in combinaison with ConfigAdmin...
Thanks and regards,
Olivier
-----Message d'origine-----
De : Clement Escoffier [mailto:[email protected]]
Envoyé : dimanche 7 novembre 2010 13:57
À : [email protected]
Objet : Re: iPojo "requires.filters"
Hi,
On 04.11.2010, at 12:55, Bigard Olivier wrote:
> Hi,
>
>
>
> I tried to dynamically update the < filter > value of a < @Requires >
> annotation.
>
> The problem is that I'm using ConfigAdmin service to create my instances
> and, as Clement explained in the following thread, ConfigAdmin doesn't
> support Dictionary class...
>
> http://old.nabble.com/-iPOJO--Filter-as-a-parameter-to28927205.html
>
>
>
> Is there any reason why "DependencyHandler" class cannot analyze another
> structure than a Dictionary in the "configure()" method for
> "requires.filters"?
>
> Would it be possible to pass a Collection object in the properties
> Dictionary for "requires.filters" key and the "DependencyHandler"
> analyzes it like a suit of key/value pairs
> ({key1;value1;key2;value2;...})?
The handler uses a dictionary / map because of of the dependency
identification. You can have several dependencies, and so update several
filters. The only way to support 'flat' structure would be to use name
convention, and I'm definitely not a fan of such kind of techniques.
To update the filter you can either:
- use iPOJO factories instead of Config Admin. Factories support maps.
- use the iPOJO API to update the filter of a specific instance
Regards,
Clement
>
>
>
> Thanks in advance
>
> Regards,
>
> Olivier
>
---------------------------------------------------------------------
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]