2012-07-25 4 views
7

अगर हमारे पास उस क्षेत्र में कोड है जिसमें एक अन्य उत्पाद है, और ऑब्जेक्ट्स की एक सूची वापस मिलती है। और हमें सूची में बदलाव करने के लिए कोड को बदलने में अधिक लचीला बनाने के लिए कोड में परिवर्तन करने की आवश्यकता है, क्या हम अंतरिम में ग्राहक के लिए एक इंटरसेप्टर बना सकते हैं, जो सूची को वापस करने से पहले विधि को रोकता है, और सूची से पहले आइटम को हटा देता है वह विधि जो विधि को कॉल करती है वह सूची प्राप्त करती है।कॉलिंग क्लास को प्राप्त करने से पहले ejb इंटरसेप्टर एक विधि के वापसी मूल्य को बदल सकते हैं?

उदा।

OurCode.search() foundObjects

की सूची लौटाता है

अन्य उत्पाद कॉल OurCode.search, प्राप्त करता है 100

आइटम हम एक इंटरसेप्टर कि OurCode.search रिटर्न से पहले अवरोध, और की सूची में परिवर्तन बना सकते हैं अनावश्यक वस्तुओं को हटाने, निष्कर्ष निकाला? भविष्य में रिलीज होने तक यह केवल एक अस्थायी फिक्स होगा

उत्तर

10

जबकि मैं इसे इस तरह से करने की अनुशंसा नहीं करता हूं (समझदारी के लिए, और मेरे अनुभव में "अस्थायी फ़िक्स" स्थायी हो जाएगा) आप कर सकते हैं इंटरसेप्टर के साथ यह।

@AroundInvoke 
Object filterSearchResults(InvocationContext ctx) throws Exception { 
    Object result = ctx.proceed(); 
    if (result != null) { 
     List<SearchResult> results = (List<SearchResult>)result; 
     // do whatever you want to to with your results here 
     return results; 
    } 
    return result; 
} 
संबंधित मुद्दे