亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

J2EE組件開發:會話EJB

2019-11-18 16:05:18
字體:
來源:轉載
供稿:網友

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

(出處:http://www.49028c.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91国语精品自产拍在线观看性色| 欧美激情18p| 成人观看高清在线观看免费| 国产精品成人av在线| 色诱女教师一区二区三区| 欧美日韩国产一区二区三区| 国产精品狠色婷| 热99在线视频| 日韩经典中文字幕| www.亚洲人.com| 91青草视频久久| 欧美激情在线视频二区| 2019中文字幕免费视频| 日韩成人中文字幕| 久久久久国产精品免费网站| 国产精品电影网站| 国产91精品高潮白浆喷水| 久久99亚洲热视| 激情久久av一区av二区av三区| 国内精品中文字幕| 欧美一级片一区| 欧美多人爱爱视频网站| 亚洲wwwav| 国产精品69久久| 国产午夜精品免费一区二区三区| 国产精品入口夜色视频大尺度| 欧美在线视频观看| 国产精品男女猛烈高潮激情| 久久精品国产久精国产一老狼| 久久久久国产精品www| 中文字幕在线观看亚洲| 国产精品av网站| 国产精品高精视频免费| 韩国国内大量揄拍精品视频| 成人免费福利在线| 久久伊人精品视频| 97在线视频观看| 国产精品96久久久久久又黄又硬| 亚洲欧美日韩国产成人| 日韩视频免费在线| 中文字幕亚洲综合久久筱田步美| 亚洲大尺度美女在线| 一区二区三区在线播放欧美| 久久躁日日躁aaaaxxxx| 疯狂做受xxxx高潮欧美日本| 欧美大片免费观看| 午夜精品久久久久久久久久久久久| 欧美尺度大的性做爰视频| 亚洲国产精品一区二区久| 国产精品6699| 亚洲第一偷拍网| 国产91精品视频在线观看| 成人久久久久久久| 青草成人免费视频| 欧美日韩亚洲精品内裤| 欧美第一淫aaasss性| 成人有码在线播放| 成人乱人伦精品视频在线观看| 九九综合九九综合| 亚洲的天堂在线中文字幕| 国产区精品在线观看| 国产精品夜色7777狼人| 久久久久久久一区二区| 欧美亚洲另类制服自拍| 久久久亚洲影院你懂的| 国产欧美在线视频| www.欧美视频| 欧美乱大交xxxxx| 精品一区二区三区四区在线| 成人激情视频免费在线| 国产精品99导航| 久久精品国产成人| www.亚洲人.com| 热久久视久久精品18亚洲精品| 亚洲综合精品伊人久久| 亚洲va男人天堂| 成人做爽爽免费视频| 亚洲第一网中文字幕| 亚洲精品mp4| 粉嫩av一区二区三区免费野| 午夜精品一区二区三区av| 欧美一级免费视频| 美女扒开尿口让男人操亚洲视频网站| 久久青草福利网站| 在线激情影院一区| 亚洲精品美女在线观看播放| 亚洲一区二区在线| 久久久免费精品视频| 国产在线精品一区免费香蕉| 日本aⅴ大伊香蕉精品视频| 精品国产一区二区三区久久狼5月| 精品国产91久久久久久| 最新国产精品亚洲| 91日本在线观看| 精品一区二区电影| 欧美乱大交做爰xxxⅹ性3| 日韩专区在线播放| 国产98色在线| 日韩中文字幕网站| 亚洲免费一在线| 国产伦精品一区二区三区精品视频| 国产拍精品一二三| 久久亚洲综合国产精品99麻豆精品福利| 欧美电影在线观看网站| 97精品久久久| 日韩电影在线观看永久视频免费网站| 久久电影一区二区| 欧美性理论片在线观看片免费| 亚洲国产古装精品网站| 亚洲缚视频在线观看| 亚洲天堂日韩电影| 国产午夜精品免费一区二区三区| 在线一区二区日韩| 国产91色在线播放| 亚洲国产97在线精品一区| 欧美中文字幕视频在线观看| 亚洲精品一区二区久| 精品国产一区二区三区久久狼黑人| 欧美精品久久久久| 国产精品www色诱视频| 欧美猛男性生活免费| 成人免费网视频| 97精品国产97久久久久久免费| 91欧美激情另类亚洲| 国产精品免费视频久久久| 欧美亚洲激情视频| 亚洲免费视频在线观看| 国产日韩欧美夫妻视频在线观看| 欧美国产一区二区三区| 日韩av在线免费观看一区| 久久久精品国产一区二区| 综合国产在线视频| 成人网址在线观看| 欧美日韩一区二区精品| 亚洲第一av网站| 精品国产欧美一区二区五十路| 亚洲欧洲成视频免费观看| 日韩大陆欧美高清视频区| 欧美最猛性xxxxx(亚洲精品)| 97婷婷涩涩精品一区| 亚洲欧美在线免费| 97香蕉超级碰碰久久免费软件| 538国产精品一区二区免费视频| 国产精品com| 成人性生交大片免费看视频直播| 亚洲成人999| 亚洲人成在线电影| 欧美做爰性生交视频| 91亚洲精品一区| 亚洲综合在线小说| 欧美电影免费观看高清| 国产伦精品一区二区三区精品视频| 日韩亚洲第一页| 91精品国产综合久久久久久蜜臀| 91免费精品视频| 欧美性猛交xxxxx免费看| 91亚洲va在线va天堂va国| 一区二区欧美亚洲| 97视频在线观看亚洲| 亚洲毛片在线看| www.久久久久久.com| 国产欧美久久久久久| 日韩欧美精品网站| 久久精品国产2020观看福利|