felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Pierre De Rop (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (FELIX-3700) DS Factory Components don't support configuration-policy = require
Date Fri, 05 Oct 2012 20:54:02 GMT

    [ https://issues.apache.org/jira/browse/FELIX-3700?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13470647#comment-13470647
] 

Pierre De Rop commented on FELIX-3700:
--------------------------------------

Oops felix, I missed your response.

Yes, I do agree that may be there is a problem with the test_component_factory_require_configuration.
I actually started to modify it in order to reproduce the problem, but I have not yet finished.


                
> DS Factory Components don't support configuration-policy = require
> ------------------------------------------------------------------
>
>                 Key: FELIX-3700
>                 URL: https://issues.apache.org/jira/browse/FELIX-3700
>             Project: Felix
>          Issue Type: Bug
>          Components: Declarative Services (SCR)
>         Environment: linux, jdk1.6
>            Reporter: Pierre De Rop
>         Attachments: FELIX-3700.patch
>
>
> With scr 1.6.0 and also with scr from trunk, there is the following problem:
> When a factory component (declared with a factory attribute in the Component element),
and when the Component is also defined with configuration-policy = require, then the org.osgi.service.component.ComponentFactory
associated to the factory component is registered in the OSGi registry even if the configuration
for the component is not yet available.
> This is  a problem because when the org.osgi.service.component.ComponentFactory is registered
in the registry, then another component using the ComponentFactory may call the newInstance
method and then instantiate the component without the required configuration.
> For example, in the following code, Main is injected with the A ComponentFactory and
creates immediately one A instance: but at this point, the Configuration for A has not yet
been created (see in the Main.start method, where a thread is started in order to create the
A configuration after 1 second ...).
> I expect A ComponentFactory to be registered only after the A Configuration is available
from config admin, because the A configuration-policy has been set to the "require" value.
> Am I correct or does the spec forbid factory components to use the configuration-policy
= require ?
> ->
> @Component(name="A", factory = "A", configurationPolicy = ConfigurationPolicy.require)
> public class A {
>   @Activate
>   void start(Map<?, ?> config) {
>     System.out.println("A.start:" + config.get("foo");
>   }
> }
> @Component
> public class Main {
>   private ConfigurationAdmin _cm;
>   
>   @Reference(type = '*', target = "(component.factory=A)")
>   void bindCF(ComponentFactory cf) { // should only be called once A config admin configuration
is avail
>     System.out.println("Main.bindCF");
>     cf.newInstance(null);
>   }
>   
>   @Reference
>   void bindCM(ConfigurationAdmin cm) {
>     _cm = cm;
>   }
>   
>   @Activate
>   void start() {
>     System.out.println("Main.start");
>     
>     new Thread(new Runnable() {
>       public void run() {
>         try {
>           Thread.sleep(1000);
>           System.out.println("Configuring A");          
>           Configuration config = _cm.getConfiguration("A", null);
>           config.update(new Hashtable() {
>             {
>               put("foo", "bar");
>             }
>           });          
>         } catch (Exception ioe) {
>           ioe.printStackTrace();
>         }
>       }
>     }).start();
>   }
> }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message