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

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

J2EE 組件開發:會話EJB

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

  ===================================
  
  提綱:
  
  ===================================
  
  一、概述
  
  二、無狀態會話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()方法執行完畢之后,所有仍未關閉的對象應該能夠被容器鈍化。
  
  假如出現了對已經

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
丁香五六月婷婷久久激情| 亚洲国产精品免费| 奇米影视亚洲狠狠色| 97成人超碰免| 亚洲国产欧美一区二区丝袜黑人| 久久久在线免费观看| 日韩在线观看你懂的| 久久久久久18| 久久精品视频va| 成人国产亚洲精品a区天堂华泰| 欧美大尺度电影在线观看| 精品国偷自产在线视频99| 成人黄色av播放免费| 影音先锋欧美在线资源| 欧美激情18p| 精品国产一区二区在线| 国产成人97精品免费看片| 欧洲永久精品大片ww免费漫画| 一个人www欧美| 国产日韩欧美成人| 国产精品99久久久久久人| 久久精品影视伊人网| 成人国产精品日本在线| 日本亚洲精品在线观看| 美女黄色丝袜一区| 国产成人免费av| 国产91九色视频| 狠狠做深爱婷婷久久综合一区| 欧美激情videoshd| 欧美人在线观看| 国产一区视频在线| 亚洲片av在线| 777国产偷窥盗摄精品视频| 欧美性猛交xxxx免费看漫画| 超碰日本道色综合久久综合| 懂色av影视一区二区三区| 日韩欧美中文在线| 在线看福利67194| 国产成人精品国内自产拍免费看| 欧美中文在线观看国产| 午夜精品蜜臀一区二区三区免费| 久久精品久久久久久| 麻豆国产精品va在线观看不卡| 久久偷看各类女兵18女厕嘘嘘| xxxxxxxxx欧美| 亚洲网在线观看| 亚洲成人av片在线观看| 亚洲欧美国产日韩天堂区| 91亚洲精华国产精华| 78m国产成人精品视频| 日韩美女激情视频| 97超级碰碰碰| 亚洲视频第一页| 亚洲精品不卡在线| 97色在线观看| 欧美精品久久久久久久久| 久久精品国产成人精品| 国产精品高清免费在线观看| 欧美视频13p| 亚洲性av网站| 欧美激情成人在线视频| 日本免费久久高清视频| 青青草原一区二区| 日韩美女在线看| 日本欧美在线视频| 欧美激情二区三区| 性色av一区二区三区红粉影视| 亚洲黄色在线观看| 国产精品视频网| 国产综合久久久久久| 一级做a爰片久久毛片美女图片| 久久久久久国产免费| 日韩av有码在线| 欧美性猛交xxxx乱大交极品| 欧美视频在线观看 亚洲欧| 亚洲精品国产suv| 色综合久久天天综线观看| 日韩中文字幕不卡视频| 欧美日韩国产专区| 国产69精品久久久久久| 亚洲人a成www在线影院| 91国产高清在线| 2018中文字幕一区二区三区| 热99精品里视频精品| 操91在线视频| 另类专区欧美制服同性| 国产成人亚洲精品| 亚洲国产精品久久91精品| 狠狠综合久久av一区二区小说| 2020久久国产精品| 日韩在线免费视频| 日韩成人中文字幕| 亚洲国产中文字幕在线观看| 日韩性xxxx爱| 欧美一级视频免费在线观看| 成人国产精品日本在线| 欧美激情第一页xxx| 亚洲欧美色婷婷| 中文精品99久久国产香蕉| 亚洲高清免费观看高清完整版| 日韩中文字幕网站| 欧美黄色片在线观看| 国产亚洲精品久久| 欧美中文在线观看国产| 91免费国产视频| 国产啪精品视频| 久久精品免费电影| 亚洲va欧美va国产综合剧情| 2019中文字幕免费视频| 欧美做爰性生交视频| 亚洲欧美日韩另类| 亚洲免费视频在线观看| 92福利视频午夜1000合集在线观看| 国产亚洲xxx| 欧美日韩精品在线| 国产精品久久久久久久一区探花| 亚洲激情视频网站| 亚洲欧美日韩综合| 日韩一区二区三区国产| 精品国产欧美一区二区三区成人| 成人av在线亚洲| 色妞在线综合亚洲欧美| 欧美成人免费va影院高清| 亚洲视频视频在线| 久久免费视频网| 狠狠躁夜夜躁人人躁婷婷91| 黑人巨大精品欧美一区二区三区| 欧美性猛交xxxx免费看久久久| 欧美日韩黄色大片| 国产欧美日韩中文| 日韩av电影在线免费播放| 国产一区二区三区18| 色香阁99久久精品久久久| 国产高清在线不卡| 中文欧美日本在线资源| 91大神在线播放精品| 国内精品久久久久久| 精品国偷自产在线视频99| 亚洲夜晚福利在线观看| 久久久久久久久久久免费精品| 久久在线观看视频| 欧美精品一区在线播放| 在线观看免费高清视频97| 欧美日韩另类视频| 欧美黑人xxxⅹ高潮交| 日韩美女主播视频| 北条麻妃99精品青青久久| 欧美天堂在线观看| 亚洲大尺度美女在线| 国产精品三级美女白浆呻吟| 欧美日韩激情网| 国产精品无av码在线观看| 日韩在线免费视频| 78m国产成人精品视频| www.欧美免费| 日本精品中文字幕| 国产精品久久久久久久久久东京| 555www成人网| 日韩电影免费在线观看中文字幕| 日韩综合中文字幕| 亚洲一区二区免费在线| 亚洲精品一区二区三区不| 久久91亚洲精品中文字幕奶水| 日韩在线观看av|