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

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

在ejb中直接利用jdbc讀取數據庫記錄

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

  在一個后臺使用關系數據庫的ejb系統中,假如客戶端只需要使用表格形式的用戶界面來顯示數據,那么怎樣才能高效的存取,表格化服務器端的數據呢?
  在分布式計算中,一個最常用的用例就是為客戶端顯示服務器端的靜態數據,這些數據通常是只讀的,在客戶端很少要更新。舉個例子:一個應用程序要顯示大批量的數據到客戶端,這些數據是只讀的,在Html表格中顯示可能如下:
 ?。?
  Employee    Department
  ------------------------------
  Adam Berman   Development
  Ed Roman    Management
  Clay Roach   Architecture
  ------------------------------
  在服務器端,我們會將數據模型化為一個Employee實體Bean和一個Department實體Bean.具體過程如下:在session Facade模式下調用getEmployees()方法。這需要先在home接口上調用finder方法,返回所有的employee,對每個employee查找其對應的Department Entity Bean.然后利用這兩個實體Bean獲取的數據,創建一個數值對象視圖,session bean將此數值對象的雇員/部門集合返回到客戶端:
  public class EmployeePRojectViewObject {
    public String employeeName;
    public String employeeTitle;
    ...
    public String departmentName;
    public String departmentLocation;
    ...
  }
  
  根據不同的ejb server和應用程序,這個過程會存在很多問題:
  1)n+1次 Entity Bean的數據庫調用問題
  意思是:對BMP和某些CMP,從N個entity Beans中獲取數據會需要n+1的數據庫調用,對一個好的CMP實現來說,應該答應批量加載,而一個開發者應知道這樣會存在可怕的問題。
  n+1問題的產生過程:為了從N個entity bean中獲取數據,首先必須調用finder方法(作為一次數據庫調用),在一個finder方法執行之后或者在一個商業方法調用之前,容器為每個entity bean執行ejbLoad(),這就是說,每個entity bean都要調用ejbLoad()方法(每個entity bean執行一次數據庫調用),這樣一個簡單的數據庫查詢操作就需要n+1次數據庫調用。每一次的數據庫調用都會在連接池中臨時鎖定數據庫連接。通常分布式系統的數據庫一般都單獨放在一臺機器上,這樣每次的數據庫往返操作都會增加一次網絡調用。整個系統的速度就受到了影響。對我們這個例子來說,運行這個例子實際將需要2n+1次數據庫調用(1個查找finder,n個employee ejbLoad(),n個department ejbLoad()).
  
  2)遠程調用過多
  假如要經過entity bean的遠程接口,對n個employee & department數據來說就需要3n次遠程調用
  ◆為每個employee的getvalueObject有n次調用
  ◆................getDepartment ........
  ◆......department的getvalueObject有n次調用
  在獲取每個數值對象集后,session bean將把這些數值對象綁定到EmployeeProjectViewObject上。
  
  3)簡單的聯結操作(join Operation)過于繁重。對這個例子來說,不管是BMP還是CMP,都要實例化許多的entity bean,和處理entity bean之間的交互。設想一個稍微復雜一點的情況,就是需要顯示employee及相關的department,project & company,這樣就不是僅僅增加幾十行代碼的問題,由于要增加數據庫調用和遠程調用,整個系統的速度將大大的降低。
  
  4)需要創建一個數值對象層,使用entity bean層進行數據庫操作,需要實現value Objects,Subset value Objects & View value Objects.這樣增加了代碼的復雜性降低了可維護性。在我們的這個例子中,我們創建了數值對象視圖,來封裝從deployee bean & department bean中獲得的數據,并且把他們匹配發送到客戶端。請閱讀"Generic Attribute access"來進一步了解數值對象(value Object)的使用。
  
  當客戶端只是瀏覽數據時,使用entity bean層的優點就不是很明顯。使用本地接口和一個好的CMP實現將明顯得減少以上這些問題。但是BMP開發者就不會如此幸運。在BMP中,只能通過使用entity bean緩存來減少這樣的問題,而這只能用在單個EJB server部署上,并且要求數據庫的結構在ejb之外不能改變。否則的話,你只好忍受這些問題了。
  還有既然客戶端需要列表顯示數據,這樣將數據庫中的數據轉換為對象的優點也就體現不出來了,因為還要將對象的數據在客戶端列表化。
  
  鑒于以上問題:
  在BMP中,使用JDBC從關系數據庫取出數據,使用RowSets將數據列表到客戶端,在使用Entity Bean來進行更新操作。
  作為一個通常的笨拙的處理,你需要為客戶端列出數據,然后你在session facade模式下使用jdbc將比使用Entity Bean好的多。更重要的是,RowSets提供了一個清楚的和實際的方法從JDBC記錄集取出數據。然后直接列出到客戶端,而不需要先將數據轉化為數值對象再將數據列出到客戶端。
  直接使用jdbc而不使用Entity Bean對許多開發者來說是不可思議的,自從Entity Bean出現以來,人們就一直在為此而爭論。究竟,Entity Bean 很好的封裝了數據和數據邏輯,隱藏了持續治理的細節(比如:你不需要知道你所使用的數據庫是什么),使整個系統的商業概念模型化,使用了容器的許多特性,比如:連接池,并發性,事務等。假如使用一個非面向對象的方法,似乎是一種退步。但是同任何其他的設計模式一樣,有好處也有壞處,這些將在后面討論,不過我們先來看一下RowSets.
  在ejb2.0中,RowSet 是一個接口,是javax.sql.ResultSet的子類。RowSet的非凡實現答應你將ResultSet數據包裝并排列顯示到客戶端,客戶端可以直接操作RowSet記錄集合字段。jdbc2.0把這種實現稱作CachedRowSet.CachedRowSet并不連接數據庫,一旦它從ResultSet中把數據復制過來,就可以斷開與數據庫的連接,此時,CachedRowSet就存放了sql查詢的結果集。
  對我們這個例子,使用RowSet,我們可以將一張表里的所有數據一次性的存到一個對象中,并且發送到客戶端。下面的圖形顯示了RowSet方法與數值對象方法的區別
  doc1.html
  在客戶端,從RowSet里取出的數據可以直接對應到表格的行和列。
  使用JDBC和RowSet的優點:
  1)RowSet為所有的查詢操作提供通用的接口
  2)簡單的查詢操作沒有事務過載
  3)利用緩存中的數據庫
  4)只返回你想要的數據
  5)用戶所要的數據只通過一次大的調用
  缺點:
  1)用戶需要知道數據庫表的字段名
  2)商業邏輯與持續邏輯之間的緊密耦合
  3)不是面向對象的
  4)在編譯期間不檢查查詢結果。
  在數值對象中調用getXXX()而用RowSet在客戶端需要調用getString("XXX")
  5)有可能產生bug,可維護性差
  
  最后,這個模式并不是說不要用Entity Bean,只說說當用戶只需要臨時列表顯示數據時,還有更高效的方法。在這個模式中,jdbc 和 RowSet用來進行列出數據操作而entity bean責負責更新操作。非凡注重:盡管RowSets也可以進行更新操作并且可以保證與數據庫的同步,但是在應用程序中永遠都不要這么用!
  
  盡管在客戶端列表顯示數據時,商業/數據概念的完整性以及和其他商業概念的聯系顯得不是很重要,但是當進行更新操作時,這些概念就非常重要。Entity Bean封裝了數據以及對數據的"操作規則"。當更新Entity Bean的屬性時,Entity Bean有可能需要進行有效性驗證并更新同一個應用程序中其他的Entity Bean。
  
  舉個例子:對一個應用程序中的Book和Chapter Entity Bean,當你修改Chapter Entity Bean章節標題時,Chapter將檢驗新的標題并且調用Book Bean讓它進行修改,然后Book Bean有可能在調用其他的Entity Bean進行相應的修改操作。
  
  從Session Facade通過jdbc/RowSets進行更新操作迫使開發者書寫將商業邏輯和復雜的數據邏輯混在一起的代碼。所有的某個非凡的商業概念(business concepts)要求的規則(rules),關聯和驗證都必須以更新記錄和表的形式出現。
  
  JDBC and RowSets for reading采用的是Session Facade模式,與value Object 和 Generic Attribute Access模式是不一致和不兼容的。value Object 和 Generic Attribute Access還可以進行更新操作

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品视频免费在线观看| 国产精品成熟老女人| 成人激情视频在线| 国内精品国产三级国产在线专| 日本韩国欧美精品大片卡二| 精品视频偷偷看在线观看| 日韩一区二区欧美| 欧美精品成人在线| 国产偷国产偷亚洲清高网站| 久久久精品一区二区三区| 欧美性xxxx极品高清hd直播| 国产欧美一区二区白浆黑人| 成人久久久久久久| 亚洲第一区中文99精品| 日韩欧美在线视频免费观看| 一本大道亚洲视频| 欧美日韩激情视频| 欧美在线视频免费观看| 亚洲精品福利资源站| 欧美黑人xxxⅹ高潮交| 国产精品爱啪在线线免费观看| 国产91精品青草社区| 久久99亚洲热视| 欧美激情视频一区| 欧美亚洲在线视频| 亚洲国产精品国自产拍av秋霞| 国产精品吹潮在线观看| 欧美综合在线第二页| 最近2019好看的中文字幕免费| 国产精品视频白浆免费视频| 欧美高清第一页| 热99精品里视频精品| 69国产精品成人在线播放| 日韩中文字幕在线| 国产91色在线|| 国产91精品青草社区| 欧美午夜影院在线视频| 日本精品一区二区三区在线播放视频| 欧美成人激情图片网| 国产91亚洲精品| 98精品国产自产在线观看| 色婷婷**av毛片一区| 亚洲精品98久久久久久中文字幕| 日本不卡免费高清视频| xx视频.9999.com| 国色天香2019中文字幕在线观看| 久久久久免费视频| 日韩中文视频免费在线观看| 色综合久久中文字幕综合网小说| 尤物yw午夜国产精品视频| 91久久久国产精品| 国产日韩欧美夫妻视频在线观看| 国产精品va在线播放我和闺蜜| 国产精品嫩草影院一区二区| 亚洲午夜女主播在线直播| 国产高清在线不卡| 亚洲国产精品免费| 91在线视频导航| 日韩av在线网| 日韩欧美中文免费| 国产精品免费久久久| 日韩欧美国产一区二区| 欧美日韩福利电影| 亚洲欧美国产精品久久久久久久| 色妞久久福利网| 亚洲人午夜精品| 久久精视频免费在线久久完整在线看| 国产精品日韩在线观看| 国产精品久久久久影院日本| 26uuu亚洲伊人春色| 亚洲一区二区三区久久| 亚洲影院色无极综合| 国语自产精品视频在线看| 亚洲国产精品网站| 亚洲午夜精品视频| 欧美激情视频在线观看| 日本一区二区在线免费播放| 日本亚洲精品在线观看| 久久91亚洲精品中文字幕奶水| 亚洲区bt下载| 亚洲免费一在线| 国产成人精品国内自产拍免费看| 亚洲夜晚福利在线观看| 欧美激情精品久久久久久黑人| 久久久国产精品视频| 国外成人在线播放| 亚洲成av人乱码色午夜| 欧美成人精品一区二区| 国产欧美在线观看| 久久久亚洲影院你懂的| 91免费人成网站在线观看18| 欧美精品在线网站| 国产精品一久久香蕉国产线看观看| 久久综合伊人77777| www.欧美三级电影.com| 国产精品青草久久久久福利99| 日韩av观看网址| 91亚洲精品久久久久久久久久久久| 国产日产欧美a一级在线| 亚洲国产精品热久久| 国产91精品青草社区| 福利一区视频在线观看| 黑人巨大精品欧美一区二区一视频| 成人免费观看49www在线观看| 欧美性猛交xxxx免费看漫画| 亚洲女人天堂色在线7777| 亚洲精品一区中文字幕乱码| 日本中文字幕不卡免费| 日韩av在线免费观看一区| 日本一区二三区好的精华液| 亚洲国语精品自产拍在线观看| 日韩在线视频观看| 久久久久国产精品免费| 久久久久久久97| 欧美性猛交xxxx乱大交蜜桃| 欧美一级淫片丝袜脚交| 国产精品1234| 亚洲欧美制服另类日韩| 国产日产欧美精品| 久久亚洲精品小早川怜子66| 91九色精品视频| 国产精品国产自产拍高清av水多| 2018日韩中文字幕| 久久精品在线播放| 91情侣偷在线精品国产| 久久69精品久久久久久国产越南| 亚洲精品国产欧美| 亚洲综合在线做性| 97超级碰碰碰| 国产一区二区三区日韩欧美| 日本高清视频精品| 亚洲精品自拍第一页| 欧美精品性视频| 日韩小视频在线观看| 色999日韩欧美国产| 亚洲高清免费观看高清完整版| 国产性猛交xxxx免费看久久| 久久久久久久香蕉网| 国产91在线播放九色快色| 中文字幕国产精品久久| 亚洲jizzjizz日本少妇| 欧美限制级电影在线观看| 亚洲永久免费观看| 亚洲成人aaa| 日韩av电影免费观看高清| 精品夜色国产国偷在线| 国产精品美腿一区在线看| 伊人av综合网| 久久成人在线视频| 26uuu另类亚洲欧美日本老年| 九九综合九九综合| 91国自产精品中文字幕亚洲| 日韩av在线免费播放| 久久男人资源视频| 欧美国产日韩免费| 亚洲成色www8888| 中文字幕免费国产精品| 午夜精品久久久久久久99热浪潮| 国产精品电影在线观看| 精品色蜜蜜精品视频在线观看| 2018中文字幕一区二区三区| 91精品国产高清久久久久久91| 国产精品亚洲第一区| 亚洲影视中文字幕|