Мы настраиваем наши назначения JMS через поиск JNDI следующим образом:
@Bean
JndiObjectFactoryBean myTopic(@Value("${topic}") String topic,
JndiTemplate jndiTemplate) {
JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
jndiObjectFactoryBean.setJndiTemplate(jndiTemplate);
jndiObjectFactoryBean.setJndiName(topic);
return jndiObjectFactoryBean;
}
При инициализации этого bean-компонента Spring подтверждает, что объект существует, и кэширует его для дальнейшего использования. Включает ли кеширование этого пункта назначения постоянное соединение с нашим брокером? Или соединение создается физически только при создании экземпляра нашего CachingConnectionFactory?
(Единственное и совместно используемое) соединение создается при первом вызове createConnection() на своем экземпляре CachingConnectionFactory и освобождается при вызове destroy() или resetConnection(), как указано в контракте (CachingConnectionFactory наследуется от SingleConnectionFactory):
A JMS ConnectionFactory adapter that returns the same Connection from all createConnection() calls, and ignores calls to Connection.close()