[
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