国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

深入探討EJB中新的消息驅動組件(二)

2019-11-18 14:47:27
字體:
來源:轉載
供稿:網友

  MessageDrivenBean容器服務

  EJB容器提供了下列服務,它們都是低級的EJB支持的服務,不能直接被使用EJB1.1的JMS開發者使用。

  1.治理生命周期:

  MessageDrivenBean的生命周期與配置它的EJB服務器的壽命是一致的,因為MessageDrivenBean是無狀態的,所以組件實例通常被EJB服務器集中起來,并且當一條消息變得對于作為消息消費者的主題或隊列可用的時候,會被容器取回。

  2、處理異常:

  MessageDrivenBean組件當處理消息的時候,可能不會拋出應用程序異常,這就意味著可能被MessageDrivenBean拋出的唯一的異常指明一個系統錯誤的運行時間異常。容器將會處理這個異常,方法是刪除這個組件實例,并返回任何組件實例或容器啟動的事務處理。

  3、線程或并發性:

  MessageDrivenBean實例是在一個單獨的控制線程中執行,這將大大的簡化開發者的任務。EJB服務器將確保這一特性,另外,EJB服務器可能提供一種操作模式答應多消息被單獨的組件實例同時處理,這個配置選項實用定義在JMS規范中的“eXPert level”類。JMS提供者并不一定帶有這些類,所以EJB服務器可能不能利用每一種JMS實現的這種功能。

  4、事務處理:

  就像使用entity或session組件一樣,MessageDrivenBean組件也可以有“contain-or-bean-managed”(容器或組件治理)事務處理。一個事務屬性可以設置為MessageDrivenBean組件的onMessage()方法。因為沒有客戶端事務處理,所以只有一個事務處理屬性的子集考慮到entity和session組件與MessageDrivenBean組件有關系。使用了容器治理事務處理。容器將能支持MessageDrivenBean的Required和NotSupport事務處理屬性。一個帶有組件治理事務處理的MessageDrivenBean組件可以使用JTA UserTransaction對象。這個MessageDrivenBean組件在從onMessage()方法返回之前,必須先結束事務處理。onMessage()方法非常簡單,它帶有容器治理事務界限和NotSupported事務屬性。容器將不會創建事務并且組件開發者被禁止訪問 UserTransaction對象。

  更有趣的事,當onMessage()方法被指定了Required事務屬性,這時容器將創建一個全局事務處理收集任何可參考的資源并被傳遞到任何其他的正在處理消息的EJB服務器上。這是唯一一種JMS主題或隊列接口包含于EJB事務處理中的情景。

  對于使用Required事務屬性的組件,JMS服務器將成為XAResource,假如JMS服務器提供者不支持XA事務處理,JMS session通常將與容器的全局事務處理的結果同步。這樣,容器將不能包括用于治理分布事務的兩方面的委托處理的JMS服務器。JMS session的一個 rollback(反轉)將警告 JMS服務器,消息應當被重新發送。

  5、消息確認:

  容器總是處理MessageDrivenBean組件的消息收到的確認,對于組件來說,使用定義在 JMS規范中的客戶端消息收到確認方法是非法的。消息收到確認可以被設置為 DUPS_OK_ACKNOWLEDGE或 AUTO_ACKNOWLEDGE,前者答應在一次失敗之后投遞消息的副本,而后者提供一個嚴格的保證機制,確保消息只能被投遞一次。

  6、安全性

  因為MessageDrivenBean組件沒有客戶端,所以在接受消息的時候容器基本上不會產生安全問題。EJB2.0規范中為組件方法執行一個聲明指定的功能提供了方便。因此,MessageDrivenBean組件可以被設置來確保用于傳送到其他正在處理消息的EJB服務器的安全。這就可以使MessageDrivenBean組件維護方法級安全性了。



  應用程序服務器框架

  當 MessageDrivenBean提供的功能在應用程序服務器內被部署好后,它就會以指數形式膨脹開來。一個高端的應用程序服務器提供可擴展性,負載平衡,動態應用程序啟動,附加的 EJB服務器實例的動態配置以及容錯性,這些都是企業級應用程序的核心要素。

  1、可擴展性: 企業級應用程序服務器的一個要害元素就在它的提供一個結構來適應不斷增加的處理負載的能力。 隨著被 MessageDrivenBean處理的消息的數量的增加,應用程序服務器的 EJB服務器必須使適應這些增加而不會明顯的增加處理時間。一般是提供給多應用程序服務器用于協調處理受到的消息的增多,這樣應用程序服務器就有了可擴展性了。

  2、負載平衡:當一個請求發送到應用程序服務器,一個負載平衡元素可以在實例之間平均分配負載(見圖六)。舉例來說,應用程序服務器每個實例都可能包含一個EJB服務器的實例。使用應用程序服務器的負載平衡特性,受到的消息就可以平均分配到所有的EJB服務器實例上了。




3、動態應用程序啟動:應用程序服務器應當可以在負載增多時啟動附加的預先設置的實例。

  4、動態設置額外的EJB服務器實例:即使一個應用程序被設定了固定的用于處理應用程序負載的實例數,但是也有可能信息流的激增造成系統處理速度變慢,為了處理這種情況,應用程序服務器必須具有配置附加應用程序實例的特性。比如說,應用程序服務器可以答應系統治理員動態定義附加的EJB服務器實例并把這些附加實例部署到EJB服務器中。負載平衡元素將利用這些補充的實例來處理消息。

  5、容錯性:一個企業級的應用程序服務器必須也具有能夠適應出錯的情況,像網絡或硬件上的問題,但是前提是不能明顯降低系統性能或是丟失數據,應用程序服務器使用的一種方法就是通過設置多應用程序服務器實例來分配狀態信息,收到的消息通過智能化的負載平衡元素被分配到實例上。假如有一個或多個實例不能到達,負載平衡元素只要簡單的把消息重新分配給各個能用的實例就可以了。此外,負載平衡元素還可在治理組件的參與下重啟那些因為某些原因而不能使用的實例。

  超越JMS

  EJB的MessageDrivenBean組件部分給企業級服務器領域又添了一員猛將,它答應消息經由JMS接受在被一個簡單但又強有力的組件處理。然而,MessageDrivenBean的EJB組件事實上有能力變成能夠處理任何消息的組件模型,而不單是JMS服務器發來的消息。

  JMS消息通過JMS實現被變成可交互操作,這就意味著JMS消息私地下是某一種特定的的實現,但是內容可以完全透明的被轉換成另一種特定的JMS實現而不會在任何方面影響消息消費者。因此任何消息格式都可以轉換成為JMS消息并被傳遞到MessageDrivenBean組件中。換句話說,一個MessageDrivenBean組件可以處理電子郵件、HTTP、FTP或其他任何協議發來的消息,以及又具有把這些協議轉化成為JMS消息的應用程序服務器提供的消息。這就開啟了一個標準、簡單、輕便且能夠處理任何協議發過來的任何消息的能力的組件模型之門。假如消息被定義成為可開發的、可擴展的語言向xml這樣的及其強大的可交互操作在寬松連接系統以一種每個人都能理解的模式完成。下面我想簡單以一個獨立于協議以外的消息處理的例子來驗證一下這種技術的強大威力。
一個B2B的例子

  一個典型的B2B情景就像一個“中樞-輪輻”形,多個寬松連接的商家(即“輪幅”)與一個大型企業(即“中樞”)交互連接,在某種情況之下,當執行交互操作(像發送大的訂單這樣的事件)可以經由JMS應用程序在大企業與商家之間正常相互作用。對于一些小型商家來說,采用純JMS可能在成本上太高而負擔不起,它可能會采用通過Web瀏覽器中的HTTP或發送電子郵件的形式向大企業發送訂單。為了向客戶開放B2B系統,大型企業級服務器就必須能夠處理這一系列不同的協議。



而且,作為中樞的大型企業級服務器雖然接受來自email或來自JMS等不同類型格式的訂單,但是只有必要為每一種方式分別編寫處理程序。使用MessageDrivenBean組件,任何協議都可以發送以XML格式描述的訂單,如下面的例子。MessageDrivenBean組件只需要把注重力集中在處理來自應用程序服務器發送的JMS TextMessage中的XML就可以了,而不要去關心到底所處理的消息時直接來自JMS服務器還是作為一條來自郵件服務器的SMTP消息。

  代碼段六:

<purchase_order>
<client_number>101</client_number>
<date>August 8, 2001</date>
<billing_address>
<name>Wayne Zheng</name>
<address>xyz street</address>
<city>Hefei</city>
PRovince>Anhui</province>
<zip>230027</zip>
</billing_address>
<shipping_address>
<name>Zhang Tao</name>
<address>Huangshan Road</address>
<city>Hefei</city>
<state>Anhui</state>
<zip>230026</zip>
</shipping_address>
<items>
<item>
<quantity>1</quantity>
<prodUCt_number>324</product_number>
<description>java Book</description>
<unitcost>19</unitcost>
</item>
<item>
<quantity>1</quantity>
<product_number>532</product_number>
<description>Java VM</description>
<unitcost>56</unitcost>
</item>
</items>
</purchase_order>


  小結 

  EJB2.0提供了一種新的組件模型-MessageDrivenBean組件-用來處理異步消息,MessageDrivenBean組件可以簡單的開發和利用與其他EJB組件模型相同的容器服務,這種新的組件模型答應整合面向對象的中間件(MOM)的、優秀的以及新一代純Java的JMS。并且,MessageDrivenBean組件還有可能成為處理任何異步消息,非凡是基于XML消息的工業標準。因此,MessageDrivenBean組件是EJB2.0中的非常重要的一員,本文只是初探其面目,以后我還會更加深入的探討其的功用。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 萨嘎县| 高台县| 高州市| 兴城市| 怀化市| 运城市| 永安市| 达日县| 鞍山市| 绥芬河市| 平乐县| 郸城县| 寿宁县| 屏南县| 广安市| 东明县| 雷山县| 宜兴市| 南岸区| 乌拉特后旗| 竹山县| 梧州市| 定兴县| 台山市| 名山县| 汽车| 张家口市| 太湖县| 三河市| 子长县| 醴陵市| 寿阳县| 普兰县| 泗阳县| 汤阴县| 中江县| 兴文县| 临澧县| 光山县| 海盐县| 上思县|