欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

MDB!= JMS,反之亦然

发布时间:2023/12/3 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 MDB!= JMS,反之亦然 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

基本

  • 消息驱动Bean(又称为MDB)只是另一个EJB,如无状态,有状态或单例。 使用@MessageDriven批注指定。
  • MDB用于异步消息处理
  • 它们与无状态EJB 相似 ,因为它们都是由EJB容器池化的
  • 但是,它们与无状态EJB不同,因为客户端无法直接访问 MDB。 只有容器会调用它们,以响应客户端发送到MDB正在侦听的端点的消息。

MDB的常用模式

  • MDB通常与JMS(Java消息服务API)一起使用
  • MDB配置为使用@ActivationConfigProperty侦听JMS目标,实现javax.jms.MessageListener接口,并在onMessage方法中提供业务逻辑(消息处理)
  • 组件将消息发送到JMS目标( 端点 )。 这不是一个同步过程(如上所述)。 消息触发方法立即返回,容器负责调用配置为侦听该特定JMS目标的MDB

基于JMS的MDB

MDB神话

  • MDB 不属于JMS规范的一部分, 也不以任何方式与JMS 耦合 –这是一个误解。
  • MDB是池化的bean,可以以异步方式处理消息,并且可以侦听任何端点,包括JMS队列或目标 (最常见)。
  • 实际上,从EJB 2.1开始就是这种情况,并且通过JCA(Java连接器体系结构)规范可以实现

什么是JCA?

  • 在较高的层次上,JCA使Java EE服务器可以通过标准SPI与外部系统(例如旧版企业信息源等)进行交互(此处不处理复杂的JCA详细信息)
  • 可以使用JCA标准接口为特定系统构建资源适配器(RAR文件)
  • JCA为Java EE容器与外部系统之间的双向通信(入站和出站)提供合同-资源适配器本身需要实现该实现


礼貌:JCA规范文档

JCA如何实现通用MDB的概念?

  • JCA定义了MDB特定的功能
  • 就像在基于JMS的MDB中一样,基于JCA的MDB也需要实现一个接口并定义激活属性(两者都特定于JCA Resource Adapter实现)
  • 外部系统发送一条消息,资源适配器通过其入站JCA合同的实现接受该消息,并将该消息中继到内部端点(这又是特定于JCA适配器实现的)
  • 注册到此端点的MDB会在接收到的消息上执行业务逻辑

基于JCA的MDB

最终结果

外部系统使用标准接口(JCA)将消息发送到Java EE容器,而JCA实现则负责将其传递到适当的端点,该端点进一步将其传递给已注册的MDB

需要注意的是,由于EJB规范供应商必须支持基于JCA的MDB,因此它在Java EE服务器之间是完全可移植的

进一步阅读

  • JCA规范
  • JMS规范
  • EJB规范

翻译自: https://www.javacodegeeks.com/2015/01/mdb-jms-and-vice-versa.html

总结

以上是生活随笔为你收集整理的MDB!= JMS,反之亦然的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。