Come JEE6 rende il legame tra osservatore e Observee (Observer Pattern)
Domanda
Ho letto alcuni articoli di blog su implementazione pattern Observer su JEE6 e qualcosa mi dà fastidio ... non riesco a trovare alcuna informazione atm Quindi chiedo lì ...
ho trovato i seguenti esempi:
@Stateless
[...]
public class ParisJugService {
@Inject
Event event;
public void helloParis(){
System.out.println("Hello Paris");
event.fire("hello Paris invoked!");
}
}
@Stateless
public class EventReceiver {
public void onHelloParis(@Observes String message){
System.out.println("----------- " + message);
}
}
E
public class MyEvent {
String data;
Date eventTime;
....
}
public class EventProducer {
@Inject @Any Event<MyEvent> event;
public void doSomething() {
MyEvent e=new MyEvent();
e.data="This is a test event";
e.eventTime=new Date();
event.fire(e);
}
}
public class EventConsumer {
public void afterMyEvent(@Observes MyEvent event) {
// .. Insert event logic here
}
}
Non riesco a capire come il legame tra consumatore e produttore dell'evento evento è fatto ...
E 'per convenzione di denominazione dei metodi? (Dove le parole "a", "dopo", "prima" ... avranno senso)
E 'al confronto di argomenti dati (qui String e MyEvent)?
Non posso sapere e non vedere che cosa altro potrebbe essere ...
Soluzione
Il legame tra la cottura evento e l'ascoltatore si basa sul tipo di evento.
Nel tuo esempio:
public class EventConsumer {
public void afterMyEvent(@Observes MyEvent event) {
// .. Insert event logic here
}
}
Questa classe riceverà tutti sparato eventi di tipo MyEvent, indipendentemente dalla loro provenienza.
Fonte: http: // scaricare -llnw.oracle.com/javaee/6/api/javax/enterprise/event/Observes.html
Altri suggerimenti
Il contenitore di metadati mantiene su tutti i fagioli al suo interno. All'avvio registra tutti i metodi osservatori insieme al tipo di evento (la Class
dell'argomento) si osservano. Ogni volta che un evento viene generato, l'elenco degli osservatori viene controllato per i metodi che accettano il tipo appropriato di evento.