我想在Mule运行时(在初始化上下文之后)以编程方式添加新的RSS连接器流。当我尝试这样做时,我得到一个生命周期异常,说上下文已经初始化。
有没有办法在不重新启动整个上下文的情况下执行此操作?
答案 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;
}