Instead of using regular factory component, I solved my problem by using
configurationFactory and ConfigurationAdmin.
I used my first example to be able to create new instance of my class from
configuration tab in felix console

@Component(configurationFactory = true, policy =
ConfigurationPolicy.REQUIRE, metatype = true, immediate = true)


And then, to create my class instance from java code (actually I want to
allow user to create an instance from RESTful interface)
I used ConfigurationAdmin class as follows in the documentation


    ServiceReference reference =
bundleContext.getServiceReference(ConfigurationAdmin.class.getName());

    ConfigurationAdmin configAdmin = (ConfigurationAdmin)
bundleContext.getService(reference);

    Configuration config =
configAdmin.createFactoryConfiguration(LDPathSemanticIndex.class.getName(),
null);

    Dictionary props = new Hashtable();

    props.put("key",value");

    config.update(props);


Now, i can use both felix console and my restful interface to create my
class instance.
thanks for your answer.

Best regards,
Meric

2012/7/3 Felix Meschberger <fmesc...@adobe.com>

> Hi,
>
> Am 02.07.2012 um 10:14 schrieb Meriç Taze:
>
> > Hi all,
> >
> > I am trying to create a new instance of my class from felix console.
> Hence,
> > I'm using Component annotation like this:
> >
> > @Component(configurationFactory = true, policy =
> > ConfigurationPolicy.REQUIRE, metatype = true)
> >
> > and this works well. I can create new instance by using Configuration tab
> > of felix console. Now I also want to create
> > new instance of my class inside my java code. Thus, I tried to use
> >
> > @Component(factory = "org.apache.test.MyClassFactory")
> >
> > This is also work. However, I want both of these functionalities for my
> > class. Therefore, I add to top of my class definition
> >
> > @Component(configurationFactory = true, factory =
> > "org.apache.test.MyClassFactory", policy = ConfigurationPolicy.REQUIRE,
> > metatype = true)
> >
> > and it did not work as I expected. My question is how can achieve to
> create
> > my class instances using both felix
> > console and java code. I cannot succeed it by using
> > both configurationFactory and factory. Is there any other way?
>
> By the spec, this is not possible because factory configurations cannot be
> used to created instances of factory components. IIRC this is explicitly
> stated in the spec.
>
> The Felix implementation currently supports this non-compliant behaviour.
> But (a) you have to explicitly enable it and (b) you create a hidden
> implementation dependency. So I would discourage from using it.
>
> Rather I would solve the problem as follows:
>
>   * Create a regular factory component (your second example)
>   * Create another component having a service reference to the
>      ComponentFactory service of the factory component. This
>      second component has instances created for factory
>      configuration. This component manages factory component
>      instances for the factory configurations.
>
> HTH
>
> Regards
> Felix
>
> >
> > Thanks.
>
>

Reply via email to