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

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

如何開發會話Bean(無狀態會話Bean)

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

  會話Bean可以分為有狀態會話Bean(stateful Bean)和無狀態會話Bean(stateless Bean),有狀態會話Bean可以在客戶訪問之間保存數據,而無狀態會話Bean不會在客戶訪問之間保存數據。兩者都實現了javax.ejb.sessionBean接口,EJB容器區通過部署文件ejb-jar.xml來判定是否為一個SessionBean提供保存狀態的服務,另外,在程序實現上,無狀態Bean不能聲明實例變量,每個方法只能操作方法傳來的參數。實際上,我們第一節中的第一個EJB程序就是一個無狀態Session Bean。
  
  在本節中你將了解到:
  
  什么是無狀態Session Bean?
  
  無狀態Session Bean壽命周期
  
  編寫一個無狀態Session Bean程序
  
  部署到應用服務器
  
  開發和部署測試程序
  
  運行測試程序
  
  什么是無狀態Session Bean?
  無狀態Session Bean每次調用只對客戶提供業務邏輯,但不保存客戶端的任何數據狀態。但并不意味著stateless類型的Bean沒有狀態,而是這些狀態被保持在客戶端,容器不負責治理。如《再別康橋》中寫到的"靜靜的我走了,正如我靜靜的來。揮一揮衣袖,不帶走一片云彩"。
  
  無狀態Session Bean在EJB中是最簡單的一種Bean,假如數據實際上是數據的瞬像,則建議使用無狀態會話Bean。但是無狀態會話Bean也有自己的問題,本該存儲在服務器端(J2EE服務器)的數據被存儲在客戶中,每次調用這些數據都要以參數的方式傳遞給Bean,假如是一個比較復雜的數據集合,則網絡需要傳遞大量數據,造成更多的負載。在客戶端維護狀態還要注重安全性問題,假如數據狀態非常敏感,則不要使用無狀態會話Bean,這些情況可以使用狀態會話Bean,將用戶狀態保存到服務器中。
  
  無狀態Session Bean壽命周期
  
  無狀態Session Bean壽命周期由容器控制,Bean的客戶并不實際擁有Bean的直接引用,當我們部署一個EJB時,容器會為這個Bean分配幾個實例到組件池(component pooling)中,當客戶請求一個Bean時,J2EE服務器將一個預先被實例化的Bean分配出去,在客戶的一次會話里,可以只引用一次Bean,就可以執行這個Bean的多個方法。假如又有客戶請求同樣一個Bean,容器檢查池中空閑的Bean(不在方法中或事務中,假如一個客戶長時間引用一個Bean但執行一個方法后需要等待一段時間再執行另一個方法,則這段時間也是空閑的),假如全部的實例都已用完則會自動生成一個新的實例放到池中,并分配給請求者。當負載減少時,池會自動治理Bean實例的數量,將多余的實例從池中釋放。 無狀態Session Bean有兩種狀態:存在或不存在。
  
 如何開發會話Bean(無狀態會話Bean)

  <圖2-1>
  
  當客戶端不存在一個無狀態Session Bean時,通過遠程主接口的create()方法創建一個Bean,newInstance()負責將Bean實例化,EJB容器調用Bean類的setSessionContext()方法把運行環境對象SessionContext傳遞給Bean;隨后調用Bean的ejbCreate方法進行必要的初始化和資源分配。在下面這個實戰例子中,Bean的實現類就是StatelessDateEJB類。
  
  編寫一個無狀態的Session Bean程序
  這個Session Bean組件提供一個日期計算器,通過getDayInRange()方法計算兩個日期之間相差的天數,通過getDayForOlympic()得到距離北京申辦2008年奧林匹克運動會天數。并且我們為這個Bean起名為StatelessDate
  
  設計一個無狀態的Session Bean至少包括四個步驟:
  
  開發主接口
  
  開發組件接口
  
  開發Bean實現類
  
  編寫部署文件
  
  注重:本節假設你使用的Windows操作系統。假如使用其他操作系統,可能影響到存儲路徑和JDK命令,但這與程序代碼和部署文件內容無關。
  
  1.開發主接口(StatelessDateHome.java):
  
  是由Bean開發人員編寫的一個Bean的主接口(interface)程序,負責控制一個Bean的生命周期(生成、刪除、查找Bean)。只需要開發人員給出一個主接口類,類方法的實現由容器來完成。主接口擴展了javax.ejb.EJBHome接口,參考avax.ejb.EJBHome接口定義如下:
  
   package javax.ejb;
   import java.rmi.Remote;
   import java.rmi.RemoteException;
   
   public interface EJBHome extends Remote{
   public abstract EJBMetaData getEJBMetaData() throws RemoteException;
   public abstract HomeHandle getHomeHandle() throws RemoteException;
   public abstract void remove(Object obj) throws RemoteException,RemoveException;
   public abstract void remove(Handle handle) throws RemoteException,RemoveException;
   }
  
  方法getEJBMetaData()返回EJBMetaData接口的引用,取得Bean的信息,EJBMetaData不是遠程接口。這個類擴展了java.io.Serializable,所以可序列化,具有序列化的特性
  
  
  方法getHomeHandle()返回主對象的句柄,句柄是主接口StatelessDateHome的持久性引用,這個類擴展了java.io.Serializable,所以可序列化,具有序列化的特性,HomeHandle對象可以傳遞給另一個JVM,且不傳遞安全信息,這樣新的應用可以不使用JNDI來查找對象既可以獲得這個主接口,并來創建和獲得Bean實例。
  
  方法remove()用來刪除一個Bean的實例,對于一個會話Bean,執行Remove操作將引用的Bean返回到池中,由池來治理其生命周期。
  
  一般情況下,習慣將主接口的命名規則規定為Home,所以我們把這個主接口類起名為StatelessDateHome
  
  大部分邏輯方法已經被EJBHome定義,在我們要設計的遠程主接口StatelessDateHome里,不必再重新定義。值得注重的是,我們需要為這個接口定義一個create()方法,用來獲得一個實例Bean的引用,返回的對象類型是組件接口類StatelessDate。
  
  StatelessDateHome.java代碼:
  
  import java.rmi.RemoteException;
  import javax.ejb.CreateException;
  import javax.ejb.EJBHome;
  
  public interface StatelessDateHome extends EJBHome{
   public StatelessDate create() throws RemoteException,CreateException;
  }
  
  假設我們保存到D:/ejb/StatelessDate/src/StatelessDateHome
  .java
  
  2.開發組件接口(StatelessDate.java):
  
  當遠程用戶調用主接口類生成方法(create())時,客戶要得到一個組件的遠程引用,因此EJB容器要求你為這個Bean的所有方法提供一個接口類,而類的實現則與遠程主接口StatelessDateHome一樣由容器在部署時自動生成。
  
  組件接口擴展了avax.ejb.EJBObject接口,參考avax.ejb.EJBObject接口定義如下:
  
   package javax.ejb;
   import java.rmi.Remote;
   import java.rmi.RemoteException;
   
   public interface EJBObject extends Remote{
  public abstract EJBHome getEJBHome() throws RemoteException;
  public abstract Handle getHandle() throws RemoteException;
  public abstract Object getPRimaryKey() throws RemoteException;
  public abstract boolean isIdentical(EJBObject ejbobject) throws RemoteException;
  public abstract void remove() throws RemoteException,RemoveException;
   }
  
  方法getEJBHome()返回遠程主接口對象的引用
  
  方法getHandle() 當前組件接口對象的句柄,和遠程主接口的句柄HomeHandle一樣,這個對象是被序列化的,所以可以保存到本地或通過RMI/IIOP協議傳輸給其他JVM上的客戶使用,而免去JNDI查找和調用主接口的create方法,只要執行Handle.getEJBObject()方法即可取得這個Bean實例的引用。
  
  getPrimaryKey()方法一般用于Entity Bean,假如在Session Bean中調用,拋出java.rmi.RemoteException。
  
  方法isIdentical()用于對當前引用的Bean實例和另一Bean實例進行比較,因為即便是Bean實例相同但有可能不是來自同一個引用,不能使用equals()方法。
  
  方法remove() 刪除當前引用的Bean實例,由容器來決定是否真的釋放氣內存,通常會返換到組件池中。注重刪除之后要將對象的引用指向為null。
  
  一般情況下,習慣將組件接口的命名規則規定為,所以我們把這個組件接口類起名為StatelessDate
  
  大部分邏輯方法已經被EJBObject 定義,在我們要設計的組件接口StatelessDate里,不必再重新定義,只要我們重申組件中有關業務邏輯的接口即可。邏輯方法getDayInRange()得到兩個日期間的天數間隔,假如輸入的時間非法或不合適將拋出InsufficientDateException異常。邏輯方法getDayForOlympic()得到距離北京申辦奧運會的天數,假如輸入的時間非法或不合適將拋出InsufficientDateException異常。
  
  StatelessDate.java代碼:
  
  import javax.ejb.EJBObject;
  import java.rmi.RemoteException;
  import java.util.Date;
  
  public interface StatelessDate extends EJBObject{
   public int getDayInRange(Date lowerLimitDate,Date upperLimitDate)
   throws RemoteException,InsufficientDateException;
   public int getDayForOlympic()
   throws RemoteException,InsufficientDateException;
  }
  
  假設我們保存到D:/ejb/St

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区三区视频免费| 欧美天堂在线观看| 欧美高清在线视频观看不卡| 欧美成人午夜影院| 久久久精品电影| 亚洲精品久久久一区二区三区| 久久久精品一区二区| 色老头一区二区三区在线观看| 成人在线免费观看视视频| 91久久嫩草影院一区二区| 一区二区三区无码高清视频| 亚洲国产成人精品久久久国产成人一区| 黄网动漫久久久| 亚洲天堂开心观看| 日韩精品在线观看一区| 久久久999精品视频| 日韩视频第一页| 久久免费在线观看| 亚洲xxx视频| 欧美午夜性色大片在线观看| 疯狂蹂躏欧美一区二区精品| 中文字幕亚洲无线码a| 久久久久久91香蕉国产| 欧美精品一本久久男人的天堂| 亚洲精品久久久久中文字幕欢迎你| 欧美日韩国产一区二区| 欧美成人精品一区二区| 亚洲va欧美va在线观看| 91夜夜未满十八勿入爽爽影院| 亚洲精品电影网在线观看| 国内久久久精品| 国产精品久久久久91| 欧美福利小视频| 欧美日韩另类视频| 国产suv精品一区二区| 欧美性xxxx极品hd满灌| 久久夜精品香蕉| 国产一区二区丝袜高跟鞋图片| 亚洲欧美一区二区三区四区| 亚洲黄色av网站| 日韩中文视频免费在线观看| 欧美日韩国产精品专区| 欧美激情精品久久久久久变态| 精品高清美女精品国产区| 欧美成aaa人片免费看| 欧美精品videos性欧美| 成人高清视频观看www| 国产91精品网站| 国产精品一区二区久久久| 久久精品视频在线| 欧美性感美女h网站在线观看免费| 亚洲国产精品福利| 日韩美女写真福利在线观看| 自拍视频国产精品| 国产精品黄色影片导航在线观看| 欧洲一区二区视频| 国产精品三级美女白浆呻吟| 在线播放精品一区二区三区| 欧美日韩亚洲视频| 午夜剧场成人观在线视频免费观看| 国产精品444| 欧美成人sm免费视频| 欧美激情2020午夜免费观看| 不卡在线观看电视剧完整版| 久久精品国产欧美亚洲人人爽| 久久人91精品久久久久久不卡| 一道本无吗dⅴd在线播放一区| 亚洲精品99久久久久中文字幕| 欧美日韩成人黄色| 91天堂在线视频| 九九九久久国产免费| 日韩国产高清污视频在线观看| 久久久国产精彩视频美女艺术照福利| 国产91在线高潮白浆在线观看| 国产www精品| 日韩精品免费在线视频观看| 国产经典一区二区| 久久99青青精品免费观看| 97视频免费在线观看| 国产成人亚洲综合91精品| 成人国产精品久久久久久亚洲| 国产综合香蕉五月婷在线| 亚洲欧美精品伊人久久| 国产欧美婷婷中文| 日韩欧美视频一区二区三区| 久久久久免费视频| 国产69精品久久久| 91精品久久久久久久久不口人| 色偷偷av亚洲男人的天堂| 最近2019年好看中文字幕视频| 国产区亚洲区欧美区| 欧美视频在线观看免费网址| 欧美成人黑人xx视频免费观看| 日韩精品视频在线免费观看| 欧美国产亚洲精品久久久8v| 久久久精品久久| 2021久久精品国产99国产精品| 欧美综合国产精品久久丁香| 国产99久久精品一区二区 夜夜躁日日躁| 精品国产一区久久久| 国产精品免费视频xxxx| 久久在线免费观看视频| 亚洲人成77777在线观看网| 成人春色激情网| 17婷婷久久www| 亚洲激情视频在线| 欧美影院在线播放| 久久久精品电影| 国产精品亚洲视频在线观看| 久久影视三级福利片| 欧美精品久久久久久久免费观看| 精品国产欧美一区二区五十路| 亚洲精品日韩丝袜精品| 日韩av免费在线看| 中文字幕一区二区三区电影| 欧美三级欧美成人高清www| 国产精品电影久久久久电影网| 亚洲欧美另类国产| 热99久久精品| 91成人福利在线| 欧美色xxxx| 亚洲国产精品va在线| 欧洲亚洲妇女av| 日韩一级黄色av| 国产97在线亚洲| 久久99精品久久久久久噜噜| 91日本在线观看| 欧美成人午夜激情视频| 亚洲午夜精品久久久久久性色| 在线亚洲国产精品网| 国产精品网红福利| 91tv亚洲精品香蕉国产一区7ujn| 日韩在线播放av| 国产精品日韩专区| 亚洲乱亚洲乱妇无码| 久久久久亚洲精品成人网小说| www.美女亚洲精品| 久久久久久久一区二区| 不卡中文字幕av| 91色中文字幕| 欧美性xxxxxxxxx| 97色伦亚洲国产| 日本高清不卡的在线| 亚洲高清不卡av| 精品国产视频在线| 国产精品免费一区| 久久精品国产综合| 精品国内自产拍在线观看| 久久久久久久久久亚洲| 91高清免费视频| 亚洲一区二区黄| 国产精品一区二区久久精品| 国产亚洲精品久久久| 亚洲大胆人体在线| 91大神福利视频在线| 色先锋久久影院av| 欧美成人午夜激情| 亚洲国产精品人久久电影| 亚洲成人av资源网| 在线视频欧美日韩精品| 成人激情视频小说免费下载| 亚洲国产精彩中文乱码av在线播放| 国产婷婷色综合av蜜臀av| 少妇高潮 亚洲精品|