Можно ли вызывать MessageDrivenBean удаленно напрямую через интерфейс @Remote?

В настоящее время я изучаю основы EJB 2+. В книге Java EE 7 The Big Picture упоминалось:

Доступ к сеансовым компонентам обычно осуществляется через удаленный интерфейс (хотя, как мы увидим, бывают случаи, когда удаленный интерфейс не требуется), в то время как компоненты, управляемые сообщениями, имеют только класс реализации компонента.

Основываясь на приведенном выше утверждении, вызов компонента, управляемого сообщениями (MDB), аналогичен вызову удаленного сессионного компонента через remote interface, интерфейс которого на стороне сервера выполняется с аннотацией @Remote. , кажется невозможным.

Например, если в удаленном контейнере EJB есть MDB:

@Remote
@MessageDriven(mappedName="jms/HelloQueue")
public class HelloMDB implements MessageListener {
    public void onMessage(Message msg) {
        //implementation
    }
}

Вопрос: может ли MDB, упомянутая выше, вызываться удаленным клиентом напрямую и программно, например. через JNDI?


person Rui    schedule 17.08.2020    source источник
comment
Отвечал ли мой ответ на ваш вопрос? Если это так, отметьте это как правильное, чтобы помочь другим, у которых может возникнуть такой же вопрос в будущем. Если нет, подскажите, чего не хватает. Спасибо!   -  person Justin Bertram    schedule 30.08.2020


Ответы (1)


Нет, MDB не может быть вызван удаленным клиентом напрямую, как указано в этой Учебник по Java EE 7 от Oracle, в котором говорится:

Клиентские компоненты не находят компоненты, управляемые сообщениями, и не вызывают методы непосредственно для них.

Если вы хотите вызвать onMessage MDB, просто отправьте сообщение в пункт назначения, где он прослушивается.

person Justin Bertram    schedule 17.08.2020