I found that add listener method all types of SessionTopicListener2(SessionTopicListenerWrapper).
In AbstractTopic.java
public void addTopicListener(TopicListener topicListener) { TopicListener listener = topicListener; if (listener instanceof SessionTopicListener) { listener = new SessionTopicListenerWrapper((SessionTopicListener) listener); } listeners.add(listener); }
and trigger it use this method.
public void publishEvent(TopicEvent event) { for (TopicListener listener : listeners) { if (event.isAppropriateListener(listener)) { try { event.invokeListener(listener); } catch (Exception e) { logError(e); } } } }
the method marked blue in SessionTopicEvent.java returns false.
@Override public boolean isAppropriateListener(EventListener listener) { return (listener instanceof SessionTopicListener); }
so custom listener not work, maybe "SessionTopicListener" should be replaced by "SessionTopicListener2". I don't test it.
Richfaces guys please take a look at this. Thanks.
消息编辑者为:Daniel Yang