2012-07-05 52 views
0

給定一個Java組件,如一個下面如何查找Mule中的Java組件?

<flow name="MainFlow2" doc:name="MainFlow2"> 
    ... 
    <component class="com.service.gateway.MyService" doc:name="My Gateway"/> 
    ... 
</flow> 

我試圖同時做這個

muleContext.getRegistry().lookupObjects(DefaultJavaComponent.class); 

註冊自定義代理

<custom-agent name="my-agent" class="com.monitor.MyAgent"/> 

得到它看起來像這些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

我已經運行了一些測試,並且每個組件都在註冊表中正確註冊。你的組件擴展/實現了哪些類/接口? – genjosanzo 2012-07-07 11:39:31

+0

@genjosanzo沒有,他們是POJO。他們是哪個註冊管理機構? – rodrigoap 2012-07-08 20:37:02

+0

,所以它們可能不會被註冊爲DefaultJavaComponent。您是否嘗試直接查找它們(例如muleContext.getRegistry()。lookupObjects(MyService.class))? – genjosanzo 2012-07-08 23:21:30

回答

2

DefaultJavaComponent是一個Mule包裝器,用於將任何POJO調整爲可用的組件,這就是爲什麼您不會找到它註冊的原因。

就個人而言,對於這種先進的情況下,我會用Spring來實例化了我的POJO,在component稱它們爲spring-object S和使用任何戰略有道理看看他們在muleContext.getRegistry()(按名稱?通過類?)。

+0

事情是,我想要得到的包裝,按名稱或類將返回POJO實例。 – rodrigoap 2012-07-10 02:17:50

+0

對不起,我誤解了,我以爲你想要POJO實例。 – 2012-07-10 16:02:28