Skip to content

Custom Subscription Listeners

uklance edited this page Nov 15, 2012 · 8 revisions

Subscription listeners intercept the client "subscribe" and "unsubscribe" events and will not be fired if authorization fails. Subscription listener configuration includes a topic.

Configuration at application startup

Subscription Listeners can be contributed via your Tapestry application's IOC Module.

    public static void contributeSubscriptionListeners(OrderedConfiguration<SubscriptionListenerContribution> config) {
        SubscriptionListener myListener = new SubscriptionListener() {
            public void onSubscribe(PushSession pushSession) {
                System.out.println(String.format("onSubscribe(%s)", pushSession.getTopic()));
            }
            public void onUnsubscribe(PushSession pushSession) {
                System.out.println(String.format("onUnsubscribe(%s)", pushSession.getTopic()));
            }
        };
        SubscriptionListenerContribution contribution = new SubscriptionListenerContribution("/**", myListener);
        config.add("myListener", contribution);
    }

Runtime configuration

Subscription Listeners can also be added and removed at runtime via the Subscription Listeners service

@Inject 
private SubscriptionListeners subscriptionListeners;

private SubscriptionListener myListener;

public synchronized void doAdd() {
    if (myListener == null) {
        myListener = new SubscriptionListener() {
            public void onSubscribe(PushSession pushSession) {
                System.out.println(String.format("onSubscribe(%s)", pushSession.getTopic()));
            }
            public void onUnsubscribe(PushSession pushSession) {
                System.out.println(String.format("onUnsubscribe(%s)", pushSession.getTopic()));
            }
        };
        subscriptionListeners.addListener("/**", myListener);
    }
}

public synchronized void doRemove() {
    if (myListener != null) {
        subscriptionListeners.removeListener("/**", myListener);
        myListener = null;
    }
}