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

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

EJB中數據驗證出現在什么地方最合適

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

  我們將討論數據驗證邏輯應該出現在 EJB 應用程序代碼的什么位置,而不是專注于驗證過程(java 技術專區的其它地方對此進行了很好的討論)。在本系列先前的技巧文章中,我們了解了很多組成基于 EJB 技術的應用程序的組件:底層會話 bean 及其業務接口;在實體 bean 及其客戶機之間傳送數據的值對象以及擔任 Web 層和業務層之間的保護層的各種委派類。驗證邏輯十分適合這些組件中的任何一個。實際上,您可以在多個組件中放置驗證邏輯,在整個應用程序中分層次地放置它(盡管這樣做是不可取的)。因此,我們在此處提出的問題是:在 EJB 應用程序的什么位置放置驗證代碼最有利?
  
  數據驗證的類型
  要確定將驗證代碼放置在什么位置,第一步是了解您正在處理什么類型的驗證。數據格式驗證確保所有數據類型(整數、浮點數、字符串等)都是正確的。它還要確認變量都在答應值的范圍之內以及實際的模式按預期的匹配。本質上,數據格式驗證處理驗證的任何方面,這些驗證不需要應用特定業務規則
  
  特定于業務的驗證基于一組業務規則(例如,確保所提供的 ISBN 號與您數據庫中的實際書籍相匹配)。它幾乎總是需要對 EJB 層以及應用程序中的其它業務邏輯組件具有訪問權。
  
  數據格式驗證
  確定了正在處理的驗證類型之后,下一步是確定放置代碼的位置。在您的 EJB 應用程序中,數據格式驗證邏輯可以如下進行放置:
  
  將賦值(setter)方法放置在業務委派上。
  將賦值(setter)方法放置在 bean 的遠程接口上。
  將賦值(setter)方法放置在 bean 的消息對象或值對象上。
  對于本示例,我們將假定您正在處理一個包括業務委派的 EJB 應用程序。假如是這樣,那么您應該采取某些步驟,確保所有的應用程序客戶機(處于 Web 層)都在使用委派進行 bean 訪問,而不是直接訪問 bean。假如確實是這樣,那么您可以將所有數據驗證代碼都安全地放置在業務委派方法中,如清單 1 所示。
  
  清單 1. 業務委派中的數據格式驗證 package com.ibm.library;
  
  import java.rmi.RemoteException;
  import java.util.Iterator;
  import java.util.List;
  import javax.ejb.CreateException;
  import javax.naming.NamingException;
  
  public class LibraryDelegate implements ILibrary {
  
     PRivate ILibrary library;
  
     public LibraryDelegate() {
       init();
     }
  
     public void init() {
       // Look up and oBTain our session bean
       try {
         LibraryHome libraryHome =
           (LibraryHome)EJBHomeFactory.getInstance().lookup(
             "java:comp/env/ejb/LibraryHome", LibraryHome.class);
         library = libraryHome.create();
       } catch (NamingException e) {
         throw new RuntimeException(e);
       } catch (CreateException e) {
         throw new RuntimeException(e);
       } catch (RemoteException e) {
         throw new RuntimeException(e);
       }
     }
  
     // No validation required for accessor (getter) methods
  
     public boolean checkout(Book book) throws applicationException {
      // No validation required here; the object type
      //  takes care of it
  
       try {
         return library.checkout(book);
       } catch (RemoteException e) {
         throw new ApplicationException(e);
       }
     }
  
     public boolean checkout(List books) throws ApplicationException {
      // Validate list
      for (Iterator i = books.iterator(); i.hasNext(); ) {
       Object obj = i.next();
        if !(obj instanceof Book) {
        throw new ApplicationException(
         ApplicationException.VALIDATION_ERROR,
         "Only Books are allowed in the input list");
        }
      }
  
       try {
         return library.checkout(books);
       } catch (RemoteException e) {
         throw new ApplicationException(e);
       }
     }
  
     // And so on...
  
      public void destroy() {
       // In this case, do nothing
     }
  }
  
  對于數據格式驗證,您希望使驗證邏輯盡可能靠近客戶機。數據格式驗證經常觸發錯誤頁面或要求客戶機重新輸入格式錯誤的數據。在這些情況下,您希望花費最少的處理開銷迅速向客戶機提供反饋。通過將驗證邏輯放置在業務委派中,您已經創建了最自然的錯誤處理方案。當客戶機嘗試向委派查詢帶有格式錯誤的數據時,就會觸發錯誤,請求被直接送回客戶機,并就該問題警告用戶。
  
  將驗證邏輯放置在 bean 實現中會導致低效率的驗證過程。錯誤消息將從 bean 實現傳送到委派,而不是直接從委派傳送到客戶機,這很象 RemoteException,而不象應用程序異常。除了遠程異常的代價之外,委派還將付出 JNDI 查找、RMI 流量以及(可能有)額外的業務邏輯的代價 — 花費在單個驗證錯誤上的力氣太多了!
  
  特定于業務的驗證
  特定于業務的驗證完全是一種不同的情形。業務驗證錯誤通常比數據驗證錯誤更復雜,并很少通過客戶機交互獲得解決。解決特定于業務的錯誤要求使用額外的實體和會話 bean 以及數據庫訪問,這些都必須通過 JNDI 和 RMI 事務進行處理。把這種驗證放在業務委派上花費的開銷會很大。更好的主意是將這種驗證移回 EJB 層,尤其是放置到 bean 的實現類中。
  
  在將該驗證放置在應用程序的這一層時,所有 RMI 流量都應該是本地的;大多數應用程序服務器都將使用 VM 內的優化,以使 bean-到-bean 交互速度極快。您也可以避免 JNDI 訪問,因為許多 bean 已經查找了相關 bean 的主(home)接口。此外,您的業務委派已經處理了所有必要的數據格式驗證。
  
  結束語
  在決定將驗證代碼放置在哪里時,很重要的是能夠分辨兩種驗證類型。數據驗證是比業務驗證簡單得多的驗證類型,一般的經驗是使它盡可能靠近客戶機。特定于業務的驗證更復雜,并通常需要幾種不同的事務來完成。這類驗證應該放在 EJB 層,在那里,它可以盡可能地利用現有的進程。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91av在线免费观看| 亚洲精品久久久久中文字幕二区| 成人有码在线视频| 中文字幕亚洲综合久久| 欧美在线性视频| 久久精品中文字幕电影| 精品高清一区二区三区| 欧美xxxx14xxxxx性爽| 欧美一区二区三区……| 国产日韩欧美91| 成人中文字幕+乱码+中文字幕| 亚洲国产高清高潮精品美女| 久久综合色88| 一级做a爰片久久毛片美女图片| 精品亚洲精品福利线在观看| 九九久久国产精品| 久久艳片www.17c.com| 亚洲色图美腿丝袜| 欧美性高潮在线| 91精品久久久久久久久久另类| 国产精品视频男人的天堂| 国产精品免费小视频| yw.139尤物在线精品视频| 不卡av日日日| 色多多国产成人永久免费网站| 国产人妖伪娘一区91| 在线观看欧美成人| 97免费视频在线| 精品久久香蕉国产线看观看亚洲| 日韩成人网免费视频| 日韩免费电影在线观看| 亚洲精品视频二区| 在线日韩精品视频| 午夜精品一区二区三区在线播放| 久久久综合av| 1769国内精品视频在线播放| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美国产日韩中文字幕在线| 亚洲精品91美女久久久久久久| 欧美剧在线观看| 最近2019年中文视频免费在线观看| 日韩成人在线观看| 亚洲国产精品一区二区久| 欧美日韩福利视频| 国产精品福利在线观看| 亚洲性生活视频在线观看| 亚洲美女动态图120秒| 久久精品福利视频| 欧美在线免费看| 91精品视频在线看| 性色av一区二区三区在线观看| 中文字幕无线精品亚洲乱码一区| 九九热最新视频//这里只有精品| 亚洲欧美国产一区二区三区| 91影视免费在线观看| 亚洲福利精品在线| 久久中文字幕在线| 最近免费中文字幕视频2019| 5566日本婷婷色中文字幕97| 国产欧美一区二区三区久久| 欧美日本亚洲视频| 欧美亚洲另类激情另类| 欧美一级片在线播放| 亚洲男人的天堂在线播放| 日韩中文字幕视频在线观看| 精品国产91乱高清在线观看| 国产精品爱久久久久久久| 亚洲精品影视在线观看| 96sao精品视频在线观看| 亚州欧美日韩中文视频| 成人国产精品免费视频| 欧美日韩亚洲一区二| 91精品久久久久久| 欧美日韩国产精品一区二区不卡中文| 久久韩国免费视频| 日韩亚洲欧美中文高清在线| 成人乱色短篇合集| 亚洲国产精品人久久电影| 97精品国产97久久久久久春色| 欧美激情精品在线| 精品国产视频在线| 亚洲第一av在线| 国产亚洲精品高潮| 亚洲日韩欧美视频一区| 中文字幕久久精品| 国产精品白嫩美女在线观看| 日韩免费在线看| 日韩一中文字幕| 国产美女久久精品| 亚洲综合精品一区二区| 欧美日韩国产一区二区三区| 国产视频精品自拍| 国产精品免费一区豆花| 日韩大胆人体377p| 国产精品久久77777| 欧美激情网友自拍| 国产伦精品一区二区三区精品视频| 久久精品久久久久久国产 免费| 国产91久久婷婷一区二区| 国产综合色香蕉精品| 欧美极品美女视频网站在线观看免费| 日韩视频免费中文字幕| 亚洲国产成人在线视频| 久热爱精品视频线路一| 亚洲天堂精品在线| 精品国产区一区二区三区在线观看| 亚洲黄色有码视频| 精品久久久中文| 欧美视频专区一二在线观看| 亚洲第一网中文字幕| 中文字幕欧美日韩| 国产成人精品日本亚洲| 国产91色在线|免| 亚洲欧美自拍一区| 中文字幕欧美亚洲| 亚洲最大福利视频网| 海角国产乱辈乱精品视频| 国产成人精品久久亚洲高清不卡| 国产在线a不卡| 国外色69视频在线观看| 亚洲人午夜精品免费| 原创国产精品91| 日韩免费视频在线观看| 成人精品视频99在线观看免费| 欧美亚洲另类激情另类| 成人xxxxx| 久久亚洲精品毛片| 亚洲免费小视频| 成人网在线视频| 欧美日韩国产成人高清视频| 亚洲国产精品视频在线观看| 精品国产老师黑色丝袜高跟鞋| 国产欧美亚洲视频| 国产精品福利片| 亚洲天堂免费在线| 中文字幕亚洲无线码a| 亚洲国产精品99| 美日韩丰满少妇在线观看| 国产精品久久久av| 亚洲无线码在线一区观看| 亚洲欧美日韩在线高清直播| 日韩av手机在线观看| 日本成人激情视频| 久久精品亚洲一区| 日韩av中文字幕在线免费观看| 日韩欧美中文在线| 九九热最新视频//这里只有精品| 91极品视频在线| 国产成人精品av在线| 色爱av美腿丝袜综合粉嫩av| xvideos亚洲| 亚洲偷欧美偷国内偷| 亚洲国模精品私拍| 欧美一区二区三区……| 久久6免费高清热精品| 欧美精品第一页在线播放| 欧洲精品毛片网站| www.99久久热国产日韩欧美.com| 国产精品18久久久久久麻辣| 国产成+人+综合+亚洲欧美丁香花| 欧美一区二粉嫩精品国产一线天| 国内免费精品永久在线视频| 91精品视频免费看| 琪琪第一精品导航|