0

给定一个如下所示的 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 组件吗?

4

1 回答 1

2

DefaultJavaComponent 是一个 Mule 包装器,用于将任何 POJO 改编为可用组件,这就是为什么您不会发现它已注册的原因。

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

于 2012-07-10T01:40:38.763 回答