Можно ли программно добавить новый поток мула после того, как контекст был инициализирован?
Я хотел бы программно добавить новые потоки коннектора 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;
}