除第 2 章, 用戶端程式設計模型介紹的一般 JMS 用戶端程式設計模型之外,還有專用於 J2EE 平台應用程式環境的 JMS 用戶端改寫版本。此專用的用戶端稱為訊息驅動 Bean,是 EJB 2.0 (及更新版本) 規格 (http://java.sun.com/products/ejb/docs.html) 中所描述的 Enterprise JavaBeans (EJB) 元件系列之一。
訊息驅動 Bean 提供非同步訊息傳送;其他 EJB 元件 (階段作業 Bean 和實體 Bean) 僅可透過標準 EJB 介面同步呼叫。然而,企業應用程式經常需要非同步訊息傳送,讓伺服器端元件在不佔用伺服器資源的情況下互相通訊。任何應用程式的伺服器端元件只要必須回應應用程式事件,都需要 EJB 元件以接收和使用訊息,而不需要緊密耦合到訊息產生器。在企業應用程式中,此功能還必須能夠在負載不斷增加的情況下進行延伸。
訊息驅動 Bean (MDB) 是專用 EJB 容器 (為所支援的元件提供分散式服務) 支援的 EJB 元件。
JMS 訊息驅動 Bean 是實作 JMS MessageListener 介面的 EJB。在 MDB 容器接收訊息時,會呼叫 onMessage 方法 (由 MDB 開發者編寫)。onMessage() 方法使用該訊息的方式,與標準 MessageListener 物件的 onMessage() 方法一樣。您不能使用其他 EJB 元件上呼叫方法的方式,在 MDB 上遠端呼叫方法:因此不存在與其關聯的本機介面或遠端介面。MDB 可以使用來自單一目標的訊息。獨立式 JMS 應用程式、JMS 元件、EJB 元件或 Web 元件均可產生訊息,如圖 5–1 所示。
專用 EJB 容器支援 MDB。它會建立並設定 MDB 實例,以便非同步使用訊息。該容器會建立與訊息服務 (包括認證) 的連線、建立與指定目標相關聯的階段作業池,並管理階段作業池之間的訊息分發作業。由於容器控制 MDB 實例的生命週期,因此容器透過管理 MDB 實例池來容納內送訊息負載。
與 MDB 相關聯的是部署描述元,此描述元會於設定訊息使用時,為容器使用的連線工廠和目標設定屬性。部署描述元還可以包括部署工具用於配置容器所需的其他資訊。每個這類容器均支援單一 MDB 可以有多個實例。