【问题标题】:is MessageDrivenBean no longer used from ejb3.0?从 ejb3.0 开始不再使用 MessageDrivenBean 了吗?
【发布时间】:2014-09-17 05:20:27
【问题描述】:

在 jms 中,我们有 MessageLister , onMesssage 接收消息。那为什么我们需要MessageDrivenBean?这已经过时了吗?在 javaee6 MDB api 中,他们说从 ejb 3.0 开始,它没有被使用。 mdb 和 jms 有什么区别?

什么是 Jms 中的同步调用?该响应是否立即返回给调用者? Jms中是否保证同步调用?

【问题讨论】:

标签: jms message-driven-bean


【解决方案1】:

首先让我们消除一个误解:EE6 Javadoc for the MessageDrivenBean interface 状态

从 EJB 3.0 开始,不再需要消息驱动的 bean 类实现此接口

这是因为从 EJB 3.0 开始,您通常会使用 @MessageDriven 注释来声明 MDB,并使用 @Resource 注释来获取其 MDC。像这样,from the official tutorial

@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName = "destinationLookup",
            propertyValue = "jms/MyQueue"),
    @ActivationConfigProperty(propertyName = "destinationType",
            propertyValue = "javax.jms.Queue")
})
public class SimpleMessageBean implements MessageListener {

    @Resource
    private MessageDrivenContext mdc;
    static final Logger logger = Logger.getLogger("SimpleMessageBean");

尽管经常一起使用,MDB 和 JMS 是完全不同的东西:

  • MDB 是异步消息接收器的编程模型,非常适合 JavaEE 编程环境,并且与其他 EJB 类型共享重要属性,例如事务感知。
  • JMS 是一种消息传递技术规范,即面向消息的中间件的蓝图。

MDB 可以与其他消息传递技术一起使用,而 JMS 显然可以在 MDB 之外使用。在我看来,在 Java EE 应用程序中使用 MDB 的要点是易于实现可以感知事务的消息端点。

在同步消息系统系统中,发送端将等待消息被传递。然而,在异步系统中,发送者无需等待实际交付就立即返回。这会导致系统两端之间的耦合更加松散,并且您的发送端由于接收器故障或过载而锁定/减速的风险为零。

【讨论】:

    猜你喜欢
    • 2011-08-22
    • 2010-10-30
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 2022-11-16
    • 2011-05-04
    • 1970-01-01
    • 2016-02-14
    相关资源
    最近更新 更多