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

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

如何實現一個與數據庫表字段松耦合的j2ee應用

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

  本文基于java環境,分析和實現了解決這個問題的方案。首先指出j2ee容器治理持久性實體bean的不足,接著講述了用java實現這個需求的技巧,最后是具體地實現。
  
  1 前言
  在軟件項目的分析設計過程中,我們首先分析數據實體,例如確定類,類成員變量或者畫ER圖。再具體設計UI界面上有哪些輸入框,文本框等,緊接著我們還會確定方法的參數個數和類型。這些過程緊密地依靠于數據實體的穩定性,比如在數據庫設計中,我們需要多少表,每個表的字段有多少,它們的類型是什么等。但是當這個穩定性失去了怎么辦?用戶很有可能說目前我只能為我的表大概確定這些字段。項目組是否該等到用戶確定之后再做?假如用戶說字段的變化就是我的一個需求,項目該如何開發?即使所有客戶能確定字段,不同的客戶確定的字段可能不會是一樣的。由于不同的客戶對字段的需求不是一樣的,項目組有時不得不不厭其煩地構造源代碼的版本數。本文基于java環境,分析和實現了解決這個問題的方案。首先指出j2ee容器治理持久性實體bean的不足,接著講述了用java實現這個需求的技巧,最后是具體地實現。
  
  2 固定字段假設和CMP實體BEAN類機制
  CMP實體BEAN機制也就是容器治理持久性實體bean機制。CMP實體bean的提供者提供的bean類具有持久性字段(或屬性)的抽象get/set方法。這兩個方法與普通java bean的屬性的get/set方法一樣。下面是一個Personbean實體bean類的name持久性字段的申明。
  
  Class Personbean extends EntityBean {
  Abstract String getName();
  Abstract String setName(String vname);
  String ebjCreate(String name) { setName(name);};
  ------
  }
  部署時,一般部署工具會產生這個類的子類,子類的申明大概如下:
  Class PersonbeanSubClass extends Personbean{
  PRivate:
  String name;
  Public:
  String getName(){ return name;}
  String setName(String vname){name=vname;}
  ------
  }
  
  至于具體的字類實現機制可參見《Mastering Enterprise JavaBeans Second Edition》。容器創建的是子類的實例。通過父子類的比較可知,子類通過一個私有字段和繼續的兩個屬性get/set方法實現了一個實體bean的持久性屬性。部署工具是根據java bean的內省機制生成這個子類的。這樣bean提供者只需規定持久性字段的抽象訪問器函數,其他的持久性實現都有工具輔助完成。但我們必須注重到,為了指定一個持久性字段,提供者必須硬編碼兩個訪問方法。同樣我們注重到為了創建一個實體Bean,我們為ejbCreate方法提供了一個類型為String的參數。這樣的代碼無疑建立在這個實體bean只有一個持久性字段的前提之下。類似假設下的語句還有訪問數據庫時的Statement語句:
  
  Statement st = conn.createStatement();
  St.execuate("insert into person (name) value('John')");
  廣泛使用類似假設的例子還有Struts的視圖-模型數據交換機制中ActionForm和HtmlTag定制標簽處理類的數據交互。我暫且稱這種假設為固定字段假設,基于這個假設的代碼實現機制為CMP實體BEAN類機制,目的在于重視j2ee中的這個特征。
  
  3 不定字段假設和腳本語言類技術
  固定字段假設和CMP實體BEAN類機制硬編碼持久性字段,把字段的名字,個數和類型(本文稱為持久性字段的三屬性)三個中至少一個固定下來了,使得更改持久性字段的工作必然影響源代碼,這就產生了一系列令人討厭的代碼樹。不定字段假設和腳本語言類技術就是要把持久性字段的三屬性和源代碼分開,最終達到客戶可以訂制持久性字段的目的。典型的實現技術有xml,動態編譯技術,元數據技術,字典集合技術等。這些技術有一個共同點就是不固定持久性字段,有一個持久性字段的數據容器和一部分分析代碼。分析代碼解釋數據容器中的持久性字段,最后執行數據庫操作。動態編譯技術是一個過渡技術,它可根據客戶配置,動態生成源代碼,接著及時編譯生成字節代碼,部署到應用中。
  
  3.1 XML
  
  XML是一個非常好的數據交換格式,它具有很好的模式定義(DTD),DTD是XML文檔的元數據,定義了文檔中數據的格式和組成。XML文檔中同時包含了數據名稱(元素名或屬性名)和數據值(元素文本或屬性值)。另外JAVA中有很強的XML文檔分析和使用API,包括JAXP,JAXM等。JAXP集合了基于事件分析的簡單XML編程接口SAX和節點數的DOM分析技術。JAXM則是利用XML進行消息發送接收和消息處理的編程接口。XSLT能很輕易地把XML文檔轉為其他格式的文檔如HTML,JAVA源代碼等。
  
  3.2 動態編譯技術
  
  利用XML表達用戶配置信息,XSLT把這些信息轉換成相應的JAVA源代碼,接著是用java.lang.Compiler類及時編譯產生字接代碼。當然你也可以生成其他的輔助類,sql語句等。具體描述請參照http://www.javaworld.com/javaworld/jw-02-2002/jw-0201-xslt.html
  
  3.3 元數據技術
  
  元數據技術把關于數據的描述放在數據字典中,使用者訪問數據字典可以得到關于數據的信息。數據字典可以放在xml文檔中,也可以在數據庫服務器上。在客戶配置了持久性字段后,開發者訪問數據字典可以得到客戶的當前持久性字段,并生成正確的代碼。
  
  3.4 字典集合技術
  
  java中的哈西表等字典類集合數據結構可以在方法調用之間傳遞變化的持久性字段。平常我們的方法調用是表中有多少字段,填充數據庫的函數一般要接收多少參數,這樣就把持久性字段硬編碼入了源代碼中,持久性字段變化必會造成源代碼的變動。字典集合技術使這樣的函數的接口是固定的。
  
  4 一個簡單任務
  為了應用上面的分析,具體體現如何實現與數據庫表字段松散耦合的j2ee應用,在這里提出一個簡單的任務:做一個采集人員信息的應用程序。
  
  我們粗略分析一下便可得到一個人員類,暫且命名為Person,但字段我們確定不了。采用WAF框架來設計。關于WAF框架可參見http://www-900.ibm.com/developerworks/cn/java/l-j2eeArch/index.shtml
  
  4.1 設計一、字典集合技術和元數據技術
  
  下面設計圖(圖一)表示:客戶發出http請求,容器定位到person.jsp,這個網頁分成服務器部分和客戶端部分,服務器部分為在容器中運行的指令,這些指令會build在客戶瀏覽器上顯示頁面的客戶端部分,客戶端部分聚集(包含)了一個html表單,表單有一個提交按鈕,客戶可以點擊此按鈕發出提交請求。根據WAF的框架流程,我們設計一個personHTMLAction的類來處理用戶的提交請求。下面是這個要害類的設計說明:字段:
  
  Connection conn 保存了從容器連接池中獲取的數據庫連接;
  Hashtable reqHashNamevalue 保存了從用戶提交的表單中提取的名字-值對;
  Hashtable targetHashNameType 保存了從數據庫中獲得的關于數據表persion_table的元數據--字段名-類型對;
  Hashtable finalHashNamevalue保存了最后插入到數據庫中的名字-值對;
  函數或方法:
  Connect getConnect() 從容器的連接池中獲取數據庫連結;
  Hashtable getReqHashNamevalue() 從用戶提交的表單中提取名字-值對;
  Hashtable getTargetHashNameType() 從數據庫中獲得關于數據表persion_table的元數據--字段名-類型對;
  Hashtable getFinalHashNamevalue() 根據targetHashNameType中的字段過濾掉reqHashNamevalue中過多的字段,
  得到最后插入到數據庫中的名字-值對;
  Void insert()根據targetHashNameType中的類型和finalHashNamevalue中的名字-值對構造sql語句,操作數據庫。
  這些函數統一由WAF框架中的這個類的父類HTMLAction的一個函數perform來調用。
  
 如何實現一個與數據庫表字段松耦合的j2ee應用

  圖二表達了這個設計達到的松散耦合效果。第一處在表單和處理類之間,它們間的數據傳遞充分利用了哈西字典類。達到的直接好處是我們可以開發出定制表單的工具讓客戶自己定制應用的輸入界面,客戶可以增加各種輸入元素到表單上卻不會影響后臺的處理類。第二處在處理類和數據庫表格之間,它們間的數據傳遞充分利用了數據庫中的元數據信息,達到的直接好處是我們可以開發出定制數據表的工具讓客戶自己定制數據表的多數字段,客戶可以增加減少或修改字段卻不會影響處理類。
  
  4.2 設計二、xml技術、哈西技術和元數據技術
  
  設計圖(圖三)于圖二不同的是我們在控制層內部加上了JMS技術,用XML作為數據的交換格式。 XMLpersonHTMLAction的類來處理用戶的提交請求,PersonMDB把數據插入到數據庫中去。下面是這兩個要害類的設計說明:
  
  XMLpersonHTMLAction類
  函數或方法:
  String getReqXML() 調用getParameters()獲得客戶的提交數據,產生xml文檔;
  Void sendXML() 生成一個臨時隊列作為消息的反饋隊列,利用JMS API把getReqXML()返回的xml文檔作為JMS的消息體發送出去。
  
  PersonMDB類
  字段:
  Connect conn 保存了從容器連接池中獲取的數據庫連接;
  Hashtable XMLHashNamevalue 保存了從處理類的發送來的消息中提取的名字-值對;
  Hashtable targetHashNameType 保存了從數據庫中獲得的關于數據表persion_table的元數據--字段名-類型對;
  Hashtable finalHashNamevalue保存了最后插入到數據庫中的名字-值對;
  
  函數或方法:
  Connect getConnect() 從容器的連接池中獲取數據庫連結;
  Hashtable getXMLHashNamevalue() 從處理類的發送來的消息中提取名字-值對;
  Hashtabl

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品狼人色视频一区| 色综合天天狠天天透天天伊人| 欧美一级视频一区二区| 国产+人+亚洲| 国产主播在线一区| 国产欧亚日韩视频| 91亚洲精华国产精华| 日韩大胆人体377p| 亚洲美女动态图120秒| 久久久精品2019中文字幕神马| 国产视频精品一区二区三区| 一区三区二区视频| 亚洲一区二区在线| 国产一级揄自揄精品视频| 欧美精品成人91久久久久久久| 91精品啪在线观看麻豆免费| 中文综合在线观看| 黑人狂躁日本妞一区二区三区| 亚洲欧美一区二区三区情侣bbw| 国产精品一区久久| 精品五月天久久| 精品国产一区二区在线| 亚洲人成亚洲人成在线观看| 青青青国产精品一区二区| 日韩精品日韩在线观看| 亚洲国产黄色片| 韩国三级日本三级少妇99| 久久久av一区| 最新国产精品拍自在线播放| 久久91精品国产91久久跳| 91精品视频在线免费观看| 国产成人精品一区二区| 主播福利视频一区| 97视频国产在线| 久久久女人电视剧免费播放下载| 久久久视频在线| 成人午夜激情网| 国产精品免费久久久久久| 久久久999精品视频| 国产精品27p| 97人洗澡人人免费公开视频碰碰碰| 欧美有码在线观看| 欧美国产高跟鞋裸体秀xxxhd| 国产精品日韩精品| 日韩高清a**址| 亚洲精品国偷自产在线99热| 国产亚洲精品高潮| 亚洲综合自拍一区| 国产日本欧美一区二区三区| 亚洲最大福利网| 欧美另类老女人| 在线视频欧美日韩精品| 亚洲97在线观看| 亚洲欧美国产精品va在线观看| 亚洲成人三级在线| 欧美精品一区二区三区国产精品| 国产主播在线一区| 精品视频—区二区三区免费| 国产欧美va欧美va香蕉在线| 亚洲免费视频一区二区| 国产亚洲欧美日韩精品| 最新国产精品拍自在线播放| 国产午夜精品全部视频在线播放| 激情成人中文字幕| 精品视频9999| 在线播放国产一区二区三区| 性日韩欧美在线视频| 91sa在线看| 2025国产精品视频| 久久天天躁狠狠躁夜夜av| 日韩av电影院| 亚洲精品动漫久久久久| 国产97在线播放| 黄色成人av网| 97精品国产97久久久久久免费| 亚洲电影免费在线观看| 欧美日韩免费区域视频在线观看| 岛国av一区二区| 亚洲成人动漫在线播放| 亚洲第一免费播放区| 成人精品久久久| 成人亲热视频网站| 欧美成人免费观看| 久久激情视频久久| 国产精品久久久久免费a∨| 欧美电影免费观看大全| 精品国产依人香蕉在线精品| 久久综合亚洲社区| 91在线免费网站| 亚洲欧美日韩在线高清直播| 亚洲精品国产综合区久久久久久久| 日本19禁啪啪免费观看www| 91精品国产91久久久| 欧美在线激情网| 成人亲热视频网站| 国语自产偷拍精品视频偷| 好吊成人免视频| 伊人一区二区三区久久精品| 欧美第一黄网免费网站| 中文字幕久精品免费视频| 国产精品v日韩精品| 久久久久久国产精品三级玉女聊斋| 亚洲国产精品成人va在线观看| 久久久久久这里只有精品| 热99在线视频| 欧美一级淫片aaaaaaa视频| 日韩中文字幕欧美| 国产精品美女www爽爽爽视频| 性夜试看影院91社区| 国产ts人妖一区二区三区| 欧美日韩国产成人在线| 亚洲人成网站999久久久综合| 欧美精品在线极品| 精品国产乱码久久久久久天美| 91国产美女在线观看| 日韩av手机在线观看| 中文字幕日韩欧美| 中文字幕欧美亚洲| 久久久在线视频| 国产精品久久久久久av下载红粉| 国产成人综合久久| 91精品国产成人www| 九九精品视频在线观看| 亚洲欧美另类在线观看| 久久久视频免费观看| 欧美成人激情在线| 欧美色视频日本高清在线观看| 色悠悠久久久久| 久久久精品免费视频| 97在线看免费观看视频在线观看| 韩剧1988免费观看全集| 国产美女扒开尿口久久久| 欧美久久精品午夜青青大伊人| 国产精品美女久久久免费| 精品久久久久久国产91| 韩国三级电影久久久久久| 久久久久久伊人| 亚洲三级av在线| 精品露脸国产偷人在视频| 国产精品久久久久久亚洲调教| 欧美极品欧美精品欧美视频| 国产剧情日韩欧美| 亚洲欧美日韩精品久久| 国产精品美女久久久免费| 欧美精品999| 久久影院中文字幕| 欧亚精品中文字幕| 亚洲自拍欧美色图| 91精品国产777在线观看| 亚洲精品短视频| 亚洲三级免费看| 中文字幕亚洲一区二区三区五十路| 欧美一级大片视频| 色青青草原桃花久久综合| 日韩成人在线网站| 国产综合久久久久久| 97成人超碰免| 日本精品一区二区三区在线| 日本精品一区二区三区在线播放视频| 国产精品久久久久久久久男| 欧美视频免费在线观看| 91超碰caoporn97人人| 91久久精品美女高潮| 激情懂色av一区av二区av|