public void init(RackContext context) throws Exception { this.context = context; String jndiName = context.getInitParameter("jms.connection.factory"); if (jndiName != null && connectionFactory == null) { Properties properties = new Properties(); String jndiProperties = context.getInitParameter("jms.jndi.properties"); if (jndiProperties != null) { properties.load(new ByteArrayInputStream(jndiProperties.getBytes("UTF-8"))); } jndiContext = new InitialContext(properties); connectionFactory = (ConnectionFactory) jndiContext.lookup(jndiName); } }
public void destroy() { for (Iterator it = queues.entrySet().iterator(); it.hasNext(); ) { Map.Entry<String, Connection> entry = (Map.Entry<String, Connection>) it.next(); try { entry.getValue().close(); } catch (Exception e) { context.log("exception while closing connection: " + e.getMessage(), e); } } queues.clear(); connectionFactory = null; }
public synchronized void listen(String queueName) { Connection conn = queues.get(queueName); if (conn == null) { try { conn = connectionFactory.createConnection(); Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); Destination dest = (Destination) lookup(queueName); MessageConsumer consumer = session.createConsumer(dest); consumer.setMessageListener(new RubyObjectMessageListener(queueName)); queues.put(queueName, conn); conn.start(); } catch (Exception e) { context.log("Unable to listen to '" + queueName + "': " + e.getMessage(), e); } // } else { ... already listening on that queue } }