Jakarta ee 为什么不使用会话bean而不是消息驱动bean呢?

Jakarta ee 为什么不使用会话bean而不是消息驱动bean呢?,jakarta-ee,ejb,message-driven-bean,session-bean,Jakarta Ee,Ejb,Message Driven Bean,Session Bean,我想知道,为什么不使用会话bean而不是消息驱动bean呢 如果您可以从EJB调用远程方法,那么为什么还要麻烦使用消息驱动bean(比会话bean更难开发)发送/接收消息呢 在哪些场景中,消息驱动bean变得有用?与实体/会话bean不同,消息驱动bean异步侦听JMS队列 这不会阻塞服务器资源,因为只有当消息到达队列时才会进行处理 除了大量的Java论坛和站点外,Wikipedia还有一组很好的用例,MDB在其中派上了用场 我想知道,为什么不使用会话bean而不是消息驱动bean呢 嗯,它们

我想知道,为什么不使用会话bean而不是消息驱动bean呢

如果您可以从EJB调用远程方法,那么为什么还要麻烦使用消息驱动bean(比会话bean更难开发)发送/接收消息呢


在哪些场景中,消息驱动bean变得有用?

与实体/会话bean不同,消息驱动bean异步侦听JMS队列

这不会阻塞服务器资源,因为只有当消息到达队列时才会进行处理

除了大量的Java论坛和站点外,Wikipedia还有一组很好的用例,MDB在其中派上了用场

我想知道,为什么不使用会话bean而不是消息驱动bean呢

嗯,它们的用途不同,消息驱动bean允许JavaEE应用程序异步处理消息

如果您可以从EJB调用远程方法,那么为什么还要麻烦使用消息驱动bean(比会话bean更难开发)发送/接收消息呢

因为MDB提供异步性和松耦合,这在某些情况下可能是您想要/需要的:

  • 用于长时间运行的作业
  • 当资源不总是可用时
  • 当您想要并行处理时
顺便说一下,我个人一直认为MDB是最容易开发的企业bean

在哪些场景中,消息驱动bean变得有用

见上文

另见

    • 两者都有不同的用途

      1) 如果您只想将其用于远程方法,那么只需使用会话Bean即可

      2) 但是,如果response/result不重要,但是后面的消息对您来说很重要,那么在JMS创建队列时使用它使其工作并设置消息。但性能问题将存在


      如果您需要使用方法,那么只需使用会话bean,因为它是轻量级bean。它提供了良好的性能。

      我要补充的是,MDB不一定是异步的,它实际上是驱动通信风格的连接器。MDB诞生于JMS,连接器API是从该用例中抽象出来的,但现在连接器/MDB关系实际上允许任何类型的通信。我对EJB有一些想法。接下来,我将进一步简化MDB/连接器的关系,以便连接器可以提供MDB可以使用的自己的注释,从而使@ActivationConfig和显式MessageListener接口的需要变得无关紧要。然后像JAX-RS这样的东西可以作为连接器/MDB来完成。@David说得对(我简化了很多)。你提到的是一个非常有趣的方向。非常感谢你分享这个,大卫。是的,我有点兴奋。我一直想在一篇博文中把它写出来,但既然我们在聊天,我终于忍住了,在另一个旁注上这么做了,“我用哪种豆子类型?”问题是,我希望我们可以通过把一切都建立在@ManagedBean上,让人们专注于他们想要使用的服务,以及他们想要如何暴露他们的bean,来解决这个问题--