2012-07-25 4 views
7

Wenn wir Code in dem Feld haben, das eine Methode hat, die ein anderes Produkt aufruft, und erhält eine Liste von Objekten zurück. Und wir müssen Änderungen am Code vornehmen, damit die Liste leichter ausgefüllt werden kann. Können wir in der Zwischenzeit einen Interceptor für den Kunden erstellen, der die Methode abfängt, bevor sie die Liste zurückgibt, und vorher Elemente aus der Liste entfernt Das Produkt, das die Methode aufruft, ruft die Liste ab.Können ejb Interzeptoren den Rückgabewert einer Methode ändern, bevor die aufrufende Klasse es bekommt?

z.B.

OurCode.search() gibt eine Liste von foundObjects

Weitere Produkt ruft OurCode.search erhält 100 Artikel

Können wir einen Abfangjäger, die abfängt, bevor OurCode.search kehrt zu erstellen, und ändern Sie die Liste der FoundObjects, unnötige Elemente entfernen? Dies wäre nur eine temporäre Lösung, bis eine zukünftige Version

Antwort

10

Während ich nicht empfehlen, es so zu tun (aus Gründen der Verständlichkeit, und wie meiner Erfahrung nach die "temporäre Lösung" wird zu einem dauerhaften) können Sie tun dies mit Interzeptoren.

@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; 
} 
Verwandte Themen