Можно ли программно добавить новый поток мула после того, как контекст был инициализирован?

Я хотел бы программно добавить новые потоки коннектора RSS во время работы Mule (после инициализации контекста). Когда я пытаюсь это сделать, я получаю исключение жизненного цикла, в котором говорится, что контекст уже инициализирован.

Есть ли способ сделать это без перезапуска всего контекста?

1 ответ

Решение

Я нашел решение самостоятельно. Оказалось, что создание нового контекста Mule, добавление моего потока, а затем запуск контекста работает просто отлично. Фактически, это оказалось проще, быстрее и чище, чем тот путь, по которому я шел.

Создание контекста Mule по умолчанию работало для меня просто отлично. Возможно, вам придется добавить ConfigurationBuilder к себе, если у вас есть особые потребности.

MuleContext newMuleContext = new DefaultMuleContextFactory().createMuleContext();
MuleRegistry registry = newMuleContext.getRegistry();
Flow flow = createFlow();
registry.registerFlowConstruct(flow);
newMuleContext.start();

Редактировать. Вот метод createFlow. Ваши особенности будут отличаться в зависимости от потребностей вашего приложения.

protected Flow createFlow(MuleContext context, RssBean feed) throws Exception {
  MuleRegistry registry = context.getRegistry();
  String feedName = feed.getName();
  HttpPollingConnector connector = getHttpPollingConnector(context, registry, feedName);
  EndpointURIEndpointBuilder endpointBuilder = getEndpointBuilder(context, feed, registry, shortName, connector);
  registry.registerEndpointBuilder(feedName + ".in", endpointBuilder);
  MessagePropertiesTransformer transformer = getTransformer(context, feedName);
  MessageProcessor mp = getOutboundFlowRef(context);
  Flow flow = getFlow(context, shortName, endpointBuilder, transformer, mp);
  registry.registerFlowConstruct(flow);
  return flow;
}
Другие вопросы по тегам