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

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

EJB是如何封裝事務邏輯的?

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

  J2EE平臺包含了一個針對分布組件模型的規范,這個模型叫做企業javaBeans(EJB)。假如你已經利用Java工作了一段時間,你就可能對EJB及其同事務邏輯之間的關系有一些基本的了解。在本文中,我們會更加深入地看探討,如何在同其他資源進行交互操作的同時使用EJB來封裝事務邏輯。關于如何使用EJB創建事務邏輯組件的一些背景知識,可以參看我 先前的文章 。你可以在這里下載到本文所涉及的 示例代碼 。
  
  
  
  層的范圍
  
   
  
  我們對中間件概念的探討要從包含有一個客戶層和三個服務器層的結構開始。這三個服務器層是下面這些:
  
  表示層——負責接收客戶請求,把這些請求分發給事務邏輯組件,然后把回應進行格式化,以便傳送回客戶端。
  事務層——負責接受來自表示層的服務請求,訪問數據資源以及其他企業系統,再將結果數據返回給表示層。
  數據層——數據資源和外部企業系統的訪問點。
  
  我們把JavaBeans用作數據對象使用,這樣就能在服務器層之間傳遞數據。圖A說明了這些概念和組件。
  
  圖A
   EJB是如何封裝事務邏輯的?(圖一)
  組件模型和EJB
  
  軟件組件有一些很顯著的特點:
  
  自主性——軟件組件應該能夠不依靠于其他組件或者應用程序而獨立工作。
  動態可發現性——盡管一個軟件組件在桌面環境下可能不需要被動態發現,但是在分布系統的環境下,最好具有這個特性。
  事務進程——軟件組件應該能夠邏輯事務的進程。
  包含對外公開的接口——軟件組件應該公開一個或者多個接口,用于向外提供對這個組件功能的訪問。
  能夠用于創建其他的組件或者應用程序——軟件組件的主要任務是讓開發人員能夠把一個或多個組件同自定義的應用程序或者系統代碼結合起來,從而創建其他的組件或者應用程序。
  
  為了說明組件可以如何被用來創建一個更加復雜的實體,我們可以把軟件的組件比作汽車的零部件,汽車的每個零部件(組件)都有其專用的作用(進程)。只要零部件的位置準確且電纜連接正確(接口),它就能夠被作為整車(其他組件或者應用程序)的一個組成部分。
  EJB是如何封裝事務邏輯的?(圖二)
  作為事務邏輯組件的EJB
  
   
  
  EJB組件模型具有我們為軟件組件所制定的絕大多數特點:
  
  自主性——EJB能夠不依靠于其他組件或者應用程序而獨立完成其工作。但是EJB必須在EJB容器內執行。
  動態可發現性——EJB使用JNDI來定位主接口、事務方法和元數據。
  事務進程——EJB組件從定義上講就是被封裝的事務進程。
  包含由對外公開的接口——EJB使用Java接口來指定其事務方法。
  能夠用于創建其他的組件或者應用程序——就和基本的軟件組件一樣,EJB能夠被集中起來完成更加復雜的功能。
  
  EJB組件模型還加入了許多重要的組件模型特性,這些特性讓其成為更能夠吸引人的中間件,例如事務處理、安全和數據庫的連接性。
  
  事務處理點和數據訪問點經常形成分布系統事務邏輯組件的表面。這些方面讓EJB成為了一個用于中間件事務邏輯組件的好技術。
  
  EJB和POJO
  
  當對事務邏輯的訪問跨越物理邊界或者跨越JVM邊界的時侯,按傳統習慣EJB就會被調用;而這是遠程過程的調用就會起作用。但是,EJB規范引入了本地接口,所以EJB提供了一個更加簡便的方式把同一個JVM里位于同一個物理層的對象和組件公開了事務邏輯。
  
  使用遠程或者本地接口訪問EJB組件的靈活性使得很多結構成為可能。例如,根據事務的需要,我們可以從表示層遠程調用EJB,或者是從本地事務層的其他plain-old Java對象(POJO),如圖B所示。
  
  圖B
  EJB是如何封裝事務邏輯的?(圖二)
  EJB訪問的靈活性讓你能夠運用合成原理利用多個JavaBeans和一個或者多個POJO創建邏輯組件。讓我們看一個簡單的EJB應用程序吧,這個程序用一個事務方法公開了一個用戶帳號。JavaBean這個賬號的遠程接口看起來會像Listing A里的一樣。那么事務邏輯類就會看起來像Listing B里的一樣。最后,客戶端的代碼會像Listing C里的這樣。
  Listing A
  
  
  public interface Account extends javax.ejb.EJBObject, java.rmi.Remote {  public String getBalance() throws java.rmi.RemoteException; } Our home interface might look something like the following: public interface AccountHome extends javax.ejb.EJBHome {  public Account create() throws javax.ejb.CreateException,                 java.rmi.RemoteException; }
  
  
  Listing B
  
  
  public class AccountBean  implements javax.ejb.sessionBean {  PRivate javax.ejb.SessionContext ctx;  public void ejbActivate() {}  public void ejbCreate() {}  public void ejbRemove() {}  public void ejbPassivate() {}  public void setSessionContext(javax.ejb.SessionContext ctx)  {     this.ctx = ctx;  }  // business method  public String getBalance()   throws java.rmi.RemoteException  {   String balance = accessDataTierAccount();   return(balance);  } }
  
  Listing C
  
  
  public class AccountClient {  public String getAccountBalance()  {   try {     javax.naming.Context ctx = getInitialContext();     AccountHome home = (AccountHome)ctx.lookup("Bank.AccountHome");     Account account = home.create();    account.getBalance();   } catch(Exception e) {   }  } }
  
  
  
  現在假設你想要把多個賬號作為一個全局帳號向表示層公開。假如你已經為每個帳號創建了EJB,那么你就能夠使用Listing D里的POJO把每個EJB賬號實例化,并把它們用一個邏輯帳號表示出來。
  
  Listing D
  
  
  public class AccountPOJO {  BankAccount bankAccount;  StockAccount stockAccount;  DeptStoreAccount deptStoreAccount;  public String createEJBs()  {   try {    javax.naming.Context ctx = getInitialContext();     BankAccountHome bankHome =      (BankAccountHome)ctx.lookup("Bank.AccountHome");     bankAccount = bankHome.create();     StockAccountHome stockHome =      (StockAccountHome)ctx.lookup("Stock.AccountHome");     stockAccount = stockHome.create();     DeptStoreAccountHome deptStoreHome =      (DeptStoreAccountHome)ctx.lookup("DeptStore.AccountHome");     deptStoreAccount = deptStoreHome.create();   } catch(Exception e) {   }  }  public AccountInfo[] getAggregateAccountInfo()  {   AccountInfo[] accountInfo = new AccountInfo[3];   accountInfo[0] = new AccountInfo(bankAccount.getInfo());   accountInfo[1] = new AccountInfo(stockAccount.getInfo());   accountInfo[2] = new AccountInfo(deptStoreAccount.getInfo());   return accountInfo;  } }
  
  
  
  結束語
  
  我們已經看到了如何使用JavaBeans來創建多層事務邏輯,也看到了EJB組件模型如何為分布組件系統添加了許多重要的特性。我們的下一篇文章會探討如何使用EJB同其他對象進行交互操作。我們還會看到更多用于創建JavaBeans和用于訪問其事務方法的示例代碼。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性xxxx极品hd满灌| 国产精品xxxxx| 国产精品av在线播放| 精品一区二区三区电影| 欧美电影免费观看网站| 亚洲电影成人av99爱色| 久久免费视频在线观看| 亚洲专区中文字幕| 精品国产乱码久久久久酒店| 欧美野外猛男的大粗鳮| 美女福利视频一区| 亚洲成人网在线观看| 国产综合福利在线| 欧美一级视频一区二区| 亚洲综合中文字幕在线观看| 国产亚洲精品美女久久久| 国产精品第一第二| 久久av中文字幕| 欧美日韩国产中文字幕| 日韩av在线播放资源| 狠狠综合久久av一区二区小说| 日韩欧美aⅴ综合网站发布| 成人免费自拍视频| 欧美日韩xxxxx| 国产激情久久久久| 日韩av电影在线播放| 精品国产户外野外| 国产精品青草久久久久福利99| 亚洲一区www| 成人精品久久一区二区三区| 亚洲美女av网站| 欧洲午夜精品久久久| 成人福利视频在线观看| 97av在线播放| 亚洲美女又黄又爽在线观看| 欧美成人精品在线观看| 欧美午夜电影在线| 亚洲小视频在线观看| 国产日韩欧美中文在线播放| 亚洲天堂色网站| 最近2019免费中文字幕视频三| 91免费人成网站在线观看18| 欧美有码在线观看视频| 91日本视频在线| 亚洲欧美中文日韩在线v日本| 欧美风情在线观看| 欧美在线视频网| 欧美日韩亚洲天堂| 色哟哟网站入口亚洲精品| 国产色综合天天综合网| 亚洲免费成人av电影| 欧美在线视频播放| 精品日韩美女的视频高清| 亚洲欧美日韩久久久久久| 亚洲精品永久免费精品| 午夜精品久久久久久久99黑人| 日韩在线免费观看视频| 久久久精品久久久久| 91精品久久久久久久久中文字幕| 亚洲国产日韩欧美在线99| 欧美日韩中文字幕在线| 精品日韩美女的视频高清| 亚洲激情在线观看视频免费| 国产精品主播视频| 尤物九九久久国产精品的特点| 亚洲无线码在线一区观看| 亚洲国产高清福利视频| 中文字幕精品—区二区| 国产精品亚洲综合天堂夜夜| 国产欧美一区二区三区久久| 欧美黑人xxxⅹ高潮交| 国产日韩精品入口| 日韩电影在线观看永久视频免费网站| 亚洲国产精品一区二区三区| 亚洲欧美日韩在线一区| 欧美成人午夜免费视在线看片| 亚洲国产日韩欧美综合久久| 亚洲国产精品电影在线观看| 亚洲色无码播放| 亚洲一区二区久久久久久| 欧美激情区在线播放| 97视频在线观看亚洲| 亚洲人高潮女人毛茸茸| 97国产精品人人爽人人做| 成人中文字幕在线观看| 国产精品成久久久久三级| 欧美一级视频免费在线观看| 国产日韩中文字幕在线| 国产精品扒开腿做爽爽爽视频| 91亚洲精品在线观看| 深夜福利亚洲导航| 久久免费精品日本久久中文字幕| 欧美性在线视频| 亚洲一级黄色片| 国产日韩欧美成人| 欧美插天视频在线播放| 欧美性色视频在线| 国产精品久久久久高潮| 亚洲精品电影网在线观看| 久久免费视频网| 亚洲国产毛片完整版| 亚洲国产一区二区三区在线观看| 中日韩美女免费视频网站在线观看| 亚洲国产成人精品久久| 亚洲精品视频久久| 在线视频国产日韩| 欧美激情一区二区三区成人| 97超级碰碰碰久久久| 亚洲tv在线观看| 亚洲成av人影院在线观看| 91午夜在线播放| 97精品国产aⅴ7777| 欧美第一淫aaasss性| 在线成人中文字幕| 久久天天躁狠狠躁老女人| 欧美有码在线观看视频| 日韩欧美精品免费在线| 国产欧美亚洲精品| 日韩在线视频中文字幕| 亚洲精品午夜精品| 国产成人精品亚洲精品| 国产精品一区二区久久| 69久久夜色精品国产7777| 欧美日韩高清在线观看| 久久综合国产精品台湾中文娱乐网| 亚洲免费av电影| 少妇精69xxtheporn| 日韩精品在线私人| 国产精品久久精品| 亚洲国产精品大全| 亚洲成人1234| 成人久久18免费网站图片| 国产精品99久久久久久久久| 欧美另类99xxxxx| 国产美女主播一区| 这里只有精品在线观看| 精品久久久国产精品999| 青青久久av北条麻妃海外网| 日韩欧美a级成人黄色| 成人免费高清完整版在线观看| 国产精品视频一区二区三区四| 成人免费观看49www在线观看| 国产精品国产三级国产专播精品人| 色噜噜久久综合伊人一本| 亚洲自拍偷拍第一页| 欧美亚洲国产另类| 一区二区三区四区在线观看视频| 日日噜噜噜夜夜爽亚洲精品| 午夜欧美大片免费观看| 亚洲精品动漫100p| 国产精品普通话| 亚洲二区中文字幕| 成人a视频在线观看| 一本大道香蕉久在线播放29| 国产精品香蕉在线观看| 亚洲乱码国产乱码精品精天堂| 九色精品美女在线| 一区二区三区高清国产| 自拍偷拍亚洲在线| 国内精品免费午夜毛片| 久久综合久久美利坚合众国| 日韩美女视频免费看| 精品久久久久久久久久久久久| 欧美精品videosex极品1|