Interface EJB/本地EJB调用之间的回调
您可以在MDB中将EJB注册为回调吗Interface EJB/本地EJB调用之间的回调,interface,callback,ejb,local,Interface,Callback,Ejb,Local,您可以在MDB中将EJB注册为回调吗 B.寄存器(Aref) 在B中:A.callback() 如果EJB使用本地调用,Aref将是什么? SessionContext.getEJBLocalObject()?以建议的方式,您提出的问题实际上是不可能的 如果B是一个消息驱动Bean,那么永远不可能对其调用方法。在消息传递范例中,消息接收者的类型未知。因此,您不能引用MDB的实例。相反,您将消息发布到队列或主题,并且如果您的MDB配置为侦听消息,则将调用其onMessage()方法 其次,在EJB
B.寄存器(Aref)
在B中:A.callback()
如果EJB使用本地调用,Aref将是什么?
SessionContext.getEJBLocalObject()
?以建议的方式,您提出的问题实际上是不可能的
如果B
是一个消息驱动Bean,那么永远不可能对其调用方法。在消息传递范例中,消息接收者的类型未知。因此,您不能引用MDB的实例。相反,您将消息发布到队列或主题,并且如果您的MDB配置为侦听消息,则将调用其onMessage()
方法
其次,在EJB中,不像示例代码中那样经常传递引用。A应该是什么样的EJB bean?是无状态会话bean,还是有状态会话bean
如果它是一个无状态会话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回复
在发送给消息驱动bean的消息中,您将包含如下代码:
message.setJMSReplyTo(someDestination);
message.setJMSCorrelationID(someCorrelationID);
someDestination
表示回调,它是某个对象正在侦听的目标,然后该对象可以调用无状态会话bean(在客户端上下文中)上的调用
例如,类似于:
connection.createSession(false, Session.AUTO_ACKNOWLEDGE).createConsumer(someDestination).setMessageListener(
new MessageListener() {
@Override
public void onMessage(Message message) {
yourABean.someMethod();
}
}
在这种情况下,someDestination可以是一个临时目的地。更好的表述是,我想从MDB向其他bean a分派。我想动态地让EJB知道B,这样我就可以有一个从MBD到a的分派机制。