给出类似下面的Java组件
<flow name="MainFlow2" doc:name="MainFlow2">
...
<component class="com.service.gateway.MyService" doc:name="My Gateway"/>
...
</flow>
我正在尝试注册自定义代理
<custom-agent name="my-agent" class="com.monitor.MyAgent"/>
这样做
muleContext.getRegistry().lookupObjects(DefaultJavaComponent.class);
看起来这些java组件不在注册表中,我没有得到它们。
到目前为止,我有这个解决方法
// Get all flows
for (AbstractFlowConstruct flowConstruct : muleContext.getRegistry().lookupObjects(AbstractFlowConstruct.class)) {
if (flowConstruct instanceof AbstractPipeline) {
//get flow's MessageProcessor
List<MessageProcessor> mgs = ((AbstractPipeline) flowConstruct).getMessageProcessors();
for (MessageProcessor messageProcessor : mgs) {
if (messageProcessor instanceof DefaultJavaComponent) {
DefaultJavaComponent javaComp = (DefaultJavaComponent) messageProcessor;
//GOT IT!
}
}
}
}
您是否知道如何以编程方式直接获取所有Java组件?
答案 0 :(得分:2)
DefaultJavaComponent是一个Mule包装器,用于将任何POJO作为可用组件进行调整,这就是为什么你不会发现它被注册的。
就个人而言,对于这种高级场景,我会使用Spring来实例化我的POJO,在spring-object
中将它们称为component
并使用任何策略在muleContext.getRegistry()
中查找它们有意义(按名称?按类?)。