package org.jboss.seam.jms;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.Topic;
import javax.jms.TopicSubscriber;
import org.jboss.solder.logging.Logger;
import org.jboss.seam.jms.annotations.Durable;
import org.jboss.seam.jms.annotations.JmsDefault;
@Dependent
@Durable
public class DurableMessageManagerImpl
extends MessageManagerImpl
implements DurableMessageManager {
private Logger logger = Logger.getLogger(DurableMessageManagerImpl.class);
@Inject @JmsDefault("connectionFactory")
ConnectionFactory connectionFactory;
private Connection connection;
//@Override
@PostConstruct
public void init() {
try {
connection = connectionFactory.createConnection();
} catch (JMSException e) {
logger.warn("Unable to create connection.");
}
}
@PreDestroy
public void shutdown() {
if (connection != null) {
try {
connection.close();
} catch (JMSException e) {
logger.warn("Unable to create connection.");
}
}
}
public void login(String clientId) {
try {
connection.setClientID(clientId);
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
} catch (JMSException e) {
logger.warn("Unable to create connection.");
}
}
@Override
public TopicSubscriber createDurableSubscriber(String topic, String id, MessageListener... listeners) {
Topic t = (Topic) super.lookupDestination(topic);
return createDurableSubscriber(t, id, listeners);
}
@Override
public TopicSubscriber createDurableSubscriber(Topic topic, String id, MessageListener... listeners) {
TopicSubscriber ts;
try {
ts = this.session.createDurableSubscriber(topic, id);
if (ts != null && listeners != null && listeners.length > 0) {
for (MessageListener listener : listeners) {
try {
ts.setMessageListener(listener);
} catch (JMSException e) {
logger.warn("Unable to map listener " + listener + " to subscriber " + ts, e);
}
}
}
} catch (JMSException ex) {
throw new IllegalArgumentException("Unable to create subscriber on topic " + topic + " for id " + id, ex);
}
return ts;
}
@Override
public void unsubscribe(String id) {
try {
session.unsubscribe(id);
} catch (JMSException e) {
logger.warn("Unable to unsubscribe for id: " + id, e);
}
}
}