2012-07-25 19 views
7

Se nel campo è presente un codice che ha un metodo richiamato da un altro prodotto e ottiene un elenco di oggetti. E abbiamo bisogno di apportare modifiche al codice per renderlo più flessibile nel compilare la lista da restituire, possiamo nel frattempo creare un intercettore per il cliente, che intercetta il metodo prima che ritorni alla lista e rimuova gli elementi dalla lista prima il prodotto che chiama il metodo ottiene la lista.Gli intercettatori ejb possono cambiare il valore di ritorno di un metodo prima che la classe chiamante lo ottenga?

ad es.

OurCode.search() restituisce una lista di foundObjects

Altro prodotto chiama OurCode.search, riceve 100 articoli

Possiamo creare un intercettore che intercetta prima del ritorno di OurCode.search, e modificare l'elenco dei foundObjects, rimozione di elementi non necessari? Questa sarebbe solo una correzione temporanea fino a una versione futura

risposta

10

Mentre io non consiglio di farlo in quel modo (per motivi di comprensibilità, e come nella mia esperienza la "correzione temporanea" diventerà permanente) si può fare questo con Interceptors.

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