Можете ли вы зарегистрировать EJB A как обратный вызов в MDB B?Обратный звонок между EJB/локальными вызовами EJB
B.register(Aref)
в B: A.callback()
Что бы Ареф, если EJBs использовать местные звонки? SessionContext.getEJBLocalObject()
?
Можете ли вы зарегистрировать EJB A как обратный вызов в MDB B?Обратный звонок между EJB/локальными вызовами EJB
B.register(Aref)
в B: A.callback()
Что бы Ареф, если EJBs использовать местные звонки? SessionContext.getEJBLocalObject()
?
То, о чем вы просите, на самом деле невозможно.
Если B
- это управляемый сообщением компонент, то на нем никогда невозможно вызвать метод. В парадигме обмена сообщениями тип получателя сообщения неизвестен. Таким образом, вы не можете ссылаться на экземпляр MDB. Вместо этого вы отправляете сообщения в очередь или тему, и если ваш MDB настроен на прослушивание, то его метод onMessage()
будет вызываться.
Во-вторых, в EJB вы не часто передаете ссылки, как в вашем примере кода. Каким должен быть EJB bean? Асинхронный сеансовый компонент или сеансовый компонент с состоянием?
В случае это сессионный компонент, экземпляр не вопрос, и вы, вероятно, можете просто вводить его:
@MessageDriven
public class NSMessageDrivenBean implements MessageListener {
@EJB
private A yourABean;
public void onMessage(Message message) {
// process message and then call A
yourABean.someMethod();
}
}
Если обратный вызов должен быть сделан к типу, который неизвестен заранее (в зависимости от отправляемое сообщение), то один из них для этого - через JMS reply
.
В сообщении время отправки в управляемый сообщениями, вы затем включить код, как это:
message.setJMSReplyTo(someDestination);
message.setJMSCorrelationID(someCorrelationID);
someDestination
представляет свой обратный вызов, это назначение, к которому что-то слушает, а потом это что-то можно вызвать вызовите сессионный компонент без состояния (в контексте клиента).
E.g. что-то вроде:
connection.createSession(false, Session.AUTO_ACKNOWLEDGE).createConsumer(someDestination).setMessageListener(
new MessageListener() {
@Override
public void onMessage(Message message) {
yourABean.someMethod();
}
}
В этом случае someDestination может быть временным назначением.
Лучше сформулированный, я хотел бы отправить из MDB другим фасолям A. И я хотел динамически сделать B известным EJB, поэтому я мог бы иметь диспетчерский механизм от MBD до A. – weberjn