Message-Driven Bean
Message-driven Bean是EJB2.0引入的新類型企業bean。它允許J2EE應用以非同步方式接收JMS訊息(非同步訊息允許應用程式或組件與其它應用程式或組件以這樣一種方式交換資訊:即發送方可以與接收方無關)。發送方發送訊息無需等待接收方來接收或處理訊息。
Message-driven beans是接收JMS供應方(provider)發來的訊息的組件。它的主要職責是處理訊息,因為bean的容器自動管理著message-driven bean的環境的其它方面。Message-driven beans包括處理接收訊息的商務邏輯。它的商務邏輯與接收到的整個訊息內容相關,或者在接收訊息時被一些情況所驅動。它的商務邏輯可能包括這些操作:
ü 運行計算
ü 啟動工作流程中的步驟
ü 儲存資料
ü 發送其它訊息
Message-driven beans做為訊息監聽器,從JMS目的地(queue或topic)消費(consuming)訊息。雖然mdb目前僅限於JMS訊息,但期望在將來的EJB規範中允許mdb相容其它訊息系統以進行更好的支援。
以bean開發人員的立場,mdb更近似於無狀態的session bean,而且更簡單。mdb與無狀態的session bean的生命週期是一樣的,但他們沒有home介面。開發人員只需要關心mdb的一個業務方法,即onMessage方法。onMessage方法包含mdb接收訊息後進行的業務處理。
bean檢查訊息並執行必要的動作來進行處理。處理中也可以啟用其它組件。像session bean,mdb可以用於驅動工作流程。既然這樣,不管如何,它都是通過到達的訊息來啟動處理操作的。
bean的開發人員可以選擇讓mdb的操作成為事務的一部分,但這隻在通過容器管理事務劃分時才可以實現。當mdb是事務的一部分時,訊息的交付(delivery)將成為連續的相互影響的(subsequent transactional)工作的一部分。如果這些操作失敗,則訊息交付會連同其它相互影響的工作復原。JMS目的地中的訊息是持續有效,直到有其它的mdb執行個體將其取走。注意訊息的發送方和接收方,兩方的mdb是不共用同一個事務的。因而,發送方和接收方是以鬆散但可靠方式來通訊的。
Bean管理的事務(Bean-managed transaction)劃分也可以在mdb上使用。但因為事務在onMessage內部開始的,所以訊息的傳遞不是事務的一部分。
Message-Driven Bean的用途
考慮在如下情況下使用mdb:
ü 當應用程式需要非同步訊息時
ü 當需要自動傳遞訊息時,自動訊息傳遞免除了訊息輪詢的操作
ü 在需要以鬆散但可靠的方式整合兩個應用程式時。因為JMS介面是最領先的面向訊息中介軟體的產品之一,message-driven beans廣泛應用在企業beans與packages和傳統應用程式的整合上。
ü 當需要在訊息交付時驅動系統中的其它事件時。比如,工作流程中的步進就是基於交付訊息的基本要素的,同樣也可以基於訊息的內容。
ü 當需要建立訊息選取器(message selectors)時。訊息選取器是為指定訊息設計的,從而使mdb能像觸發器那樣使用。