@Override
public Listener subscribe(final String id, final MessageHandler handler,
final Codecs codecs,
final Map<SubscribeOption, Object> options) throws Exception {
Options<SubscribeOption> opts = new Options<>(options);
final JMSSpecificContext context = (JMSSpecificContext)context(id, opts.get(SubscribeOption.CONTEXT));
final TopicSubscriber subscriber = context
.jmsSession()
.createDurableSubscriber((javax.jms.Topic) jmsDestination(),
id,
opts.getString(SubscribeOption.SELECTOR), false);
final Listener listener = new JMSListener(handler,
codecs,
this,
context,
subscriber).start();
Context parent = (Context)opts.get(SubscribeOption.CONTEXT);
if (parent != null) {
parent.addCloseable(listener);
}
broker().addCloseableForDestination(this, listener);
return new Listener() {
@Override
public void close() throws Exception {
listener.close();
context.close();
}
};
}