[ 
https://issues.apache.org/jira/browse/FELIX-131?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Felix Meschberger updated FELIX-131:
------------------------------------

    Fix Version/s: scr-1.0.0

> Fix method lookup and implement enableComponet/disableComponent
> ---------------------------------------------------------------
>
>                 Key: FELIX-131
>                 URL: https://issues.apache.org/jira/browse/FELIX-131
>             Project: Felix
>          Issue Type: Improvement
>          Components: Declarative Services (SCR)
>    Affects Versions: felix-0.8.0
>         Environment: org.apache.felix.scr project, Rev. 427625
>            Reporter: Felix Meschberger
>            Assignee: Richard S. Hall
>             Fix For: scr-1.0.0
>
>         Attachments: SCR_fm20060830.diff
>
>
> Attached is a patch, which provides fixes to the method lookup mechanism as 
> well as a tentative implementation of the ComponentContext.enableComponent 
> and ComponentContext.disableComponent methods.
> (1) Method Lookup
> The Spec says, that methods activate and deactivate as well as the bind and 
> unbind methods must be public or protected methods. The currently used 
> mechanism of using the Class.getMethod(String name, Class[] parameterTypes) 
> method only returns public methods. To also find protected methods, the 
> Class.getDeclaredMethod(String name, Class[] parameterTypes) method must be 
> used. But this method must be called on the class itself as well as all super 
> classes.
> Additionally, any protected method found must be made accessible by calling 
> the Method.setAccessible(boolean) method.
> To implement this common behaviour, I added a 
> ComponentManagerImpl.getMethod(Class calzz, String name, Class[] 
> parameterTypes) which tries to find a public or protected method of the given 
> name with required parameters from the class hierarchy of clazz.
> Another minor fix is included with the DependencyManager.getBindingMethod 
> method: The third case - looking for method wich takes an assignement 
> compatible parameter - only checked for the parameter cardinality and type 
> but not for the method name. Besides also supporting protected methods by 
> walking the class hierarchy using the Class.getDeclaredMethods() method, I 
> added a check for the method name.
> (2) enableComponent/disableComponent
> These methods of the ComponentContext interface have not been implented. I 
> added implementation in that the GenericActivator provides these 
> implementations, as all registered components or the bundle are known there. 
> Actual enabling and disabling is done in a separate thread as stipulated by 
> the spec.
> A note on enabling: A component may be initially disabled, in which case the 
> GenericActivator.initiliaze() class has created the componnent but not 
> registered it. The fix is, to always register the component regardless of 
> whether it is a factory component and whether it is enabled or not.
> A note on disabling: Currently, the GenericAdapter.disableComponent method 
> calls the ComponentManager.dispose() method. In my opinion, this is not 
> entirely correct, as (1) the preconditions regarding component state might be 
> wrong, (2) the final state of the component (DESTROYED) is probably wrong 
> (shouldn't it be CREATED, but what would be the transient state - DISABLING 
> or UNCREATING ?) and (3) at the end the dispose() method clears the 
> m_activator field, which would actually be required again if re-enabling the 
> component.
> PS: This patch does not include the patch posted for issue FELIX-128 but also 
> touches ComponentManagerImpl class.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to