openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Albert Lee (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (OPENJPA-2197) MethodComparator in AnnotationPersistenceMetaDataParser should also compare parameters
Date Thu, 17 May 2012 14:31:07 GMT

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

Albert Lee commented on OPENJPA-2197:
-------------------------------------

Per spec section "3.5.1 Lifecycle Callback Methods"
  Callback methods defined on an entity class or mapped superclass have the following signature:
    void <METHOD>()
  Callback methods defined on an entity listener class have the following signature:
    void <METHOD>(Object)

I am wondering if a simpler solution is to detect this requirement rather than check for method
signature.

I.e.
    public static Collection<LifecycleCallbacks>[] parseCallbackMethods
        (Class<?> cls, Collection<LifecycleCallbacks>[] callbacks, boolean sups,
        boolean listener, MetaDataRepository repos) {
            .........
                if (Modifier.isStatic(mods) || Modifier.isFinal(mods) ||
                    Object.class.equals(m.getDeclaringClass()))
                    continue;

                // ******* addition logic to filter out invalid listeners
                if( m.getParameterTypes().length != (listener?0:1) || m.getReturnType() !=
Void.class )
                    continue;                     
                // ******* 

                key = new MethodKey(m);
                if (!seen.contains(key)) {
                    methods.add(m);
                    seen.add(key);
                }
            }

                
> MethodComparator in AnnotationPersistenceMetaDataParser should also compare parameters
> --------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-2197
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2197
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 2.2.0
>            Reporter: Mark Struberg
>            Assignee: Mark Struberg
>             Fix For: 2.3.0
>
>         Attachments: OPENJPA-2197_test.patch
>
>
> AnnotationPersistenceMetaDataParser contains a MethodComparator which only compares the
class + the method name. Too bad I have (had...) 2 methods with the same name in my EntityListener:
>     @PreUpdate
>     public void updateChangeLog(Object entity) { ..
> and also
>     private void updateChangeLog(BaseEntity he, ChangeLogEntry cle)
> which is a private helper method.
> Due to the bug in MethodComparator, my @PreUpdate sometimes didn't get detected.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message