J2EE Design Pattern : Service Activator筆記
正體中譯與整理 : Fred Wang (http://fredwang.blogspot.com)
內容來源 : "Core J2EE Design Pattern"
這個Pattern用來解決甚麼問題?
- 需要呼叫非同步的服務,如: Mail Service, Order Processing等, 這些服務因為處理時間較長或耗用資源較大等因素, 無法在短時間內完成並提供即時的回應。另外部分Business processing可能跨應用系統, 可能整合企業內外的應用系統, 而這些較長的處理不適合讓客戶端等待商業處理的完成。
重點 :
. 以非同步的方式叫用商業服務, POJOs(Plain Old Java Objexts,傳統Java物件)或EJB元件。
. 整合出版/訂閱及點對點通訊來啟動非同步處理服務。
. 執行的商業工作是由許多的商業工作(business tasks)所組成。
解決方案
- 使用Service Activator來接收非同步需求並呼叫一個或多個商業服務。
Service Activator實作成一個JMS Listener用來監聽並接收JMS訊息。如果你的應用系統使用EJB元件且EJB Container(Web Application Server)支援EJB 2.0以上的版本,則可以使用Message-Drivern bean(MDB)來接收非同步需求,否則就必須自己撰寫Java Message Service(JMS)。
步驟 :
1. 需求端建立並送出一個訊息給Service Activator
2. Service Activator收到此訊息並解析,轉譯這個需求
3. Service Activatorr必須指定正確的商業服務元件並呼叫它來處理這個需求(非同步)
4. 處理完成後, 需求端可能需要接收結果。為了要通知需求端這個處理的結果,Service Activator可以將回應訊息送回給需求端。這個回應訊息可能是告訴需求端處理是否成功並提供結果。也可能有處理失敗的狀況,此時回應訊息就包含造成失敗的細節,這個細節可能指出需求端如何回復,是否要重新送出需求或修正造成錯誤的因素來進行回復處理。
此Pattern參與的成員與責任 :
. Client(需求端) : 需要對商業服務發出非同步處理的需求,可能是各種型態的應用系統元件,如POJO或EJB元件,必須可以建立並發送JMS訊息。
註 : 當舊系統(Legacy System)為需求端時,Java應用系統可以代替舊系統作為訊息的產生器。這個舊系統可能不是用Java,而是與訊息導向的中介軟體(middleware)整合來發送與接收訊息。而Java應用系統中的Service Activator可以接收來自這些舊系統的需求訊息並進行非同步的處理。
. Request : 需求端產生的訊息物件, 透過Message-oriented middleware(MOM)送給Service Activator。必須實作javax.jms.Message interface.訊息型態有TextMessage, ObjectMessage等。
. Service Activator : 實作javax.jms.MessageListener,其中onMessage() method, 在訊息收到後會被啟動。Service Activator用來解析此訊息並決定要完成的事情。通常使用Service Locator找到並建立BusinessService元件。
. BusinessService : 進行同步處理的目標物件滿足需求端的商業需求,通常為Session Facade 或Application Service, 詳細的商業邏輯可能再封裝於商業物件(Business Object)。
. Response : 也是一個訊息物件, 由Service Activator或BusinessService建立並傳送, 這個Response可能是一個確認訊息,讓需求端知道Request已經被收到, Response也可能是非同步處理的結果。
Class Diagram :
參考 :
http://www.corej2eepatterns.com/Patterns2ndEd/ServiceActivator.htm
沒有留言:
張貼留言
歡迎提供意見, 謝謝 (註 : 留言經過版主審核通過才會發布)