Apache Верблюд с Qpid - Не удается закрыть соединение - PullRequest
0 голосов
/ 13 февраля 2020

Привет, в моем приложении есть 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();
}
...