Uploaded image for project: 'Felix'
  1. Felix
  2. FELIX-1922

issue with configuration policy=require and with factory components

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • scr-1.2.0
    • scr-1.4.0
    • None
    • linux fc10, jdk1.5, jdk.1.6

    Description

      This issue is related to the following dev post: -> http://www.mail-archive.com/dev@felix.apache.org/msg14167.html

      There are two components that comes into play:

      1) The first one (EnglishDictionary) has a configuration-policy="require" parameter and a factory="true" parameter:

      <?xml version='1.0' encoding='utf-8'?>
      <component name='EnglishDictionary' xmlns='http://www.osgi.org/xmlns/scr/v1.1.0' factory='true' configuration-policy='require' modified='updated'>
      <implementation class='com.alcatel_lucent.samples.scr.dictionary.english.EnglishDictionary'/>
      <service>
      <provide interface='com.alcatel_lucent.samples.scr.dictionary.DictionaryService'/>
      </service>
      </component>

      The EnglishDictionary parameter has actually a CM Configuration which is required before activation: that is why it uses configuration-policy='require'.

      2) The second one (EnglishDictionaryFactory) is a factory component that is meant to instantiate the EnglishDictionary component.:

      <?xml version='1.0' encoding='utf-8'?>
      <component name='EnglishDictionaryFactory'>
      <implementation class='com.alcatel_lucent.samples.scr.dictionary.english.EnglishDictionaryFactory'/>
      <reference name='bind' interface='org.osgi.service.component.ComponentFactory' bind='bind' unbind='unbind' target='(component.name=EnglishDictionary)'/>
      </component>

      The issue takes place when the EnglishDictionaryFactory component tries to instantiate the EnglishDictionary like this:

      class EnglishDictionaryFactory {
      public void bind(ComponentFactory factory)

      { factory.newInstance(new Hashtable()); }


      }

      -> The newInstance raises the following exception:

      org.osgi.service.component.ComponentException: Failed activating component
      at org.apache.felix.scr.impl.manager.ComponentFactoryImpl.newInstance(ComponentFactoryImpl.java:118)
      at com.alcatel_lucent.samples.scr.dictionary.english.EnglishDictionaryFactory.bind(EnglishDictionaryFactory.java:19)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at org.apache.felix.scr.impl.helper.BaseMethod.invokeMethod(BaseMethod.java:213)
      at org.apache.felix.scr.impl.helper.BaseMethod.access$500(BaseMethod.java:38)
      at org.apache.felix.scr.impl.helper.BaseMethod$Resolved.invoke(BaseMethod.java:542)
      at org.apache.felix.scr.impl.helper.BaseMethod$NotResolved.invoke(BaseMethod.java:500)
      at org.apache.felix.scr.impl.helper.BaseMethod.invoke(BaseMethod.java:434)
      at org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethod(DependencyManager.java:997)
      at org.apache.felix.scr.impl.manager.DependencyManager.bind(DependencyManager.java:908)
      at org.apache.felix.scr.impl.manager.DependencyManager.open(DependencyManager.java:832)
      at org.apache.felix.scr.impl.manager.ImmediateComponentManager.createImplementationObject(ImmediateComponentManager.java:200)
      at org.apache.felix.scr.impl.manager.ImmediateComponentManager.createComponent(ImmediateComponentManager.java:118)
      at org.apache.felix.scr.impl.manager.AbstractComponentManager$Unsatisfied.activate(AbstractComponentManager.java:982)
      at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:297)
      at org.apache.felix.scr.impl.manager.AbstractComponentManager$1.doRun(AbstractComponentManager.java:137)
      at org.apache.felix.scr.impl.ComponentActivatorTask.run(ComponentActivatorTask.java:67)
      at org.apache.felix.scr.impl.ComponentActorThread.run(ComponentActorThread.java:96)
      at java.lang.Thread.run(Thread.java:619)

      Attachments

        Activity

          People

            fmeschbe Felix Meschberger
            pderop Pierre De Rop
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: