麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

J2EE組件開發(fā):會話EJB

2019-11-18 16:05:18
字體:
供稿:網(wǎng)友

  ===================================
  
  提綱:
  
  ===================================
  
  一、概述
  
  二、無狀態(tài)會話Bean
  
  三、有狀態(tài)會話Bean
  
  四、客戶端接口
  
    4.1 Remote接口
  
    4.2 Home接口
  
  五、實(shí)例
  
    5.1 有狀態(tài)會話Bean
  
    5.2 Home接口
  
    5.3 Remote接口
  
    5.4 部署描述器
  
    5.5 客戶程序
  
    5.6 運(yùn)行
  
  ===================================
  
  正文:
  
  ===================================
  
  一、概述
  
  在企業(yè)級應(yīng)用系統(tǒng)內(nèi),會話Bean是一種代表客戶程序執(zhí)行操作的EJB。對于EJB客戶程序來說,會話Bean常常起著入口點(diǎn)或“前線”EJB的作用。EJB客戶程序通過與會話Bean的交互,從企業(yè)應(yīng)用系統(tǒng)獲取它們想要利用的功能或服務(wù)。
  
  正如其名字所示,會話Bean類似于一個交互式的會話。會話Bean是不共享的,正如交互式會話只能有一個用戶,而且會話Bean也不具備持久化的特點(diǎn)(即它的數(shù)據(jù)不保存到數(shù)據(jù)庫)。一旦客戶程序結(jié)束運(yùn)行,會話Bean也就不再關(guān)聯(lián)到客戶程序。
  
  會話Bean有兩種類型:有狀態(tài)會話Bean(Stateful session Bean),無狀態(tài)會話Bean(Stateless Session Bean)。
  
  有狀態(tài)會話Bean
  
  對象的狀態(tài)由實(shí)例變量的值描述。對于有狀態(tài)會話Bean,實(shí)例變量描述了客戶程序與Bean的會話的狀態(tài)。鑒于客戶程序與Bean的交互關(guān)系,Bean的狀態(tài)信息通常稱為會話狀態(tài)。
  
  在客戶程序與Bean交互期間,狀態(tài)信息一直有效。如果客戶程序運(yùn)行結(jié)束或拆除了Bean,則會話結(jié)束,狀態(tài)信息也不再保留。然而,狀態(tài)信息的這種臨時性并不成為問題,因?yàn)楫?dāng)客戶程序與Bean之間的會話終止,狀態(tài)信息也就沒有必要再保存了。
  
  無狀態(tài)會話Bean
  
  無狀態(tài)會話Bean不為特定的客戶程序保留會話狀態(tài)。客戶程序調(diào)用無狀態(tài)Bean的方法時,Bean的實(shí)例變量可以包含狀態(tài)信息,但狀態(tài)信息僅在該次調(diào)用期間有效。當(dāng)方法調(diào)用結(jié)束,狀態(tài)信息也就不再保留。除了Bean方法正在執(zhí)行的時間之外,所有無狀態(tài)Bean的實(shí)例都是等價(jià)的,這使得EJB容器能夠把Bean的實(shí)例分配給任意客戶程序。
  
  由于無狀態(tài)會話Bean支持多個客戶程序,對于那些客戶程序數(shù)量很大的應(yīng)用,無狀態(tài)會話Bean具有更好的可伸縮性。一般地,對于支持同樣數(shù)量的客戶程序來說,應(yīng)用需要的無狀態(tài)會話Bean數(shù)量少于有狀態(tài)會話Bean數(shù)量。
  
  一些時候,EJB容器可能把有狀態(tài)會話Bean保存到第二級存儲設(shè)備,但容器永遠(yuǎn)不會保存無狀態(tài)會話Bean。因此,無狀態(tài)會話Bean比有狀態(tài)會話Bean有著更好的性能。
  
  一般地,在下列情形下,我們可以使用會話Bean:
  
  
  在任意時刻只有一個客戶程序訪問Bean的實(shí)例。
  Bean的狀態(tài)無需持久化,只在短期內(nèi)生存(比如幾個小時)。
  
  
  如果滿足任意以下條件,使用有狀態(tài)會話Bean比較合適:
  
  
  Bean的狀態(tài)描述了Bean與特定客戶程序的交互。
  Bean需要保留有關(guān)客戶程序的信息,且保留期限必須跨越多次方法調(diào)用。
  Bean擔(dān)負(fù)著客戶程序到應(yīng)用其他組件之間的中間人的角色,為客戶程序提供一個簡化的服務(wù)視圖。
  Bean管理著多個EJB的工作流程。
  
  
  為提高性能,當(dāng)Bean具有任意下面的特征之一時,最好選用無狀態(tài)會話Bean:
  
  
  Bean的狀態(tài)信息不包含任何針對特定客戶程序的數(shù)據(jù)。
  Bean從數(shù)據(jù)庫提取一組客戶程序經(jīng)常使用的只讀數(shù)據(jù)。例如,Bean從數(shù)據(jù)庫提取出本月銷售的產(chǎn)品信息。
  
  
  二、無狀態(tài)會話Bean
  
  無狀態(tài)會話Bean不在EJB之內(nèi)保留面向特定客戶程序的狀態(tài)信息,但這并不意味著這類EJB不在本身的域或關(guān)聯(lián)的對象里面保留任何狀態(tài)數(shù)據(jù),其真實(shí)含義是,這類Bean保持的狀態(tài)信息不是為特定EJB客戶程序下一次訪問或使用而保留。
  
  這種特點(diǎn)使得EJB容器能夠更高效、更靈活地管理無狀態(tài)會話Bean。在任意時刻,任意一個客戶程序可以使用容器創(chuàng)建的任意一個無狀態(tài)會話Bean的實(shí)例。因此,容器可以為這類實(shí)例構(gòu)造一個緩沖池,根據(jù)客戶程序的需求從緩沖池分配Bean的實(shí)例,無需顧慮哪一個實(shí)例屬于哪一個客戶程序。此外,必要時容器能夠方便地創(chuàng)建或拆除Bean的實(shí)例,根據(jù)應(yīng)用規(guī)模和資源情況作出調(diào)整。雖然無狀態(tài)會話Bean可能擁有狀態(tài)信息,但在兩次對Bean實(shí)例的連續(xù)調(diào)用之間,開發(fā)者不能假定這些狀態(tài)信息的合法性。
  
  圖一顯示了無狀態(tài)會話Bean組件構(gòu)造的基本體系結(jié)構(gòu)。
  [[The No.1 Picture.]]
  位于圖一頂端的是javax.ejb.EnterPRiseBean接口,它是所有EJB的基礎(chǔ)接口。從EnterpriseBean接口派生出了javax.ejb.SessionBean接口。公用的、非最終的、非抽象的無狀態(tài)會話EJB,比如圖一顯示的MyStatelessSessionEJBean,必須實(shí)現(xiàn)javax.ejb.SessionBean接口。無狀態(tài)會話EJB實(shí)現(xiàn)公用的、非最終的、非抽象的業(yè)務(wù)方法,比如圖一顯示的someMethod()和anotherMethod()。實(shí)現(xiàn)會話Bean的類必須有一個公用的、不帶參數(shù)的構(gòu)造函數(shù),且不應(yīng)該實(shí)現(xiàn)finalize()方法。
  
  無狀態(tài)會話Bean上定義的setSessionContext()方法用來把一個SessionContext的實(shí)例傳入EJB,它也是SessionBean接口上定義的第一個由容器調(diào)用的方法。SessionContext對象封裝了一個EJB會話容器上下文的接口,支持會話Bean的實(shí)例訪問容器提供的運(yùn)行時會話上下文。在Bean實(shí)例生存期間,會話上下文將一直保持與Bean實(shí)例的關(guān)聯(lián)。
  
  對于無狀態(tài)會話Bean,盡管在SessionBean接口中沒有定義ejbCreate()方法,但它是一個關(guān)鍵的操作。無狀態(tài)會話Bean必須定義一個返回值為void的ejbCreate()方法,容器準(zhǔn)備創(chuàng)建Bean的實(shí)例時將調(diào)用這個方法。容器決定創(chuàng)建Bean的實(shí)例可能是因?yàn)樗獦?gòu)造一個Bean實(shí)例的緩沖池,也有可能是因?yàn)樗邮盏搅丝蛻舫绦虻恼埱蟆R虼耍琫jbCreate()方法屬于一種由EJB實(shí)現(xiàn)的特殊的構(gòu)造函數(shù)或初始化方法。
  
  當(dāng)容器決定不讓Bean的實(shí)例繼續(xù)處理客戶程序的請求時,它就會調(diào)用Bean實(shí)例的ejbRemove()方法。對于無狀態(tài)會話Bean,何時調(diào)用Bean實(shí)例的ejbRemove()方法由容器單獨(dú)決定,不受EJB客戶程序的任何影響。
  
  三、有狀態(tài)會話Bean
  
  有狀態(tài)會話Bean在EJB之內(nèi)保留的狀態(tài)信息與EJB客戶程序有著明確的關(guān)系。有狀態(tài)會話Bean的狀態(tài)信息是指保存在Bean實(shí)例的域里面的數(shù)據(jù),以及Bean實(shí)例持有的各種對象里面的數(shù)據(jù)。當(dāng)一個EJB客戶程序在某一時刻訪問一個有狀態(tài)會話Bean,且改變了該Bean實(shí)例的狀態(tài),則狀態(tài)信息將被保留,下一次Bean再次被訪問時,Bean的實(shí)例將使用原先保存的狀態(tài)信息。
  
  對于有狀態(tài)會話Bean,容器承擔(dān)著更多的Bean管理方面的責(zé)任。實(shí)際上,客戶程序創(chuàng)建或拆除有狀態(tài)會話Bean直接關(guān)系到服務(wù)器端Bean實(shí)例的創(chuàng)建和拆除。此外,當(dāng)資源緊張時,容器可能決定把一個或者多個有狀態(tài)會話Bean串行化(也就是鈍化)到持久性存儲設(shè)備,一旦資源重新空閑,或出現(xiàn)了客戶程序的請求,被鈍化的Bean必須激活并轉(zhuǎn)入活動內(nèi)存。因此,設(shè)計(jì)有狀態(tài)會話Bean時,開發(fā)者必須考慮更多的問題。
  
  圖二顯示了有狀態(tài)會話Bean組件構(gòu)造的基本體系結(jié)構(gòu)。
  [[The No.2 Picture.]]
  公用的、非最終的、非抽象的有狀態(tài)會話Bean,如圖二顯示的MyStatefulSessionEJBean,必須實(shí)現(xiàn)SessionBean接口。SessionBean接口從EnterpriseBean接口派生。另外,有狀態(tài)會話EJB也實(shí)現(xiàn)公用的、非最終的、非抽象的業(yè)務(wù)方法,比如圖二顯示的someMethod()方法和anotherMethod()方法。實(shí)現(xiàn)會話Bean的類必須有一個公用的、不帶參數(shù)的構(gòu)造方法,且不應(yīng)實(shí)現(xiàn)finalize()方法。最后,有狀態(tài)會話Bean可以實(shí)現(xiàn)javax.ejb.SessionSynchronization接口,使得Bean能夠收到某些事務(wù)管理方面的事件通知,但這是可選的。
  
  由于狀態(tài)信息對于有狀態(tài)會話Bean的重要性,創(chuàng)建Bean時初始化操作也很重要。有狀態(tài)會話Bean可以定義一個或者多個ejbCreate(...)方法,這些方法帶有零個或者多個輸入?yún)?shù),方法的返回值類型是void。傳遞給這類方法的具體參數(shù)由應(yīng)用本身決定,但方法的名字必須是ejbCreate()。與無狀態(tài)會話Bean上的ejbCreate()調(diào)用不同,有狀態(tài)會話Bean的ejbCreate()方法綁定到EJB客戶程序,EJB客戶程序?qū)⒁恢笔褂锰囟ǖ腅JB實(shí)例。另外也請注意,正如對于無狀態(tài)會話Bean,在調(diào)用任何ejbCreate()方法之前,容器將調(diào)用有狀態(tài)會話Bean的setSessionContext()方法。
  如果有狀態(tài)會話Bean的ejbRemove()方法被調(diào)用,則表明對應(yīng)的客戶程序已經(jīng)決定不讓該Bean繼續(xù)處理請求。另外,會話最大超時時間到達(dá)時,容器也會調(diào)用Bean的ejbRemove()方法。
  
  設(shè)計(jì)有狀態(tài)會話Bean的過程中,有時最重要的事情就是Bean的鈍化和激活操作。正如前面所指出的,容器鈍化某個Bean時,它將串行化Bean的內(nèi)容,并把這些信息寫入某個持久性存儲設(shè)備。容器之所以鈍化Bean是因?yàn)閮?nèi)存資源不足。通常,容器通過某種形式的“最近最少使用”算法確定應(yīng)該鈍化哪些Bean的實(shí)例(當(dāng)然,實(shí)際所用的算法由具體的平臺決定)。
  
  在鈍化Bean的實(shí)例之前,容器會調(diào)用Bean的ejbPassivate()方法,有狀態(tài)會話Bean必須實(shí)現(xiàn)這個方法。在ejbPassivate()方法中,我們應(yīng)該清除所有不能串行化和持久化的資源,比如數(shù)據(jù)庫連接和打開的文件句柄。ejbPassivate()方法執(zhí)行完畢之后,所有仍未關(guān)閉的對象應(yīng)該能夠被容器鈍化。
  
  如果出現(xiàn)了對已經(jīng)

(出處:http://www.companysz.com)



發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: av免费在线观看不卡 | 精品国产一区二区三区久久久狼牙 | 国产小视频在线观看 | 成人一区久久 | 亚洲欧美日韩免费 | 蜜桃网在线观看 | 美女一级毛片 | 国产一级中文字幕 | 久久精品视频2 | 在线观看国产网站 | 欧美a一 | 日本成人一区二区 | 韩国十九禁高潮床戏在线观看 | 日日草天天干 | 看免费的毛片 | 一区二区三区小视频 | 请播放一级毛片 | 天天撸日日夜夜 | 成熟女人特级毛片www免费 | 91精品国产九九九久久久亚洲 | 久久精品免费网站 | 国产免费福利视频 | 国产一区二区视频网站 | 美女视频免费一区二区 | 欧美成人午夜 | 精品一区二区三区免费爱 | 国产91丝袜在线播放 | 久草在线视频精品 | 激情亚洲一区二区 | 精精国产xxxx视频在线野外 | 香蕉视频99 | 99欧美精品 | 国内精品久久久久久影视8 嫩草影院在线观看网站成人 | 澳门一级淫片免费视频 | 国产免费一级 | 青青草成人免费视频在线 | 久久国产精品久久精品国产演员表 | 91精品动漫在线观看 | h色视频在线观看 | 极品美女一级毛片 | 久国久产久精永久网页 |