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

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

EJB實質問題

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

  為什么要使用EJB?
  ================
  
  EJB最大的誘人之處是她把應用程序和服務器分開了,我們再也不用和那些服務器上的復雜的資源打交道了,什么數據庫,什么進程,線程,什么安全權限,什么套接字,都見鬼去吧,我們只需要專著于我們的商業邏輯的實現了.
  
  ==========
  EJB的實質?
  ==========
  
  EJB實際上是SUN的J2EE中的一套規范,并且規定了一系列的API用來實現把EJB概念轉換成EJB產品.EJB是BEANS,BEANS是什么概念,那就是得有一個容納她,讓她可勁造騰的地方,就是得有容器.EJB必須生存在EJB容器中.這個容器可是功能強大之極!她首先要包裝你BEAN,EJB的客戶程序實際上從來就不和你編寫的EJB直接打交道,他們之間是通過HOME/REMOTE接口來發生關系的.它負責你的BEAN的所有的吃喝拉薩睡,比如BEAN的持續化,安全性,事務治理...
  
  =============
  EJB服務器產品
  =============
  
  各個WEB服務器開發商基本上都在他們WEB服務器中新捆綁了EJB容器,或者叫EJB服務器.其中最簡單也是最根本的是J2EE開發環境帶的J2EE的EJB容器,它很好的和J2EE的HTTP服務器和Servlet引擎一起構筑了一個很好的運行環境,由于配置簡單,功能強大,因此成為我的最愛.另外象BEA的Weblogical是值得推薦的一個產品,它的WEB服務器功能相當強大,是當今很多網站構筑的理想WEB服務器,它也已經加入了EJB的行列,在EJB方面有著不俗的表現.InPRise的IAS更是一個功能強大的WEB服務器,同樣,也嵌入了EJB容器,加之與本公司的JBuilder的無接縫結合,更使它人氣攀升.
  還有象IBM的WebSphere也不錯,不過Apache是否已經搭載了EJB容器,我不太清楚.
  另外,推薦一個EJBoss,是一個完全免費的EJB服務器,而且是原代碼公開的.
  
  ========================
  EJB容器如何包裝你的BEAN.
  ========================
  
  這年頭沒有天上掉餡餅的好事情,EJB也不例外,你想讓EJB容器替你治理你編寫的EJB的吃喝拉薩睡,憑什么?!憑xml描述子,你通過一個XML文件告訴EJB容器BEAN的相關配置信息,比如我的EJB的HOME接口和REMOTE接口是哪一個類,比如我的EJB的別名(實際上是JNDI名稱)叫什么,比如我的EJB是否是實體類型的EJB還是對話類型的EJB,比如告訴容器替我治理我的實體EJB中哪些自段,......總之,你得跟咱們的EJB大總管----EJB容器把所有都交代清楚.這樣,剩下的,就看EJB容器的了!!!
  你是不是總共寫過3個文件,BEAN定義,HOME接口定義,ROMOTE接口定義,
  當你DEPLOY他們時,容器會
  (1).首先根據HOME和REMOTE接口生成他們的實現代碼,我們不妨叫做HOME_IMPL和REMOTE_IMPL,
  (2).然后,利用RMIC產生HOME_IMPL和REMOTE_IMPL的STUB和SKELETON文件,2X2一共生成4個文件.
  (STUB和SKELETON請參見RMI的相關概念)
  如此這般,最后,在服務器上,一共有
  BEAN
  HOME_IMPL
  REMOTE_IMPL
  HOME_STUB
  HOME_SKELETON
  REMOTE_STUB
  REMOTE_SKELETON
  7文件,才能讓EJB工作起來.
  (3).生成實體EJB對應的數據庫的庫表
  (4).注冊你的EJB到JNDI服務
  
  ===============================================================
  為什么除了寫BEAN,還得寫接口文件,而且干嘛要HOME和REMOTE兩個接口.
  ===============================================================
  
  我攪著吧,這兩個接口完全是可以合并成一個接口的,其實他們的作用都只是一個接口,為了讓那人家SUN干嗎還拆成兩個呢?我想,正如SUN所說的,為了將一些容器相關操作和客戶商業方法分開,什么意思?說開了吧,HOME用來規范容器相關的操作方法,REMOTE負責專心致志的定制商業方法,而我們的BEAN才是最終的邏輯實現者.
  還是不明白?沒關系,我在說的細些,
  舉例說明:
  把我想象成一個BEAN,HOME接口就是我們家人的命令,REMOTE接口就是我們單位的領導的命令,我們家人的命令決定了我如何吃喝拉薩睡,領導的命令決定了我如何做一些真正的工作,請注重這里我使用了"決定"這個字眼,
  我并沒有說我們家人,而是說了我們家人的命令,這個命令的含義就是接口,不是類,而我這個BEAN卻是個類!還有,BEAN類不實現REMOTE和HOME接口,記住!記住!
  
  =========
  EJB的分類
  =========
  
  EJB分為實體(Entity)EJB和對話(session)EJB,
  
  >>>>>>實體EJB:>>>>>>對話EJB<<<<<<<
  
  對話EJB根本根本不和數據庫打交道,為什么,因為他根本不用序列化!他只負責來完成一些邏輯操作,比如算個帳什么的.
  為了和實體EJB較勁,他也一口氣生了兩個兒子,
  a.有狀態(sessionful)對話EJB
  他就跟servlet中的session對象似的,可以保存用戶的session相關信息,而且他僅僅被一個用戶的一次session所使用,不和別人共享,我管他叫對話,不過這"對話"翻出來這是夠難聽的,還不如就叫他session呢!
  b.無狀態(sessionless)對話EJB
  這個東東是最簡單的EJB,他是可以被多個用戶共享,注重!我所說的共享是指實例的共享!
  
  
  ======================================
  一個BEAN治理持續化的實體EJB(BMP)小例子
  ======================================
  
  說了半天了,大家珍貴的腦資源恐怕被我消耗的差不多了,好,讓我們來剖析一個BEAN治理持續化的實體EJB(BMP)吧.
  
  -----------------------看看REMOTE接口------------------------------
  public interface Account extends EJBObject {//必須從EJBObject繼續
  //這些都是商業方法,而且這里寫了的,必須在BEAN中都實現
  public void deposit(double amt) throws RemoteException;
  public double withdraw(double amt) throws AccountException, RemoteException;
  public double getBalance() throws RemoteException;
  public String getOwnerName() throws RemoteException;
  public void setOwnerName(String name)throws RemoteException;
  }
  
  -------------------------看看HOME接口---------------------------------
  public interface AccountHome extends EJBHome {
  //這聲明了create函數,由于是BMP,所以必須在BEAN中實現一個叫ejbCreate的對應函數
  Account create(String accountID, String ownerName) throws CreateException, RemoteException;
  
  //按主鍵查詢
  //由于是BMP,所以必須在BEAN中實現一個叫ejbFindByPrimaryKey的對應函數
  public Account findByPrimaryKey(AccountPK key) throws FinderException, RemoteException;
  
  //按其中的Name字段查詢
  //由于是BMP,所以必須在BEAN中實現一個叫ejbFindByOwnerName的對應函數
  public Account findByOwnerName(String name) throws FinderException, RemoteException;
  }
  
  ---------------------------看看BEAN-----------------------------------
  public class AccountBean implements EntityBean {
  //三個PUBLIC字段,他們將來對應庫表的三個字段
  public String accountID
  public String ownerName;
  public double balance;
  
  //----HOME中聲明的create方法的影射實現
  //由于是BMP,所以必須自己來負責實例創建時實例到數據庫的影射
  public AccountPK ejbCreate(String accountID, String ownerName) throws CreateException, RemoteException {
  PreparedStatement pstmt = null;
  Connection conn = null;
  try {
  this.ownerName = ownerName;
  this.balance = 0;
  conn = getConnection();
  pstmt = conn.prepareStatement("insert into accounts (id, ownerName, balance) values (?, ?, ?)");
  pstmt.setString(1, accountID);
  pstmt.setString(2, ownerName);
  pstmt.setDouble(3, balance);
  //看這里,看這里!插進去了...
  pstmt.executeUpdate();
  return new AccountPK(accountID);
  }catch (Exception e) {
  throw new CreateException(e.toString());
  }finally {
  try {
  pstmt.close();
  conn.close();
  }catch (Exception e) { }
  }
  }
  
  //----HOME中聲明的findByOwnerName方法的影射實現
  //由于是BMP,所以必須自己來完成按照Name字段查找的工作
  public AccountPK ejbFindByOwnerName(String name) throws FinderException, RemoteException {
  PreparedStatement pstmt = null;
  Connection conn = null;
  try {
  conn = getConnection();
  pstmt = conn.prepareStatement("select id from accounts where ownerName = ?");
  pstmt.setString(1, name);
  //看看看!找上了,根據名稱...
  ResultSet rs = pstmt.executeQuery();
  rs.next();
  String id = rs.getString("id");
  pstmt.close();
  conn.close();
  return new AccountPK(id);
  }catch (Exception e) {
  throw new FinderException(e.toString());
  }finally {
  try {
  pstmt.close();
  conn.close();
  }catch (Exception e) { }
  }
  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩福利视频| 亚洲影院污污.| 亚洲欧美日韩精品| 欧美在线视频观看免费网站| 欧美日韩国产成人在线| 亚洲女人被黑人巨大进入al| 伊人亚洲福利一区二区三区| 91久久精品久久国产性色也91| 亚洲专区中文字幕| 亚洲欧美另类人妖| 欧美激情xxxx| 欧美亚洲视频一区二区| 国产亚洲精品美女久久久久| 91亚洲午夜在线| 欧美有码在线视频| 成人激情视频网| 中文字幕精品在线| www国产亚洲精品久久网站| 日韩在线视频中文字幕| 国产精品自产拍在线观看| 欧美另类暴力丝袜| 日韩禁在线播放| 国产精品美女免费看| 亚洲国内精品在线| 欧美大片在线看| 亚洲成av人片在线观看香蕉| 欧美日韩精品国产| 日韩中文字幕视频在线观看| 色琪琪综合男人的天堂aⅴ视频| 日本午夜在线亚洲.国产| 欧美午夜性色大片在线观看| 成人免费网站在线观看| 亚洲美腿欧美激情另类| 欧美激情一区二区三区高清视频| 在线观看久久久久久| 日韩欧美在线观看| 欧美理论电影在线播放| 欧美综合第一页| 欧美午夜宅男影院在线观看| 国产精品视频中文字幕91| 国产美女直播视频一区| 国产精品视频免费在线| 欧美黑人xxxⅹ高潮交| 九九九久久国产免费| 欧美性极品xxxx娇小| 欧美大全免费观看电视剧大泉洋| 九色精品免费永久在线| 91在线免费观看网站| 欧美激情奇米色| 精品视频久久久久久| 久久久www成人免费精品| 亚洲а∨天堂久久精品喷水| 在线视频欧美日韩| 国产中文日韩欧美| 91久久久久久久久| 中文字幕一区二区精品| 亚洲欧美激情精品一区二区| 亚洲欧美综合v| 亚洲a成v人在线观看| 欧美日韩一二三四五区| 欧美亚洲另类制服自拍| 久久久久久久久爱| 91视频九色网站| 日韩美女在线看| 色综久久综合桃花网| 欧美影院久久久| 亚洲精品视频二区| 日本成人激情视频| 欧美在线视频观看免费网站| 日韩av网站在线| 91精品综合视频| 亚洲人成在线观看网站高清| 91精品久久久久久综合乱菊| 国产精品视频久久| 成人午夜在线视频一区| 8x海外华人永久免费日韩内陆视频| 日韩激情av在线免费观看| 色婷婷av一区二区三区在线观看| 日韩一区二区福利| 国产精品久久久av| 亚洲精品日韩在线| 国产一区私人高清影院| 欧美激情精品久久久久久蜜臀| 国产精品第一页在线| 国产美女91呻吟求| 亚洲国产精品va| 亚洲一区二区三区乱码aⅴ蜜桃女| 性欧美暴力猛交69hd| 黄色一区二区在线观看| 精品亚洲夜色av98在线观看| 日韩在线视频网站| 美女撒尿一区二区三区| 日韩中文字幕网址| 国产精品网站大全| 亚洲qvod图片区电影| 国产精品h片在线播放| 国产一区二区成人| 日韩高清av一区二区三区| 91精品视频播放| 中文字幕九色91在线| 久久精品国产清自在天天线| 亚洲视频视频在线| 国产精品日日做人人爱| 一区二区三区亚洲| 久久成年人免费电影| 69av在线视频| 久久精品99久久久香蕉| 九九热在线精品视频| 日韩成人av在线播放| 国产成人综合精品在线| 日韩av最新在线| 国产日韩av在线播放| 精品亚洲男同gayvideo网站| 亚洲japanese制服美女| 91久久夜色精品国产网站| 亚洲午夜av电影| 国产剧情日韩欧美| 精品夜色国产国偷在线| 91亚洲精品一区| 国产精品第8页| 国产亚洲精品久久| 久久九九国产精品怡红院| 在线观看欧美日韩国产| 国产视频精品自拍| 欧美老少配视频| 欧美电影在线免费观看网站| 2019最新中文字幕| 亚洲日韩欧美视频一区| 韩曰欧美视频免费观看| 一区三区二区视频| 亚洲区bt下载| 88国产精品欧美一区二区三区| 欧美激情在线观看视频| 亚洲精品一区av在线播放| 日韩视频免费中文字幕| 日韩在线观看视频免费| 久久婷婷国产麻豆91天堂| 国产精品成人观看视频国产奇米| 国产精品视频资源| 久久久亚洲精品视频| 国产在线拍偷自揄拍精品| 午夜精品一区二区三区av| 亚州欧美日韩中文视频| 亚洲第一国产精品| 亚洲国产私拍精品国模在线观看| 国产在线视频不卡| 久久久久久18| 91精品啪在线观看麻豆免费| 国产精品男女猛烈高潮激情| 91精品国产综合久久久久久久久| 中文字幕成人在线| 最近2019中文免费高清视频观看www99| 九九热精品视频国产| 亚洲一区中文字幕在线观看| 一区二区三区 在线观看视| 亚洲欧美国产一区二区三区| 国产精品自产拍在线观看| 日韩高清电影免费观看完整| 人人澡人人澡人人看欧美| 69视频在线播放| 日本精品久久久久影院| 亚洲老头同性xxxxx| 国产精品欧美一区二区三区奶水| 国产精品青青在线观看爽香蕉|