package net.lr.karaf.jms.template; import javax.jms.Connection; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageProducer; import javax.jms.Session; public class JmsTemplate { private Connection connection; private boolean transacted = false; private int acknowledgeMode = Session.AUTO_ACKNOWLEDGE; public JmsTemplate() { } public JmsTemplate(Connection connection) { this.connection = connection; } public void setConnection(Connection connection) { this.connection = connection; } public <T> T doInSessionNoClose(SessionExecutor<T> executor) { assertConnection(); Session session = null; try { session = this.connection.createSession(this.transacted, this.acknowledgeMode); return executor.execute(session); } catch (JMSException e) { throw new RuntimeException(e.getMessage(), e); } } private void assertConnection() { if (connection == null) { throw new RuntimeException("No JMS connection was set"); } } public <T> T doInSession(SessionExecutor<T> executor) { Session session = null; try { session = this.connection.createSession(this.transacted, this.acknowledgeMode); return executor.execute(session); } catch (JMSException e) { throw new RuntimeException(e.getMessage(), e); } finally { if (session != null) { try { session.close(); } catch (JMSException e) { throw new RuntimeException(e.getMessage(), e); } } } } public void doInSession(VoidSessionExecutor executor) { Session session = null; try { session = this.connection.createSession(this.transacted, this.acknowledgeMode); executor.execute(session); } catch (JMSException e) { throw new RuntimeException(e.getMessage(), e); } finally { if (session != null) { try { session.close(); } catch (JMSException e) { throw new RuntimeException(e.getMessage(), e); } } } } public void send(Session session, Destination dest, Message message) throws JMSException { MessageProducer producer = session.createProducer(dest); try { producer.send(message); producer.close(); } finally { producer.close(); } } }