2013-04-09 58 views
4

我正在尋找圍繞騾子流的一個方面,IE我想定義一個@Around,當某些東西進入騾子流時會被觸發,以便我可以執行自己的統計數據收集。我還沒有找到一個簡單的「流」類來環繞,但我已經看到,MessageReceiver是一個很好的類,或者至少是這個類的實現。AspectJ圍繞Mule MessageReceiver

但是我不是AspectJ的專家,我無法得到它的工作。我有我的@Aspect類與看起來像這樣的方法。

@Around("execution(public * org.mule.api.transport.MessageReceiver+.*(..))") 
public Object addMonitor(ProceedingJoinPoint pjp) throws Throwable { 
    System.out.println("Before"); 
    Object object = pjp.proceed(); 
    System.out.println("After"); 
    return object; 
} 

,但我不能讓前/串打印出HttpMessageReceiver方法被調用時之後。我在流程中設置了一個調試點,可以看到org.mule.transport.AbstractMessageReceiver.routeMessage(MuleMessage message)正在調用,這是MessageReceiver的實現,但我從來沒有看到對我的看法的調用。

是否有可能在Mule中執行這種方面?

//編輯:如上所述,我是AspectJ和AOP的新手,所以我會說我在Mule中使用彈簧來處理我的@Aspect類。我有一些關於Spring處理bean的例子,但不是那些不是由Spring管理的常規POJO。我的Spring配置是這樣的:

<spring:beans> 
    <context:component-scan base-package="com.example" /> 
    <context:annotation-config /> 
    <aop:aspectj-autoproxy /> 
</spring:beans> 

回答

0

我需要加載時織,所以我不得不添加-javaagent爲aspectjweaver和彈簧的儀器,並添加META-INF/aop.xml其鏈接到我的@Aspect類,但只要我這樣做,我被允許做@Around("call(* org.mule.api.transport.MessageReceiver.routeMessage(org.mule.api.MuleMessage))")接到騾的電話。

+0

對於那些試圖實現相同目標的人來說,查看您的aop.xml內容和-javaagent完整行是非常有用的。 – Tristan 2014-08-07 14:40:55

+0

是的,尼古拉斯真的很感激,如果在這裏可以得到完整的細節。我試圖從Studio中獲得類似的工作,並以有限的結果獨立工作。 – yamen 2014-10-05 21:16:54