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

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

專稿:實戰EJB之三 開發會話Bean(有狀態會話Bean)

2019-11-18 15:24:59
字體:
來源:轉載
供稿:網友

實戰EJB系列



在以后的日子里,將由Jackliu向大家陸續提供一系列EJB教程,有學習EJB的朋友請同步參考EJB相關書籍,實戰系列將以例程的方式幫助你理解這些基本的概念,其中將包括:



專稿:實戰EJB之三 開發會話Bean(有狀態會話Bean)(圖一)
點擊查看大圖


所有章節完畢后將制作成pdf電子文檔,供大家下載。



實戰EJB之三 開發會話Bean(有狀態會話Bean)


會話Bean可以分為有狀態會話Bean(stateful Bean)和無狀態會話Bean(stateless Bean),有狀態會話Bean可以在客戶訪問之間保存數據,而無狀態會話Bean不會在客戶訪問之間保存數據。兩者都實現了javax.ejb.sessionBean接口,EJB容器區通過部署文件ejb-jar.xml來判定是否為一個SessionBean提供保存狀態的服務,另外,在程序實現上,無狀態Bean不能聲明實例變量,每個方法只能操作方法傳來的參數,假如需要在引用期間維持一些數據狀態,以在其他方法中可以引用,則可以把Bean設計成有狀態會話Bean。在第二節中我們用一個SatatelessDate
Bean例子描述了開發無狀態會話Bean的過程及特性,下面的一節將介紹關于有狀態會話Bean的一些特性和壽命周期,并用一個例子來證實這些特性。


在本節中你將了解到:



  • 什么是有狀態Session Bean?
  • 有狀態Session Bean壽命周期
  • 編寫一個有狀態Session Bean程序
  • 部署到應用服務器
  • 開發和部署測試程序
  • 運行測試程序

什么是有狀態Session Bean?


有狀態會話Bean(Stateful Session Bean)就是在客戶引用期間維護Bean中的所有實例數據的狀態值,這些數據在引用期間可以被其他方法所引用,其他客戶不會共享同一個Session
Bean的實例。Bean的狀態被保存到臨時存儲體中,因為Bean是可以被序列化的,所以同樣也可以把一個Bean狀態保存到文件系統或數據庫中。因為在調用方法時需要維護狀態(這部分是有開銷的),所以只有需要維護客戶狀態時才使用有狀態會話Bean。典型的會話Bean是購物車,當一個客戶第一次打開購物車時,系統為他分配一個購物車的會話Bean,在以后,每當客戶選購了商品將改變購物車的商品記錄,而這些記錄數據將保存到用戶會話數據中。


有狀態Session Bean壽命周期


有狀態Session Bean壽命周期由容器控制,Bean的客戶并不實際擁有Bean的直接引用,當我們部署一個EJB時,容器會為這個Bean分配幾個實例到組件池(component
pooling)中,當客戶請求一個Bean時,J2EE服務器將一個預先被實例化的Bean分配出去,在客戶的一次會話里,可以只引用一次Bean,就可以執行這個Bean的多個方法。假如又有客戶請求同樣一個Bean,容器檢查池中空閑的Bean(不在方法中或事務中,假如一個客戶長時間引用一個Bean但執行一個方法后需要等待一段時間再執行另一個方法,則這段時間也是空閑的),假如全部的實例都已用完則會自動生成一個新的實例放到池中,并分配給請求者。當負載減少時,池會自動治理Bean實例的數量,將多余的實例從池中釋放。


有狀態會話Bean的壽命周期比無狀態會話Bean更加的復雜,有狀態會話Bean有四種狀態:



  1. 不存在
  2. 方法現成
  3. 事務中方法現成
  4. 鈍化

如圖3-1所示:



專稿:實戰EJB之三 開發會話Bean(有狀態會話Bean)(圖二)


<圖3-1>


有狀態會話Bean的初始化狀態為不存在,當有客戶引用一個Bean時,按照順序調用newInstance()、setSessionContext()和ejbCreate()方法,與第一節中講到的無狀態調用順序相同。當處于方法現成狀態時,假如客戶調用remove()方法,則回到不存在狀態,并觸發Bean的ejbRemove()方法。假如客戶長時間不調用Bean或服務器預備釋放一些內存資源,則容器將這些Bean從組件池中鈍化,鈍化過程容器將調用Bean的ejbPassivate()方法,使程序員有機會在鈍化Bean時釋放分配的資源。當一個客戶請求一個被鈍化的Bean時,容器可以激活Bean,激活過程容器將調用ejbActivate()放,使程序員有機會在Bean轉到方法現成狀態時分配Bean所需的資源。




發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灯塔市| 个旧市| 疏附县| 台中县| 丰宁| 永顺县| 于都县| 翁牛特旗| 鄢陵县| 阜康市| 平山县| 东源县| 江华| 七台河市| 茶陵县| 青州市| 垫江县| 邯郸县| 衡水市| 莱阳市| 玉门市| 湘潭县| 祁阳县| 且末县| 永福县| 永登县| 凌海市| 浏阳市| 武安市| 铁岭县| 凌云县| 循化| 石阡县| SHOW| 谢通门县| 梅河口市| 息烽县| 改则县| 汶上县| 逊克县| 西安市|