You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openwebbeans.apache.org by "Jakob Korherr (JIRA)" <ji...@apache.org> on 2010/09/28 23:24:33 UTC

[jira] Updated: (OWB-462) Refactor AnnotationUtil.hasAnnotationMember()

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

Jakob Korherr updated OWB-462:
------------------------------

    Attachment: OWB-462.patch

The patch contains the refactored code and some test cases.

> Refactor AnnotationUtil.hasAnnotationMember()
> ---------------------------------------------
>
>                 Key: OWB-462
>                 URL: https://issues.apache.org/jira/browse/OWB-462
>             Project: OpenWebBeans
>          Issue Type: Task
>          Components: Core
>    Affects Versions: 1.0.0-alpha-2
>            Reporter: Jakob Korherr
>            Assignee: Gurkan Erdogdu
>         Attachments: OWB-462.patch
>
>
> We needed a method to compare qualifiers for MyFaces CODI and stumbled upon AnnotationUtil.hasAnnotationMember().
> However this method is really messy, because it uses the String representation of an annotation to compare it and thus fails in various cases (e.g. when using annotation instances which implement toString() differently or by using array values in the qualifier). Furthermore it does not detect @Nonbinding fields correctly, if there is more than one annotation on the annotation-method.
> Also it's kinda weird that the method takes the Annotation-Class as an extra parameter, but it could just get it from one of the Annotation instances. I checked all usages and found out that this argument can be dropped. In addition I think it's better to rename the method to isQualifierEqual() - the usage is just a lot clearer.
> I implemented a custom solution for MyFaces CODI and I think it should also be applied here.

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


Re: [jira] Updated: (OWB-462) Refactor AnnotationUtil.hasAnnotationMember()

Posted by Jakob Korherr <ja...@gmail.com>.
You're welcome - I'm glad to contribute!

Regards,
Jakob

2010/9/29 Rohit Kelapure <ke...@gmail.com>:
> This is an excellent patch.  Thanks Jakob!
>
> We ran into a similar issue discovered by Paul Reder where in
>   org.apache.webbeans.inject.impl.InjectionPointImpl.readObject(ObjectInputStream)
>
> the owner bean filtering
>   this.ownerBean = BeanManagerImpl.getManager().getBeans(beanClass,
> anns.toArray(new Annotation[0])).iterator().next();
>
> did NOT work.because checkEquality does NOT correctly compare the
> owner bean deserialized annotations with the resolvedComponent
> qualifiers.
>
> how this patch affects InjectionPointImpl deserialization ...
> method hierarchy -->
> org.apache.webbeans.util.AnnotationUtil.checkEquality(String, String,
> List<String>)
>   org.apache.webbeans.util.AnnotationUtil.hasAnnotationMember(Class<?
> extends Annotation>, Annotation, Annotation)
>       org.apache.webbeans.container.InjectionResolver.findByQualifier(Set<Bean<?>>,
> Annotation...)
>          org.apache.webbeans.container.InjectionResolver.implResolveByType(Type,
> Annotation...)
>               org.apache.webbeans.container.BeanManagerImpl.getBeans(Type,
> Annotation...)
>
> org.apache.webbeans.inject.impl.InjectionPointImpl.readObject(ObjectInputStream)
>
>
> --Thanks,
> Rohit Kelapure
>
> On Tue, Sep 28, 2010 at 5:24 PM, Jakob Korherr (JIRA) <ji...@apache.org> wrote:
>>
>>     [ https://issues.apache.org/jira/browse/OWB-462?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
>>
>> Jakob Korherr updated OWB-462:
>> ------------------------------
>>
>>    Attachment: OWB-462.patch
>>
>> The patch contains the refactored code and some test cases.
>>
>>> Refactor AnnotationUtil.hasAnnotationMember()
>>> ---------------------------------------------
>>>
>>>                 Key: OWB-462
>>>                 URL: https://issues.apache.org/jira/browse/OWB-462
>>>             Project: OpenWebBeans
>>>          Issue Type: Task
>>>          Components: Core
>>>    Affects Versions: 1.0.0-alpha-2
>>>            Reporter: Jakob Korherr
>>>            Assignee: Gurkan Erdogdu
>>>         Attachments: OWB-462.patch
>>>
>>>
>>> We needed a method to compare qualifiers for MyFaces CODI and stumbled upon AnnotationUtil.hasAnnotationMember().
>>> However this method is really messy, because it uses the String representation of an annotation to compare it and thus fails in various cases (e.g. when using annotation instances which implement toString() differently or by using array values in the qualifier). Furthermore it does not detect @Nonbinding fields correctly, if there is more than one annotation on the annotation-method.
>>> Also it's kinda weird that the method takes the Annotation-Class as an extra parameter, but it could just get it from one of the Annotation instances. I checked all usages and found out that this argument can be dropped. In addition I think it's better to rename the method to isQualifierEqual() - the usage is just a lot clearer.
>>> I implemented a custom solution for MyFaces CODI and I think it should also be applied here.
>>
>> --
>> This message is automatically generated by JIRA.
>> -
>> You can reply to this email to add a comment to the issue online.
>>
>>
>



-- 
Jakob Korherr

blog: http://www.jakobk.com
twitter: http://twitter.com/jakobkorherr
work: http://www.irian.at

Re: [jira] Updated: (OWB-462) Refactor AnnotationUtil.hasAnnotationMember()

Posted by Rohit Kelapure <ke...@gmail.com>.
This is an excellent patch.  Thanks Jakob!

We ran into a similar issue discovered by Paul Reder where in
   org.apache.webbeans.inject.impl.InjectionPointImpl.readObject(ObjectInputStream)

the owner bean filtering
   this.ownerBean = BeanManagerImpl.getManager().getBeans(beanClass,
anns.toArray(new Annotation[0])).iterator().next();

did NOT work.because checkEquality does NOT correctly compare the
owner bean deserialized annotations with the resolvedComponent
qualifiers.

how this patch affects InjectionPointImpl deserialization ...
method hierarchy -->
org.apache.webbeans.util.AnnotationUtil.checkEquality(String, String,
List<String>)
   org.apache.webbeans.util.AnnotationUtil.hasAnnotationMember(Class<?
extends Annotation>, Annotation, Annotation)
       org.apache.webbeans.container.InjectionResolver.findByQualifier(Set<Bean<?>>,
Annotation...)
          org.apache.webbeans.container.InjectionResolver.implResolveByType(Type,
Annotation...)
               org.apache.webbeans.container.BeanManagerImpl.getBeans(Type,
Annotation...)

org.apache.webbeans.inject.impl.InjectionPointImpl.readObject(ObjectInputStream)


--Thanks,
Rohit Kelapure

On Tue, Sep 28, 2010 at 5:24 PM, Jakob Korherr (JIRA) <ji...@apache.org> wrote:
>
>     [ https://issues.apache.org/jira/browse/OWB-462?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
>
> Jakob Korherr updated OWB-462:
> ------------------------------
>
>    Attachment: OWB-462.patch
>
> The patch contains the refactored code and some test cases.
>
>> Refactor AnnotationUtil.hasAnnotationMember()
>> ---------------------------------------------
>>
>>                 Key: OWB-462
>>                 URL: https://issues.apache.org/jira/browse/OWB-462
>>             Project: OpenWebBeans
>>          Issue Type: Task
>>          Components: Core
>>    Affects Versions: 1.0.0-alpha-2
>>            Reporter: Jakob Korherr
>>            Assignee: Gurkan Erdogdu
>>         Attachments: OWB-462.patch
>>
>>
>> We needed a method to compare qualifiers for MyFaces CODI and stumbled upon AnnotationUtil.hasAnnotationMember().
>> However this method is really messy, because it uses the String representation of an annotation to compare it and thus fails in various cases (e.g. when using annotation instances which implement toString() differently or by using array values in the qualifier). Furthermore it does not detect @Nonbinding fields correctly, if there is more than one annotation on the annotation-method.
>> Also it's kinda weird that the method takes the Annotation-Class as an extra parameter, but it could just get it from one of the Annotation instances. I checked all usages and found out that this argument can be dropped. In addition I think it's better to rename the method to isQualifierEqual() - the usage is just a lot clearer.
>> I implemented a custom solution for MyFaces CODI and I think it should also be applied here.
>
> --
> This message is automatically generated by JIRA.
> -
> You can reply to this email to add a comment to the issue online.
>
>