У меня есть приложение, которое должно взаимодействовать с двумя внешними системами A и B. Поэтому я создаю фактически 2 контейнера, как это:
private DefaultMessageListenerContainer createContainer(Conf conf) {
DefaultMessageListenerContainer jmsCnr= new DefaultMessageListenerContainer();
jmsCnr.setConnectionFactory(connectionFactoryAdapter);
jmsCnr.setDestinationResolver(destinationResolver);
jmsCnr.setDestinationName(destinationName);
jmsCnr.setMessageListener(MyClass);
jmsCnr.initialize();
return jmsCnr;
}
И создание фабрики соединений происходит следующим образом:
private ConnectionFactory createConnectionFactory(Conf conf) {
JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
JndiTemplate jndiTemplate = getJNDITemplate(conf);
String connectionFactoryJndiName = conf.getConnectionFactoryJndi();
jndiObjectFactoryBean.setJndiTemplate(jndiTemplate);
jndiObjectFactoryBean.setJndiName(connectionFactoryJndiName);
jndiObjectFactoryBean.setProxyInterface(ConnectionFactory.class);
jndiObjectFactoryBean.setLookupOnStartup(false);
try {
jndiObjectFactoryBean.afterPropertiesSet();
} catch (NamingException e) {
e.printStackTrace();
}
return (ConnectionFactory) jndiObjectFactoryBean.getObject();
}
После того как контейнеры созданы, я зацикливаюсь на них и вызываю start ().
Все работает нормально Мой слушатель получает сообщение в случае, если сообщение отправлено во внешнюю систему A.
Однако, если я настраиваю свой класс запуска для создания двух контейнеров для внешней системы A и для B, я не получаю сообщения из очередей системы A, а из системы B получаются сообщения.
Опять же, я использую Spring-реализации без Spring-контекста, все программно.
Мой вопрос: где я что-то упускаю? Кажется, создание второго экземпляра DefaultMessageListenerContainer для внешней системы B переопределяет предыдущий.