package com.hsbc.xfos.swapswire.jms; import java.util.Map; import javax.jms.ConnectionFactory; import javax.jms.Destination; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.jndi.JndiTemplate; /** Register/unregister a JMS connection factory in JNDI. */ public class JndiJmsBinder implements InitializingBean, DisposableBean { private final static Log log = LogFactory.getLog(JndiJmsBinder.class); private ConnectionFactory jmsConnectionFactory; private JndiTemplate jndiTemplate; private String connectionFactoryName; private Map destinations; public void afterPropertiesSet() { try { Thread.sleep(5000); jndiTemplate.bind(connectionFactoryName, jmsConnectionFactory); for (String key : destinations.keySet()) jndiTemplate.bind(key, destinations.get(key)); log.info("JMS object bound to JNDI"); } catch (Exception e) { throw new RuntimeException("Cannot bind JMS objects", e); } } public void destroy() { try { for (String key : destinations.keySet()) jndiTemplate.unbind(key); jndiTemplate.unbind(connectionFactoryName); log.info("JMS object unbound to JNDI"); } catch (Exception e) { throw new RuntimeException("Cannot unbind JMS objects", e); } } public void setJmsConnectionFactory(ConnectionFactory jmsConnectionFactory) { this.jmsConnectionFactory = jmsConnectionFactory; } public void setJndiTemplate(JndiTemplate jndiTemplate) { this.jndiTemplate = jndiTemplate; } public void setConnectionFactoryName(String connectionFactoryName) { this.connectionFactoryName = connectionFactoryName; } public void setDestinations(Map destinations) { this.destinations = destinations; } }