2012-01-11 36 views
0

我正在Glassfish 3.1上编写入站资源适配器(连接器模块),并且我注意到Java EE SDK示例中使用了MDB将消息从EIS传递到Glassfish应用程序。如果目标对象是EJB,是否有必要使用MDB?对目标EJB执行JNDI查找并直接传递给它是明智的做法,完全避免MDB?Java EE连接器交付给EJB而不是MDB

谢谢!

回答

3

在后一种情况下,您执行同步操作,而第一种方法是异步操作。在应用程序(A2A)集成场景中,实现异步接口几乎总是一个很好的决定。关于这方面已经写了很多,请让我参考Java documentation itself,例如6.3.3节:

设计应用程序时,你需要决定是否使用其目标EISes和 现有的应用程序 同步或异步集成。同步和异步集成方法对于应用程序集成都是有效的,而选择 应基于集成要求和用例。基地 您对以下准则的决定。

  • 服务质量所需 - 使用一个队列或发布 - 订阅系统提供更高质量的服务,诸如 消息路由和可靠的消息传递,比同步 通信。
  • 应用程序吞吐量 - 异步消息传递可以导致更好的吞吐量,因为队列缓冲消息,支持消息路由,并保证消息传递。
  • 事务集成 - 同步通信模型更适合于当应用程序需要对客户端 请求处理同步执行安全和事务访问一个或多个EIS时。在这种情况下,应用程序可以承担与EIS更紧密耦合的开销,以确保更高质量的请求处理和错误处理。
  • 编程模型复杂性 - 异步通信编程模型比更常见的同步请求 - 响应模型更复杂。尽管异步模型提供了更多的服务,但成本更高,应用程序复杂性更高,而开发人员更愿意使用更多的工作。

最后,也许是没有必要的,但它可能是明智的,实现一个MDB。

+0

感谢您的回答。诚然,EJB也支持异步方法。如果需要异步处理,可以使用它们。 – Dario 2012-01-11 13:08:50

+0

@Dario:是的,但两者之间没有消息传递引擎。这是关于异步调用,而不是消息。在基于MDB的场景中,您可以定义处理队列的最大数量的并行MDB。您有另一个间接级别(并且可能您可以以持久方式实现队列)。 – home 2012-01-11 13:11:42

+0

非常好,非常感谢您的反馈。 – Dario 2012-01-11 14:26:16