2010-08-31 5 views
1

Я прочитал некоторые статьи в блоге о реализации шаблона Observer на JEE6 и что-то меня беспокоит ... Я не могу найти какую-либо информацию atm, поэтому я прошу там .. .Как JEE6 делает связь между Observer и Observee (шаблон наблюдателя)

Я нашел следующие exemples:

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

} 

Я не могу понять, как связь между потребителем и производителем событий событий делается ...

Это соглашение об именах методов? (Где слова «on», «after», «before» ... будут иметь смысл)

Это сопоставление данных аргументов (здесь String и MyEvent)?

Я не могу знать и не видеть, что еще это может быть ...

+0

не это CDI? – Bozho

ответ

2

Связь между запуском события и слушателем основана на типе события.

В вашем примере:

public class EventConsumer { 

    public void afterMyEvent(@Observes MyEvent event) { 
     // .. Insert event logic here 
    } 

} 

Этот класс будет получать все обжигали события типа MyEvent, где бы они ни пришли.

Источник: http://download-llnw.oracle.com/javaee/6/api/javax/enterprise/event/Observes.html

+0

Является ли подпись onHelloParis в примере в вопросе фактически правильной? – tkr

+0

Ответ на первый ответ принят :) Итак, в этих примерах мне интересно, что означает «onXXX» и «afterXXX» ... ничего? –

+0

Я думаю, что подпись правильная да. Этот пример был предоставлен Адамом Бьеном –

6

Контейнер хранит метаданные обо всех бобами внутри него. При запуске он регистрирует все методы наблюдения вместе с событием типа (Class аргумента), который они наблюдают. Всякий раз, когда происходит событие, список наблюдателей проверяется на методы, принимающие соответствующий тип события.

+0

до конца, но спасибо в любом случае –

+0

@Sebastien Lorber, что вы подразумеваете под «до позднего» ?? Мой ответ был получен через 5 минут после того, как вы задали вопрос, и за 2 минуты до принятого ответа. – Bozho

+0

Является ли подпись onHelloParis в примере в вопросе фактически правильным? Требуется строка, как ее можно связать с событием approriate? – tkr