[
https://issues.jboss.org/browse/RF-12303?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Lukáš Fryč reassigned RF-12303:
-------------------------------
Assignee: (was: Lukáš Fryč)
> 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
> Labels: push, richfaces
> Fix For: 4.3.0.Milestone2
>
> Original Estimate: 5 minutes
> Remaining Estimate: 5 minutes
>
> See description here:
> https://community.jboss.org/message/736651#736651
> Copy it again:
> I use it like following lines:
>
> {code:java}
> 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
> }
> });
> {code}
>
> I noted that listeners in TopicImpl are all the SessionTopicListener2 type,
> because add method is:
> {code:java}
> public void addTopicListener(TopicListener topicListener) {
> TopicListener listener = topicListener;
> if (listener instanceof SessionTopicListener) {
> listener = new SessionTopicListenerWrapper((SessionTopicListener)
> listener);
> }
> listeners.add(listener);
> }
> {code}
>
>
> All SessionTopicListeners are wrapped to type SessionTopicListener2, and when
> event publish in TopicImpl, it check it if it is appropriate listener like
> this:
>
> {code:java}
> public void publishEvent(TopicEvent event) {
> for (TopicListener listener : listeners) {
> if (event.isAppropriateListener(listener)) {
> try {
> event.invokeListener(listener);
> } catch (Exception e) {
> logError(e);
> }
> }
> }
> }
> {code}
>
> 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:
> {code:java}
>
> @Override
> public boolean isAppropriateListener(EventListener listener) {
> return (listener instanceof SessionTopicListener);
> }
> {code}
>
> 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 implementation
> 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
_______________________________________________
richfaces-issues mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/richfaces-issues