Привет, в моем приложении есть apache верблюжьих маршрутов, чтобы потреблять и производить. Я могу остановить маршрут используя маршрут camelCOntext.stop. После остановки маршрута я также хочу остановить фабрику соединений, чего я НЕ МОГУ сделать. Я извлек JMSComponent из camelcontext, но когда я пытаюсь остановить connectionFactory, я не могу найти никакого контроля над ним.
Ниже приведен код создания camelContext
public void initializeConnectionFactories() throws Exception {
List<DsConnectionFactoryEntity> records = connRepo.findAllByEnabled(true);
loadFactoriesInContext(records);
}
private void loadFactoriesInContext(List<DsConnectionFactoryEntity> connFactories) throws Exception {
// TODO Auto-generated method stub
for (DsConnectionFactoryEntity connFactory : connFactories) {
cmlCntxt.addComponent(connFactory.getName(), createCamelJmsComponent(connFactory));
}
cmlCntxt.start();
}
public JmsComponent createCamelJmsComponent(DsConnectionFactoryEntity connFactory) throws Exception {
if (!connFactory.isEnabled()) {
logger.info("Connection Factory {} not started \n Reason: Disabled", connFactory.getName());
return null;
}
JmsComponent jmsComponent = new JmsComponent();
jmsComponent.setConnectionFactory(incomingConnFactory(initialContext(buildUrl(connFactory),
connFactory.getUsername(), connFactory.getPassword(), connFactory.getName()), connFactory.getName()));
jmsComponent.setExplicitQosEnabled(true);
// jmsComponent.setTimeToLive(gcaaTtlTime);
return jmsComponent;
}
public InitialContext initialContext(String url, String userName, String passwd, String connFactNme)
throws NamingException {
javax.naming.Context context = null;
url = url + ((userName.isEmpty()) ? "" : ("&jms.username=" + userName))
+ ((passwd.isEmpty()) ? "" : ("&jms.password=" + passwd));
try {
Hashtable<Object, Object> env = new Hashtable<Object, Object>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.qpid.jms.jndi.JmsInitialContextFactory");
env.put("connectionfactory." + connFactNme, url);
context = new javax.naming.InitialContext(env);
} catch (NamingException e) {
logger.error(e.getMessage());
}
return (InitialContext) context;
}
public ConnectionFactory incomingConnFactory(InitialContext initialContext, String connFactoryName)
throws JMSException {
ConnectionFactory incomingConnFactory = null;
try {
incomingConnFactory = (ConnectionFactory) initialContext.lookup(connFactoryName);
logger.info("{} Connection Factory Created", connFactoryName);
} catch (NamingException e) {
logger.error("Connection Factory Not created \n" + connFactoryName + e.getMessage());
}
return incomingConnFactory;
}
Я ищу соединение методы закрытия примерно так:
{
JmsComponent connFactComponent = (JmsComponent) cmlCntxt.removeComponent(connName);
connFactComponent.getConnection().close();
}