Comment JEE6 fait le lien entre l'observateur et OBSERVEE (modèle d'observateur)
Question
J'ai lu certains articles de blog sur Observer la mise en œuvre du modèle sur JEE6 et quelque chose me dérange ... Je ne peux trouver aucune information atm je demande donc là ...
J'ai trouvé les exemples suivants:
@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);
}
}
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
}
}
Je ne comprends pas comment le lien entre le producteur et consommateur d'événements événement est fait ...
Est-ce en nommant la convention des méthodes? (Lorsque les mots « sur », « après », « avant » ... auront le sens)
Est-ce par comparaison des arguments donnés (ici String et myEvent)?
Je ne peux pas savoir et ne vois pas quoi d'autre pourrait-il être ...
La solution
Le lien entre la mise à feu de l'événement et l'auditeur est basé sur le type d'événement.
Dans votre exemple:
public class EventConsumer {
public void afterMyEvent(@Observes MyEvent event) {
// .. Insert event logic here
}
}
Cette classe recevra tous les événements tirés de type MyEvent, d'où qu'ils viennent.
Source: http: // Télécharger -llnw.oracle.com/javaee/6/api/javax/enterprise/event/Observes.html
Autres conseils
Le conteneur conserve des métadonnées sur tous les haricots à l'intérieur. Au démarrage, il enregistre toutes les méthodes d'observation ainsi que le type d'événement (le Class
de l'argument) qu'ils observent. Chaque fois qu'un événement est déclenché, la liste des observateurs est vérifié pour les méthodes qui acceptent le type d'événement approprié.