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

#jms #java-ee-7 #message-driven-bean #ejb-3.2

#jms #java-ee-7 #компонент, управляемый сообщениями #ejb-3.2

Вопрос:

В настоящее время я изучаю основы 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?

Комментарии:

1. Мой ответ отвечал на ваш вопрос? Если да, пожалуйста, отметьте это как правильное, чтобы помочь другим, у кого может возникнуть такой же вопрос в будущем. Если нет, пожалуйста, уточните, чего не хватает. Спасибо!

Ответ №1:

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

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

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