EJB中數(shù)據(jù)驗證出現(xiàn)的地方是什么

這篇文章主要介紹“EJB中數(shù)據(jù)驗證出現(xiàn)的地方是什么”,在日常操作中,相信很多人在EJB中數(shù)據(jù)驗證出現(xiàn)的地方是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”EJB中數(shù)據(jù)驗證出現(xiàn)的地方是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

公司專注于為企業(yè)提供成都做網(wǎng)站、網(wǎng)站設計、微信公眾號開發(fā)、電子商務商城網(wǎng)站建設小程序定制開發(fā),軟件按需求定制網(wǎng)站等一站式互聯(lián)網(wǎng)企業(yè)服務。憑借多年豐富的經(jīng)驗,我們會仔細了解各客戶的需求而做出多方面的分析、設計、整合,為客戶設計出具風格及創(chuàng)意性的商業(yè)解決方案,創(chuàng)新互聯(lián)公司更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務。

 我們將討論數(shù)據(jù)驗證邏輯應該出現(xiàn)在 EJB 應用程序代碼的什么位置,而不是專注于驗證過程(Java 技術專區(qū)的其它地方對此進行了很好的討論)。在本系列先前的技巧文章中,我們了解了很多組成基于 EJB 技術的應用程序的組件:底層會話 bean 及其業(yè)務接口;在實體 bean 及其客戶機之間傳送數(shù)據(jù)的值對象以及擔任 web 層和業(yè)務層之間的保護層的各種委派類。驗證邏輯十分適合這些組件中的任何一個。實際上,您可以在多個組件中放置驗證邏輯,在整個應用程序中分層次地放置它(盡管這樣做是不可取的)。因此,我們在此處提出的問題是:在 EJB 應用程序的什么位置放置驗證代碼最有利?

數(shù)據(jù)驗證的類型
 要確定將驗證代碼放置在什么位置,第一步是了解您正在處理什么類型的驗證。數(shù)據(jù)格式驗證確保所有數(shù)據(jù)類型(整數(shù)、浮點數(shù)、字符串等)都是正確的。它還要確認變量都在允許值的范圍之內以及實際的模式按預期的匹配。本質上,數(shù)據(jù)格式驗證處理驗證的任何方面,這些驗證不需要應用特定業(yè)務規(guī)則

特定于業(yè)務的驗證基于一組業(yè)務規(guī)則(例如,確保所提供的 ISBN 號與您數(shù)據(jù)庫中的實際書籍相匹配)。它幾乎總是需要對 EJB 層以及應用程序中的其它業(yè)務邏輯組件具有訪問權。

數(shù)據(jù)格式驗證
 確定了正在處理的驗證類型之后,下一步是確定放置代碼的位置。在您的 EJB 應用程序中,數(shù)據(jù)格式驗證邏輯可以如下進行放置:

將賦值(setter)方法放置在業(yè)務委派上。 
將賦值(setter)方法放置在 bean 的遠程接口上。 
將賦值(setter)方法放置在 bean 的消息對象或值對象上。 
對于本示例,我們將假定您正在處理一個包括業(yè)務委派的 EJB 應用程序。如果是這樣,那么您應該采取某些步驟,確保所有的應用程序客戶機(處于 Web 層)都在使用委派進行 bean 訪問,而不是直接訪問 bean。如果確實是這樣,那么您可以將所有數(shù)據(jù)驗證代碼都安全地放置在業(yè)務委派方法中,如清單 1 所示。

清單 1. 業(yè)務委派中的數(shù)據(jù)格式驗證 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
 }
}


 

 對于數(shù)據(jù)格式驗證,您希望使驗證邏輯盡可能靠近客戶機。數(shù)據(jù)格式驗證經(jīng)常觸發(fā)錯誤頁面或要求客戶機重新輸入格式錯誤的數(shù)據(jù)。在這些情況下,您希望花費最少的處理開銷迅速向客戶機提供反饋。通過將驗證邏輯放置在業(yè)務委派中,您已經(jīng)創(chuàng)建了最自然的錯誤處理方案。當客戶機嘗試向委派查詢帶有格式錯誤的數(shù)據(jù)時,就會觸發(fā)錯誤,請求被直接送回客戶機,并就該問題警告用戶。

 將驗證邏輯放置在 bean 實現(xiàn)中會導致低效率的驗證過程。錯誤消息將從 bean 實現(xiàn)傳送到委派,而不是直接從委派傳送到客戶機,這很象 RemoteException,而不象應用程序異常。除了遠程異常的代價之外,委派還將付出 JNDI 查找、RMI 流量以及(可能有)額外的業(yè)務邏輯的代價 — 花費在單個驗證錯誤上的力氣太多了!

特定于業(yè)務的驗證
 特定于業(yè)務的驗證完全是一種不同的情形。業(yè)務驗證錯誤通常比數(shù)據(jù)驗證錯誤更復雜,并很少通過客戶機交互獲得解決。解決特定于業(yè)務的錯誤要求使用額外的實體和會話 bean 以及數(shù)據(jù)庫訪問,這些都必須通過 JNDI 和 RMI 事務進行處理。把這種驗證放在業(yè)務委派上花費的開銷會很大。更好的主意是將這種驗證移回 EJB 層,尤其是放置到 bean 的實現(xiàn)類中。

 在將該驗證放置在應用程序的這一層時,所有 RMI 流量都應該是本地的;大多數(shù)應用程序服務器都將使用 VM 內的優(yōu)化,以使 bean-到-bean 交互速度極快。您也可以避免 JNDI 訪問,因為許多 bean 已經(jīng)查找了相關 bean 的主(home)接口。此外,您的業(yè)務委派已經(jīng)處理了所有必要的數(shù)據(jù)格式驗證。

到此,關于“EJB中數(shù)據(jù)驗證出現(xiàn)的地方是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

網(wǎng)頁名稱:EJB中數(shù)據(jù)驗證出現(xiàn)的地方是什么
本文URL:http://muchs.cn/article34/gpgpse.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設、服務器托管網(wǎng)站維護、微信公眾號、小程序開發(fā)品牌網(wǎng)站設計

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設