Событие в @Stateless EJB

У меня есть сессионный компонент без сохранения состояния (java ee 6, cdi), который генерирует события

@Stateless
public class CustomerService {
@Inject @ErrorMessage Event<BaseEvent> errMsg;
//[...]
public Customer getCustomer(String username, String password) {
    Customer cust = null;
    try {
    //[...]
    } catch (Exception ex) {
        errMsg.fire(new BaseEvent("user not found [username="+username+"]"));
    }

Этот компонент является частью ejb-модуля. С другой стороны, у меня есть два наблюдателя событий, которые слушают эти события. Они похожи

public void showErrorMessage(@Observes @ErrorMessage BaseEvent event) {
    //do something with the event.
}

Один наблюдатель тоже есть в ejb-модуле. Другой наблюдатель находится в военном модуле. "ejb"-наблюдатель не поймает этот вызов другим.

Если нет возможности отправить событие из ejb-модуля в war-модуль?

Примечание: Можно с war-модуля на ejb-модуль.


person h2mch    schedule 27.07.2011    source источник
comment
Почему вы разделяете классы? Поскольку вы используете JEE 6, у вас может быть все в разделе WEB-INF/classes.   -  person Alexander Rühl    schedule 02.08.2011
comment
Мне нужна JMS в этой части приложения и насколько я знаю. JMS не работает в веб-проекте. Поправьте меня если я ошибаюсь   -  person h2mch    schedule 03.08.2011
comment
Извините за поздний ответ - зависит от того, что вы подразумеваете под веб-проектом. Если вы имеете в виду использование веб-профиля, который представляет собой сокращенный набор API на вашем сервере приложений, то это правильно, JMS не является его частью. Но если у вас есть стандартный JEE - полный - профиль, вы можете упаковать все в WAR (неважно, действительно ли у вас веб-приложение или просто бэкэнд-приложение), и тогда вам не придется разделять EJB и другой код. .   -  person Alexander Rühl    schedule 08.08.2011


Ответы (1)


Это может сводиться к тому, является ли видимость загрузчика классов из одного модуля в другой также асимметричной. Таким образом, если WAR не виден с точки зрения загрузчика классов, BeanManager в этой WAR не думает, что кто-то еще @наблюдает за ним, потому что ему не требуется сканировать модули, которые не видны.

person covener    schedule 29.07.2011