是否可以在初始化上下文后以编程方式添加新的Mule Flow?

时间:2014-11-05 18:08:03

标签: mule

我想在Mule运行时(在初始化上下文之后)以编程方式添加新的RSS连接器流。当我尝试这样做时,我得到一个生命周期异常,说上下文已经初始化。

有没有办法在不重新启动整个上下文的情况下执行此操作?

1 个答案:

答案 0 :(得分: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;
}