[richfaces-issues] [JBoss JIRA] (RF-12303) Customer topiclistener not working on richfaces push component of verion 4.2.2-Final and older

Daniel Yang (JIRA) jira-events at lists.jboss.org
Fri Jun 1 08:33:17 EDT 2012


Daniel Yang created RF-12303:
--------------------------------

             Summary: Customer topiclistener not working on richfaces push component of verion 4.2.2-Final and older
                 Key: RF-12303
                 URL: https://issues.jboss.org/browse/RF-12303
             Project: RichFaces
          Issue Type: Bug
      Security Level: Public (Everyone can see)
          Components: component-a4j-core, component-push/poll
    Affects Versions: 4.2.2.Final
         Environment: No deponds on what environment.
            Reporter: Daniel Yang


See description here: 
   https://community.jboss.org/message/736651#736651

Copy it again:

I use it like following lines:

 
 TopicsContext topicsContext = TopicsContext.lookup();
        Topic topic = topicsContext.getOrCreateTopic(new TopicKey("test"));
        topic.setMessageDataSerializer(DefaultMessageDataSerializer.instance());
        topic.addTopicListener(new SessionTopicListener2() {
            @Override
            public void processPreSubscriptionEvent(SessionPreSubscriptionEvent event) throws SubscriptionFailureException {
               //TODO
            }
            @Override
            public void processSubscriptionEvent(SessionSubscriptionEvent event) {
                 //TODO
            }
            @Override
            public void processUnsubscriptionEvent(SessionUnsubscriptionEvent event) {
                 //TODO
            }
        });
 
I noted that listeners in TopicImpl are all the SessionTopicListener2 type, because add method is:

 
    public void addTopicListener(TopicListener topicListener) {
        TopicListener listener = topicListener;
        if (listener instanceof SessionTopicListener) {
            listener = new SessionTopicListenerWrapper((SessionTopicListener) listener);
        }
        listeners.add(listener);
    }
 
 
All SessionTopicListeners are wrapped to type SessionTopicListener2, and when event publish in TopicImpl, it check it if it is appropriate listener like this:

 
    public void publishEvent(TopicEvent event) {
        for (TopicListener listener : listeners) {
            if (event.isAppropriateListener(listener)) {
                try {
                    event.invokeListener(listener);
                } catch (Exception e) {
                    logError(e);
                }
            }
        }
    }
 
But event type SessionPreSubscriptionEvent, SessionSubscriptionEvent or SessionUnsubscriptionEvent does not override the mothed isAppropriateListener, so when checking, it use the method of its parent SessionTopicEvent, its parent method is like this:

 
    @Override
    public boolean isAppropriateListener(EventListener listener) {
        return (listener instanceof SessionTopicListener);
    }
 
Then it always returns false for above three SessionTopicEvent , and the custom listeners will never be called. I think it may be changed from " return (listener instanceof SessionTopicListener);" to  return (listener instanceof SessionTopicListener2); or override it in seperator implement of type SessionTopicEvent .


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

        


More information about the richfaces-issues mailing list