package org.kisst.jms;
import org.kisst.gft.admin.rest.Representable;
import org.kisst.props4j.Props;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MultiListener implements Representable {
private final static Logger logger=LoggerFactory.getLogger(MultiListener.class);
private final String name;
private final Props props;
public final JmsListener[] listeners;
private final JmsSystem queueSystem;
public MultiListener(JmsSystem system, MessageHandler handler, Props props, Object context) {
this.queueSystem = system;
this.name=props.getLocalName();
this.props=props;
int nrofThreads = props.getInt("nrofThreads",2);
this.listeners =new JmsListener[nrofThreads];
for (int i=0; i<nrofThreads; i++)
listeners[i]=new JmsListener(system, handler, props, context);
}
public JmsSystem getQueueSystem() { return queueSystem; }
public int getNrofListeners() { return listeners.length; }
public int getNrofActiveListeners() {
int count = 0;
for (JmsListener l: listeners) {
if (l.isActive())
count++;
}
return count;
}
public boolean listening() { return listeners!=null; }
public String getName() { return name; }
public String getQueue(String name) {
if ("input".equals(name))
return getInputQueue();
else if ("error".equals(name))
return getErrorQueue();
else
throw new IllegalArgumentException("request queue "+name+" not allowed, only input or error allowed");
}
public String getQueue() { return getInputQueue(); }
public String getInputQueue() { return listeners[0].queue; }
public String getErrorQueue() { return listeners[0].errorqueue; }
//public String getRetryQueue() { return listeners[0].retryqueue; }
public String getRepresentation() { return props.toString(); }
public void stop() {
logger.info("Stopping MultiListener {}", name);
for (JmsListener t:listeners)
t.stop();
}
public void start() {
logger.info("Starting MultiListener {}", name);
for (JmsListener t:listeners)
t.start();
}
}