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 は、任意の POJO を使用可能なコンポーネントとして適応させるために使用される Mule ラッパーです。これが、登録されていない理由です。

個人的には、この種の高度なシナリオでは、Spring を使用して POJO をインスタンス化し、それらをspring-objects inとして参照し、意味のある戦略 (名前で? クラスで?) を使用してcomponent検索します。muleContext.getRegistry()

于 2012-07-10T01:40:38.763 に答える