如何在Mule中查找Java组件?

时间:2012-07-05 22:29:07

标签: java mule

给出类似下面的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组件?

1 个答案:

答案 0 :(得分:2)

DefaultJavaComponent是一个Mule包装器,用于将任何POJO作为可用组件进行调整,这就是为什么你不会发现它被注册的。

就个人而言,对于这种高级场景,我会使用Spring来实例化我的POJO,在spring-object中将它们称为component并使用任何策略在muleContext.getRegistry()中查找它们有意义(按名称?按类?)。