package siebog.interaction;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import javax.ejb.LocalBean;
import javax.ejb.Singleton;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.QueueSession;
import javax.jms.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import siebog.agents.Agent;
@Singleton
@LocalBean
public class JMSFactory {
private Logger LOG = LoggerFactory.getLogger(JMSFactory.class);
private Connection connection;
@Resource(lookup = "java:jboss/exported/jms/RemoteConnectionFactory")
private ConnectionFactory connectionFactory;
@Resource(lookup = "java:jboss/exported/jms/queue/siebog")
private Queue defaultQueue;
@Resource(lookup = "java:jboss/exported/jms/queue/siebog")
private Queue testQueue;
@PostConstruct
public void postConstruct() {
try {
connection = connectionFactory.createConnection();
connection.setClientID(Agent.SIEBOG_MODULE);
connection.start();
} catch (JMSException ex) {
throw new IllegalStateException(ex);
}
}
@PreDestroy
public void preDestroy() {
try {
connection.close();
} catch (JMSException ex) {
LOG.warn("Exception while closing the JMS connection.", ex);
}
}
public Session getSession() {
try {
return connection.createSession(false, QueueSession.AUTO_ACKNOWLEDGE);
} catch (JMSException ex) {
throw new IllegalStateException(ex);
}
}
public MessageProducer getDefaultProducer(Session session) {
try {
return session.createProducer(defaultQueue);
} catch (JMSException ex) {
throw new IllegalStateException(ex);
}
}
public MessageProducer getTestProducer(Session session) {
try {
return session.createProducer(testQueue);
} catch (JMSException ex) {
throw new IllegalStateException(ex);
}
}
}