[jbossseam-issues] [JBoss JIRA] Commented: (JBSEAM-2571) Event observers in overridden components are still being invoked

Sebastien Degardin (JIRA) jira-events at lists.jboss.org
Fri Feb 8 20:58:03 EST 2008


    [ http://jira.jboss.com/jira/browse/JBSEAM-2571?page=comments#action_12398988 ] 
            
Sebastien Degardin commented on JBSEAM-2571:
--------------------------------------------

This is when a component inherits from another one and override a method and both methods have @Observer annotation.

When creating a new org.jboss.seam.Component, in the construtor it calls the method "initMembers" which iterates over all the method of the component and calls "scanMethod" which will register the Observer.

If we implements the equals method properly on the org.jboss.seam.core.Init.ObserverMethod, the we can check if there is already such an observer before registering another one for the same method.

the equals method on the org.jboss.seam.core.Init.ObserverMethod would look like :

      public boolean equals(Object obj) {
          if (!(obj instanceof ObserverMethod)) 
          {
            return false; 
          }          
          ObserverMethod observer = (ObserverMethod)obj;                                          
          return method.getName().equals(observer.method.getName()) && 
              Arrays.equals(method.getParameterTypes(), observer.method.getParameterTypes()) &&
              this.component.equals(observer.getComponent());              
     } 


And, in the method org.jboss.seam.core.Init.addObserverMethod(), we will add : 

      if (! observerList.contains(observerMethod)) {
          observerList.add(observerMethod);   
      }     



> Event observers in overridden components are still being invoked
> ----------------------------------------------------------------
>
>                 Key: JBSEAM-2571
>                 URL: http://jira.jboss.com/jira/browse/JBSEAM-2571
>             Project: JBoss Seam
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.0.1.GA
>            Reporter: Shane Bryzak
>         Assigned To: Shane Bryzak
>            Priority: Blocker
>             Fix For: 2.0.2.GA
>
>
> When overriding a built in component and providing a new observer, the observer in the overridden component is still registered and both observers are invoked upon the event.  Here is a test case provided by a user that reproduces this issue:
> @Name("org.jboss.seam.security.facesSecurityEvents")
> @Scope(ScopeType.APPLICATION)
> @Install(precedence = Install.APPLICATION, classDependencies = "javax.faces.context.FacesContext")
> @BypassInterceptors
> @Startup
> public class SecurityEventsHandler extends org.jboss.seam.security.FacesSecurityEvents {
>     @Logger Log log;
>     
>     @Override @Observer(Identity.EVENT_LOGIN_SUCCESSFUL)
>     public void addLoginSuccessfulMessage()
>     {
>        log.info("\n\n\n>>>>>>>>>>>>>>>>>>>>EVENT_LOGIN_SUCCESSFUL handled<<<<<<<<<<<<<<<<<<<<<<<<\n\n\n");
>     }
>       
>     
> }
>   

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the seam-issues mailing list