package com.solace.samples.cloudfoundry.springcloud.controller; import javax.jms.ConnectionFactory; import javax.naming.NamingException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jms.connection.CachingConnectionFactory; import org.springframework.jms.core.JmsTemplate; import org.springframework.jms.support.destination.JndiDestinationResolver; import org.springframework.jndi.JndiObjectFactoryBean; import org.springframework.jndi.JndiTemplate; @Configuration public class JndiProducerConfiguration { // Resource definitions: connection factory and queue destination @Value("${solace.jms.demoConnectionFactoryJndiName}") private String connectionFactoryJndiName; // Use from the jndi connection config @Autowired private JndiTemplate jndiTemplate; public JndiObjectFactoryBean producerConnectionFactory() { JndiObjectFactoryBean factoryBean = new JndiObjectFactoryBean(); factoryBean.setJndiTemplate(jndiTemplate); factoryBean.setJndiName(connectionFactoryJndiName); // following ensures all the properties are injected before returning try { factoryBean.afterPropertiesSet(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (NamingException e) { e.printStackTrace(); } return factoryBean; } public CachingConnectionFactory cachingConnectionFactory() { CachingConnectionFactory ccf = new CachingConnectionFactory((ConnectionFactory) producerConnectionFactory().getObject()); ccf.setSessionCacheSize(10); return ccf; } // DynamicDestinationResolver can be used instead for physical, non-jndi destinations public JndiDestinationResolver producerJndiDestinationResolver() { JndiDestinationResolver jdr = new JndiDestinationResolver(); jdr.setCache(true); jdr.setJndiTemplate(jndiTemplate); return jdr; } @Bean public JmsTemplate producerJmsTemplate() { JmsTemplate jt = new JmsTemplate(cachingConnectionFactory()); jt.setDeliveryPersistent(true); jt.setDestinationResolver(producerJndiDestinationResolver()); jt.setPubSubDomain(true); // This sample is publishing to topics return jt; } }