版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 第I部分概述第I部分概述第1章JDeveloper概述JDeveloper是一種用于Java編程的集成開發(fā)環(huán)境(IDE)。它為設(shè)計(jì)、開發(fā)、調(diào)試和部署所有類型的3GLJava及組成J2EE(Java2Platform,EnterpriseEdition)戰(zhàn)略的其他相關(guān)文件提供了相當(dāng)豐富的特性。JDeveloper包括很多向?qū)Ш痛a生成器,可以簡化Java的內(nèi)部機(jī)制,使您能夠?qū)⒕性谟肑ava解決業(yè)務(wù)問題上。它還提供了強(qiáng)大的代碼組織與配置管理功能。Oracle9i版的JDeveloper與它的以前版本相比是一個(gè)巨大的飛躍。本章將從整體上介紹JDeveloper,展示其中各種各樣的特性和功能。
2、本章討論JDeveloper的一個(gè)主要特性Java業(yè)務(wù)組件(BusinessComponentsforJava,BC4J),并概述如何用JDeveloper開發(fā)應(yīng)用程序;還提供了一些簡單的動手練習(xí),以便您可以開始生成一些代碼。有關(guān)BC4J的更詳細(xì)信息將在本書的第II部分介紹。第2章講述了JDeveloperIDE本身由哪些組件構(gòu)成。第3章討論如何用IDE構(gòu)建BC4J應(yīng)用程序;對于Java初學(xué)者來說,第4章簡要介紹了一些重要概念,要想更有效地使用JDeveloper,必須理解這些概念。第5章討論了形成一致的命名約定的重要性,對于使用JDeveloper開發(fā)應(yīng)用程序過程中需要用到的各種元素,都給出
3、了如何為其命名的建議。用JDeveloper的調(diào)試特性進(jìn)行調(diào)試的內(nèi)容將在第6章討論。第7章則概要描述了部署Java客戶端(Java應(yīng)用程序和applet)及JSP(JavaServerPages,Java服務(wù)器頁面)應(yīng)用程序的方法。最后,第8章著眼于9i版中的一個(gè)新特性:類建模器(ClassModeler),說明了如何運(yùn)用這個(gè)工具協(xié)助進(jìn)行應(yīng)用程序開發(fā)。本書經(jīng)常會提到創(chuàng)建“應(yīng)用程序”,下面的說明框?qū)椭宄髡咴诒緯惺侨绾问褂眠@個(gè)詞的。什么是應(yīng)用程序在IT業(yè)界,很多人都會用到“應(yīng)用程序”這個(gè)詞。然而,在不同的環(huán)境中它可能代表完全不同的意思。一些人用“應(yīng)用程序”表示整個(gè)計(jì)算機(jī)系統(tǒng),其他人則用
4、這個(gè)詞表示整個(gè)計(jì)算機(jī)系統(tǒng)中的一部分,它在單個(gè)程序中物理地實(shí)現(xiàn)。在本書中,第2種定義將用來表示整個(gè)系統(tǒng)中的一個(gè)邏輯組成部分,通常是在單獨(dú)的JDeveloper工作區(qū)內(nèi)實(shí)現(xiàn)的?!皯?yīng)用程序”一詞還有其他用法,如Java應(yīng)用程序,這是與Java虛擬機(jī)(JVM)起部署在客戶端的一類Java程序,這類程序不需要瀏覽器的介入。本書中的“Java應(yīng)用程序”僅指這類特定的程序。應(yīng)用程序模塊(ApplicationModule)是一種BC4J組件,客戶端程序可以通過它訪問一組視圖對象和視圖鏈接。1.1JDeveloper的過去、現(xiàn)在和未來JDeveloper的起源可追溯到1997年,當(dāng)時(shí)Oracle公司從Borl
5、andInternational獲得了基于Java的開發(fā)工具的許可,將這些開發(fā)工具與Oracle數(shù)據(jù)庫、Internet及傳統(tǒng)客戶/服務(wù)器平臺上的應(yīng)用程序開發(fā)工具集成在一起。當(dāng)時(shí),Borland公司的JBuilder是十分強(qiáng)大的Java開發(fā)工具。Oracle購買了JBuilder的源代碼,開始了其創(chuàng)建Java開發(fā)環(huán)境的歷程。最初的JDeveloper1.0(稱為AppBuilderforJava)于1998年發(fā)布,它與其根基JBuilder非常相似。在1998年末,它被重命名為JDeveloper。這種最初的相似性一直持續(xù)到1999年發(fā)布的2.0版。從這些早期的版本中,可以看出這個(gè)工具是如何在
6、Java環(huán)境中逐漸成熟的。雖然該產(chǎn)品的新版本僅表現(xiàn)出一些表面變化,但在幕后Oracle公司卻在致力于完美地解決Java程序連接到關(guān)系數(shù)據(jù)庫對象的問題。1.1.1過去:產(chǎn)品的歷史與起源JDeveloper1.0和2.0版雖然都是很有用的Java開發(fā)產(chǎn)品,但如果要?jiǎng)?chuàng)建能與Oracle數(shù)據(jù)庫交互的應(yīng)用程序,它們提供的支持就太少了。公平地說,這也是由于當(dāng)時(shí)的技術(shù)水平所限。辛勤的C+和Java程序員例行地?fù)?dān)負(fù)起編寫代碼訪問Oracle數(shù)據(jù)庫的任務(wù)。然而,即便是對于掌握了一定技巧的程序員來說,這種編碼工作也要花費(fèi)大量的精力。因此,早期接受JDeveloper的人主要是這類Java開發(fā)人員,他們想尋求一種方
7、法來創(chuàng)建與Oracle數(shù)據(jù)庫交互的應(yīng)用程序。而那些習(xí)慣于使用易于與數(shù)據(jù)庫交互的產(chǎn)品、以及用FormsDeveloper等工具高效地創(chuàng)建應(yīng)用程序的Oracle專業(yè)人員,并沒有很快接受這一新產(chǎn)品。Oracle公司的項(xiàng)目戰(zhàn)略并沒有使情況變得簡單。除了JDeveloper之外,Oracle公司還有一些產(chǎn)品可以讓開發(fā)人員創(chuàng)建應(yīng)用程序,并部署在Web上:OracleFormsDeveloper(有時(shí)又稱為WebForm)繼續(xù)走向成熟。在9i版中,Web已經(jīng)成為發(fā)布Oracle表單的惟一途徑。該工具基于applet技術(shù),而由于防火墻和性能的問題,這項(xiàng)技術(shù)在很大程度上已經(jīng)被越來越多的Internet應(yīng)用程序開
8、發(fā)團(tuán)體所拋棄。PL/SQLWebToolkit(mod_plsql)起源于早期版本的OracleApplicationServer,OracleDesigner用它生成HTML客戶端代碼。PL/SQLToolkit允許在數(shù)據(jù)庫中編寫可向?yàn)g覽器輸出HTML的PL/SQL。PL/SQLServerPages(PSP)允許在HTML內(nèi)嵌入PL/SQL。PSP以一種類似于JSP的方式充分利用了服務(wù)器頁面的概念。OraclePortal最初被設(shè)計(jì)用來作為專門訪問數(shù)據(jù)庫的簡單工具,在市場上稱為WebDB。慢慢地,Portal演變成一種有用的Web站點(diǎn)開發(fā)工具。1.為什么采用JDeveloper面對所有這些
9、選擇,為什么Oracle公司最終決定選擇JDeveloper作為主要開發(fā)平臺呢?這一決定表明了Oracle公司的長期發(fā)展規(guī)劃。Oracle9iJDeveloper構(gòu)建于J2EE之上。因此,JDeveloper與Oracle歷史上的任何其他產(chǎn)品相比具有更強(qiáng)的基礎(chǔ)。Oracle公司以前的所有產(chǎn)品都不得不在現(xiàn)有技術(shù)、向后兼容性及Oracle內(nèi)部政策之間折衷。JDeveloper基于一種相對較新的技術(shù),其他供應(yīng)商為此技術(shù)提供大量支持,并有經(jīng)過驗(yàn)證的標(biāo)準(zhǔn)做后盾。在JDeveloper從1.0版發(fā)展到9i版的過程中,Oracle公司在產(chǎn)品智能和體系結(jié)構(gòu)基礎(chǔ)方面投入的精力已經(jīng)遠(yuǎn)遠(yuǎn)超過UI組件。甚至對于現(xiàn)在的
10、9i版本來說,產(chǎn)品中的某些部分依然處于雛形階段,主要的焦點(diǎn)都集中于創(chuàng)建一個(gè)能長期發(fā)展的牢固基礎(chǔ)。2.引入Java業(yè)務(wù)組件雖然這種長期的設(shè)計(jì)哲學(xué)從體系結(jié)構(gòu)的觀點(diǎn)來看是正確的,但是傳統(tǒng)的Oracle開發(fā)社區(qū)成員卻會因此感到沮喪,他們經(jīng)常會因?yàn)樵贘Developer中開發(fā)應(yīng)用程序過于低效而感到無耐。直到JDeveloper3.0引入BC4J,Oracle構(gòu)建Java應(yīng)用程序訪問Oracle數(shù)據(jù)庫的方向才變得清晰。BC4J有助于自動實(shí)現(xiàn)大多數(shù)Java代碼與關(guān)系數(shù)據(jù)庫表交互時(shí)所必需的復(fù)雜工作。BC4J是支持Java與數(shù)據(jù)庫交互的架構(gòu)。BC4J向?qū)茏詣由蒍ava應(yīng)用程序與數(shù)據(jù)庫安全交互所需的代碼,解決
11、了以前開發(fā)中遇到的安全性、鎖定及性能問題。BC4J生成的代碼嚴(yán)重依賴于Oracle提供的一個(gè)Java庫。因此,由BC4J向?qū)傻膶?shí)際代碼量是很小的。為了使開發(fā)人員能夠創(chuàng)建包含用戶界面的Java應(yīng)用程序,Oracle提供了直接與BC4J生成的元素相聯(lián)系的可選Swing組件的擴(kuò)展,BC4J已經(jīng)從概念上被證實(shí)是牢固可靠的,能夠處理復(fù)雜的應(yīng)用程序,而基于Sun公司的InfoBus(信息總線)體系結(jié)構(gòu)構(gòu)建的DataAware組件已經(jīng)被證明是有問題的。業(yè)界拋棄了InfoBus體系結(jié)構(gòu)之后,Oracle公司也拋棄了所有InfoBus技術(shù),以利于JDeveloper9i支持Sun公司的模型-視圖-控件器(M
12、odel-View-Controller,簡稱MVC)體系結(jié)構(gòu)(在JDeveloper中實(shí)現(xiàn)為客戶數(shù)據(jù)模型)。本章稍后將更加詳細(xì)地介紹BC4J。同時(shí),本書第II部分將深入討論BC4J的使用和結(jié)構(gòu)?,F(xiàn)在:JDeveloper的現(xiàn)狀目前,JDeveloper中包含了非常穩(wěn)定的Java業(yè)務(wù)組件,并且已經(jīng)解決了9i版存在的許多v.3.2性能問題。MVC體系結(jié)構(gòu)允許開發(fā)人員更有信心地創(chuàng)建訪問Oracle數(shù)據(jù)庫的Java應(yīng)用程序或JSP。Oracle9iJDeveloper提供了一種穩(wěn)固的Java開發(fā)環(huán)境。在Web上搜索有關(guān)JDeveloper的文章就能發(fā)現(xiàn),Java社團(tuán)對JDeveloper有很多積極的
13、評價(jià)。由于有了BC4J層,在編寫與Oracle數(shù)據(jù)庫交互的Java代碼方面,JDeveloper就獨(dú)占鰲頭了。1.創(chuàng)建JSP頁JSP文件生成發(fā)送到客戶端的HTML頁。JSP文件被編譯成servlet,這是一個(gè)純Java程序。盡管大多數(shù)業(yè)務(wù)邏輯都可以用Java編寫,但UI部分通常還是用HTML創(chuàng)建的。JDeveloper作為一種創(chuàng)建JSP頁的Web應(yīng)用程序開發(fā)工具,對于傳統(tǒng)的已經(jīng)習(xí)慣了FormsDeveloper那種一體化產(chǎn)品開發(fā)環(huán)境的Oracle開發(fā)人員來說,并不是一個(gè)完整的解決方案。在本書譯者注:此處指本書的英文原版。編寫之際,JDeveloper對于HTML頁可視化設(shè)計(jì)的支持與Micros
14、oft公司的Frontpage等工具相比,依然十分有限。對代碼高亮顯示、代碼自動補(bǔ)全、結(jié)構(gòu)化顯示及調(diào)試等的支持非常完整,這也就是對JDeveloper中運(yùn)行和調(diào)試JSP代碼所提供的支持。當(dāng)前使用FormsDeveloper和PL/SQL的開發(fā)人員不能簡單地用JDeveloper和Java替代原來的方法來創(chuàng)建部署在Web上的復(fù)雜客戶/服務(wù)器應(yīng)用程序。構(gòu)建具有完整功能的允許用戶安全高效地與數(shù)據(jù)庫交互的Web應(yīng)用程序是一項(xiàng)極為復(fù)雜的任務(wù)。這些內(nèi)容將在第7章中詳細(xì)介紹。2.創(chuàng)建Java應(yīng)用程序部署在客戶/服務(wù)器或者Intranet環(huán)境中的Java應(yīng)用程序的開發(fā)情況,與部署JSP頁的情況有很大的差別,因
15、為JDeveloper對Java應(yīng)用程序的開發(fā)提供完整的支持,包括可視化編輯及在表單風(fēng)格的界面里設(shè)置屬性等。與使用FormsDeveloper等產(chǎn)品相比,使用JDeveloper可以創(chuàng)建同等甚至更復(fù)雜或高級的應(yīng)用程序。然而,用JDeveloper創(chuàng)建應(yīng)用程序的速度無法像用FormsDeveloper一樣快。JDeveloper向?qū)н€不夠成熟,作為一種RAD開發(fā)工具,JDeveloper還不足以與FormsDeveloper有效地競爭。雖然FormsDeveloper是一種真正的4GL,其中對象的屬性都存儲在一個(gè)內(nèi)部資料檔案庫中,而JDeveloper實(shí)際上是一個(gè)代碼生成器與組織器。盡管您可以像
16、在4GL環(huán)境中那樣與JDeveloper向?qū)Ш虸DE交互,但是實(shí)際上是在創(chuàng)建Java代碼。應(yīng)用程序開發(fā)過程經(jīng)常會超出JDeveloper向?qū)У哪芰Γ仨毷謩有薷南驅(qū)傻膶傩?,或是添加向?qū)瓷傻拇a。1.1.3將來:遠(yuǎn)景展望從9i版中可以看出,Oracle公司對JDeveloper寄與了很大的期望,表明這個(gè)版本比以前版本的范圍要廣泛得多。對統(tǒng)一建模語言(UnifiedModelingLanguage,UML)圖表的有限使用、功能完備的軟件配置管理(SCM)資料檔案庫,以及生成數(shù)據(jù)定義語言(DataDefinitionLanguage,DDL)的能力都表明了Oracle公司對這個(gè)產(chǎn)品的長期發(fā)展
17、思路。最終目標(biāo)為所有Oracle系統(tǒng)形成一個(gè)單一的集成開發(fā)環(huán)境。數(shù)據(jù)庫和應(yīng)用程序的設(shè)計(jì)、創(chuàng)建及維護(hù)都可以用一個(gè)產(chǎn)品來處理。也許JDeveloper最終會將其他產(chǎn)品的功能包括進(jìn)來,如OracleDesigner、OracleFormsDeveloper及一些第三方產(chǎn)品(如Quest軟件公司(QuestSoftware)的TOAD或SQLNavigator)。這些目標(biāo)的最終實(shí)現(xiàn)還需要幾年的時(shí)間。當(dāng)Oracle公司將這種期望變成現(xiàn)實(shí)時(shí),Oracle專業(yè)人員將擁有夢寐以求的集成設(shè)計(jì)開發(fā)環(huán)境。短期前景與長期前景JDeveloper的短期和長期發(fā)展前景會如何?在短期內(nèi),Oracle有理由對該產(chǎn)品的核心體系
18、結(jié)構(gòu)感到滿意。目前,他們正致力于改進(jìn)產(chǎn)品的應(yīng)用程序開發(fā)效率。未來JDeveloper的發(fā)展,最終可能實(shí)現(xiàn)改良過的向?qū)?,以幫助將目前開發(fā)應(yīng)用程序所需執(zhí)行的任務(wù)實(shí)現(xiàn)自動化,也有助于縮小JDeveloper和FormsDeveloper之間在開發(fā)企業(yè)內(nèi)部應(yīng)用程序上的差距。第二個(gè)短期改進(jìn)會集中在把JDeveloper作為一種建模和設(shè)計(jì)工具上。當(dāng)前的類建模器反映了Oracle在使用UML設(shè)計(jì)數(shù)據(jù)庫方面的興趣。到2003年底,JDeveloper作為一種數(shù)據(jù)建模工具,將會與Designer形成有效競爭。為了支持軟件開發(fā)周期中更多的內(nèi)容,UML的其他部分也會合并到JDeveloper中。用例(用于描述業(yè)務(wù)需
19、求的UML格式)也將包括進(jìn)來,以便支持分析過程。如前所述,長期目標(biāo)顯然是向一種“一站式”開發(fā)環(huán)境轉(zhuǎn)變。為滿足建立Oracle系統(tǒng)時(shí)遇到的不斷變化的設(shè)計(jì)和開發(fā)任務(wù),新的特性正在系統(tǒng)地、從容不迫地加入到JDeveloper中。1.2Java業(yè)務(wù)組件與其他Java開發(fā)工具相比,JDeveloper的主要優(yōu)勢在于它的Java(BC4J)業(yè)務(wù)組件架構(gòu)及相關(guān)的代碼生成器。BC4J是JDeveloper產(chǎn)品的核心,正是它使建立Java或基于Web的應(yīng)用程序的Oracle開發(fā)人員對JDeveloper情有獨(dú)鐘。BC4J的根基是一種編程協(xié)議或標(biāo)準(zhǔn),它們描述了如何構(gòu)建與關(guān)系數(shù)據(jù)庫交互的類。JDeveloper用B
20、C4J作為處理數(shù)據(jù)庫DML操作(查詢、插入、更新及刪除)的主要方式。在BC4J及類似產(chǎn)品出現(xiàn)之前,將基于Java的應(yīng)用程序連接到數(shù)據(jù)庫是一項(xiàng)異常困難的任務(wù)。為了使Java前端與數(shù)據(jù)庫協(xié)調(diào)工作,必須編寫復(fù)雜的JDBC(JavaDatabaseConnectivity)和/或在Java中嵌入SQL代碼(SQLJ)。除此之外,還必須維護(hù)自己的數(shù)據(jù)緩存,批處理自己的更新,并跟蹤表的鎖定與提交。這種與數(shù)據(jù)庫之間的復(fù)雜接口被證明是創(chuàng)建基于Web應(yīng)用程序的最大障礙。那些嘗試過開發(fā)應(yīng)用程序的組織,如果沒有使用JDeveloper這樣的工具,經(jīng)常會超出預(yù)算,并且開發(fā)出來的應(yīng)用程序也難于維護(hù)。JDeveloper
21、中的BC4J組件提供了到數(shù)據(jù)庫的功能接口,并且可以使用內(nèi)置的代碼生成器或向?qū)順?gòu)造這些組件。本章僅僅從總體上介紹一下BC4J組件。本書的第II部分會深入討論BC4J,該部分及其他幾章中的動手練習(xí)展示了BC4J組件應(yīng)該如何與Swing組件、JSP應(yīng)用程序及其他JDeveloper生成的代碼結(jié)合使用。1.2.1Java與XMLBC4J組件是Java與XML相結(jié)合的產(chǎn)物。XML與Java都是開放源代碼的(非專有的)語言。由于這兩種語言都與操作系統(tǒng)和平臺無關(guān),所以它們可以通過網(wǎng)絡(luò)進(jìn)行很好的交互,也可以跨Web進(jìn)行操作。這兩種語言都具有互為補(bǔ)充的獨(dú)特優(yōu)勢。Java是一種模塊化、可移植的語言,鑒于其內(nèi)在的
22、安全性和支持Internet的能力,它是一種業(yè)務(wù)應(yīng)用程序之間進(jìn)行通信的理想機(jī)制。然而,Java缺乏在不同平臺和應(yīng)用程序之間交換數(shù)據(jù)的有效方法,這一點(diǎn)正是可擴(kuò)展標(biāo)記語言(ExtensibleMarkupLanguage,XML)的長處。XML是一種與HTML類似的標(biāo)簽或標(biāo)記語言;不過XML的標(biāo)記功能更加強(qiáng)大,因?yàn)榭梢詫λ幕緲?biāo)記進(jìn)行擴(kuò)展,以滿足不斷發(fā)展的需要。HTML用標(biāo)記來描述希望的顯示方式;而XML創(chuàng)建標(biāo)記的目的是用來描述文本或數(shù)據(jù)的結(jié)構(gòu)和內(nèi)容。應(yīng)該注意到,XML和Java一樣,是區(qū)分大小寫的語言。XML用于定義數(shù)據(jù),而Java用于對數(shù)據(jù)進(jìn)行操作。您將會發(fā)現(xiàn),BC4J組件包含了與之相關(guān)聯(lián)的
23、XML和Java文件。XML文件存放了定義該業(yè)務(wù)組件的元數(shù)據(jù),而Java文件存放了實(shí)現(xiàn)業(yè)務(wù)組件的方法。Java文件中包括了get()和set()方法,可以在運(yùn)行時(shí)動態(tài)生成插入、更新和刪除語句。而且,XML和Java文件中不但可以包含數(shù)據(jù)庫表引用,還可以包含更多信息。它們也可以定義和實(shí)現(xiàn)驗(yàn)證規(guī)則。BC4J結(jié)構(gòu)BC4J是JDeveloper中一種結(jié)構(gòu)很好的、經(jīng)過仔細(xì)設(shè)計(jì)的組件。由于BC4J向?qū)H提供了修改底層Java類和XML文檔的簡單機(jī)制,所以只有高級JDeveloper用戶才知道底層結(jié)構(gòu)的細(xì)節(jié)。從開發(fā)人員的角度看,您只需使用BC4J邏輯對象概念考慮問題。只有在需要編寫超出向?qū)幚砟芰Φ膹?fù)雜驗(yàn)證
24、或編碼功能時(shí),才會操作Java類。BC4J組件可以從概念上將應(yīng)用程序分為兩個(gè)主要部分,如圖1-1所示。用戶界面和客戶端邏輯數(shù)據(jù)庫接口和業(yè)務(wù)邏輯使用這種面向?qū)ο蟮募軜?gòu)可以幫助您創(chuàng)建可重用的業(yè)務(wù)組件,在數(shù)據(jù)庫和用戶界面(UserInterface,UI)之間實(shí)現(xiàn)有效的通信。BC4J向?qū)ёx取Oracle系統(tǒng)視圖,獲取代表數(shù)據(jù)庫結(jié)構(gòu)的元數(shù)據(jù)。使用這個(gè)元數(shù)據(jù),向?qū)Э梢陨蒟ML和Java代碼,從而提供一個(gè)可以定制的架構(gòu),您可以向該架構(gòu)添加數(shù)據(jù)驗(yàn)證器以及其他業(yè)務(wù)邏輯。BC4J組件提供了很多好處。首先,使用這些組件可以更容易實(shí)現(xiàn)簡單性和組織性。在應(yīng)用程序中包含一個(gè)BC4J項(xiàng)目,意味著您可以根據(jù)BC4J組件的
25、部署位置,來優(yōu)化代碼的整體性能和可重用性。其次,可以將數(shù)據(jù)驗(yàn)證這類共享代碼移到BC4J層,這樣就改善了代碼的可維護(hù)性。再次,BC4J類可以部署在數(shù)據(jù)庫服務(wù)器、應(yīng)用程序服務(wù)器或本地客戶端。對于那些對驗(yàn)證需求強(qiáng)烈的應(yīng)用程序而言,這種可移植性將會使它們獲的重大的性能改進(jìn)。BC4J使Java應(yīng)用程序能夠容易地與關(guān)系數(shù)據(jù)庫通信。通過與BC4J向?qū)Ы换?,您可以生成XML文件和Java類。應(yīng)用程序開發(fā)人員隨后可以編寫Java代碼,與BC4J生成的處理與數(shù)據(jù)通信的類進(jìn)行交互。生成的這些類能夠正常工作,這是因?yàn)镺racle提供的Java類庫中包含了所有復(fù)雜的數(shù)據(jù)庫交互例程。在BC4J出現(xiàn)之前,編寫Java應(yīng)用程
26、序來與關(guān)系數(shù)據(jù)庫通信是一項(xiàng)異常復(fù)雜的任務(wù),超出了大多數(shù)開發(fā)人員的技能水平。少數(shù)勇敢的先鋒曾嘗試自己完成這項(xiàng)任務(wù),現(xiàn)在,該任務(wù)變得如此簡單,他們會十分高興的。BC4J組件BC4J組件分為3個(gè)主要部分:數(shù)據(jù)定義和驗(yàn)證組件、數(shù)據(jù)操作和過濾組件以及存儲位置和容器。對于熟悉數(shù)據(jù)建模的讀者來說,圖1-2有助于您理解與每個(gè)BC4J組件關(guān)聯(lián)的關(guān)系和基數(shù)(cardinality)o如果對UML建模不熟悉,可以簡單地將這些圖看作表示BC4J層中總體關(guān)系的框 #第I部分概述第1章JDeveloper概述 #第1章JDeveloper概述 圖(附錄C會介紹這種UML圖中使用的符號)。這個(gè)信息有助于可視化這些組件如何彼
27、此相關(guān),以及它們?nèi)绾伪唤M織為組。應(yīng)用程序模塊*視圖鏈接*關(guān)聯(lián)* #第I部分概述第1章JDeveloper概述 #第1章JDeveloper概述 # #第I部分概述第1章JDeveloper概述 #第1章JDeveloper概述 #實(shí)體對象圖1-2* #第I部分概述第1章JDeveloper概述 #第1章JDeveloper概述 # 第I部分概述第1章JDeveloper概述 第1章JDeveloper概述 #數(shù)據(jù)定義和驗(yàn)證組件下面介紹數(shù)據(jù)定義和驗(yàn)證用到的組件:實(shí)體對象(EntityObject)實(shí)體對象基于數(shù)據(jù)庫表、視圖、圖或同義詞,并且包括數(shù)據(jù)庫存儲需求。實(shí)體對象可以從已有的數(shù)據(jù)庫對象生成,
28、也可以手工定義,并以此創(chuàng)建新的數(shù)據(jù)庫表。實(shí)體對象包含屬性(列)定義。屬性(Attribute)屬性有兩類:實(shí)體屬性和視圖屬性。實(shí)體屬性是實(shí)體對象的一部分,通常對應(yīng)于表的列,可能包含驗(yàn)證規(guī)則和業(yè)務(wù)邏輯。有些屬性不能查詢,如BLOB類型,應(yīng)該在實(shí)體對象向?qū)?EntityObjectWizard)中取消選中Queriable復(fù)選框。視圖屬性不過是實(shí)體屬性的一種??梢詾橛?jì)算列(calculatedcolumns)等項(xiàng)創(chuàng)建額外的視圖屬性。關(guān)聯(lián)(Association)關(guān)聯(lián)定義了一對實(shí)體對象之間的關(guān)系。典型的關(guān)聯(lián)表示數(shù)據(jù)庫中的外鍵約束,但是在任意一對實(shí)體對象屬性組件之間都可以定義關(guān)聯(lián)。還可以在關(guān)聯(lián)的每一端
29、指定多個(gè)屬性,只要雙方都有同樣數(shù)目的屬性即可。關(guān)聯(lián)是雙向的。域(Domain)域是用戶自定義類型,表示一個(gè)屬性可以具有的值的類型。例如,您可以創(chuàng)建一個(gè)域,以保證輸入的社會保險(xiǎn)號確實(shí)是9位數(shù)字。當(dāng)您為該組件編寫驗(yàn)證邏輯時(shí),必須將邏輯放入一個(gè)名為validate()的方法中,這個(gè)方法會被該域的Java文件的構(gòu)造函數(shù)調(diào)用。每次用這個(gè)域?qū)嵗粋€(gè)新對象時(shí),構(gòu)造函數(shù)就會調(diào)用validate()方法,以確保新增加的屬性滿足您定義的準(zhǔn)則。特性(Property)在BC4J組件的概念中,特性是一個(gè)字符串類型的名/值對。特性用于存儲字符串文本。這些文本串可以在運(yùn)行時(shí)顯示信息,例如,定義某個(gè)用戶的訪問等級,指定使
30、用哪一種類型的UI控件,以及設(shè)置域的格式掩碼。您可以為域、實(shí)體對象、視圖對象、實(shí)體屬性、視圖屬性及應(yīng)用程序模塊定義特性。BC4J特性存儲在相關(guān)聯(lián)的組件的XML文件中。數(shù)據(jù)操作或過濾組件視圖對象和視圖鏈接通過對實(shí)體對象定義的數(shù)據(jù)進(jìn)行過濾,提供適當(dāng)?shù)臄?shù)據(jù)來支持UI。視圖對象(ViewObject)。視圖對象用SQL查詢對實(shí)體對象所定義的數(shù)據(jù)進(jìn)行指定和過濾。客戶端應(yīng)用程序通過視圖對象的get()和set()方法可以實(shí)現(xiàn)導(dǎo)航、更新、插入和刪除數(shù)據(jù)的操作。視圖鏈接(ViewLink)。視圖鏈接用于表示視圖對象之間的關(guān)系。這些關(guān)系僅僅在一個(gè)方向上實(shí)現(xiàn)。因此,在一個(gè)主從關(guān)系(主對象是源,從對象是目標(biāo))中,只
31、有源對象定義了get/set的訪問方法。對于主表中當(dāng)前選中的行,視圖鏈接為詳細(xì)表提供過濾后的行。視圖鏈接將視圖對象鏈接起來的方式與關(guān)聯(lián)鏈接實(shí)體對象的方式相同。不過,在視圖鏈接和關(guān)聯(lián)之間沒有程序性的聯(lián)系。關(guān)聯(lián)可以用于生成視圖鏈接,視圖鏈接也可以獨(dú)立于關(guān)聯(lián)創(chuàng)建。存儲位置和容器BC4J層中用來放置元素的位置/容器有兩種:包(package)oJava類是通過包中的目錄來分組的。在開發(fā)期間,這些包等價(jià)于存儲源代碼的硬盤上的子目錄或文件夾。應(yīng)用程序模塊(applicationmodule)。應(yīng)用程序模塊定義了BC4J視圖對象和視圖鏈接,客戶端應(yīng)用程序?qū)⑴c這些組件進(jìn)行交互。在同一個(gè)BC4J層中可能有多個(gè)應(yīng)
32、用程序模塊。也可以在一個(gè)應(yīng)用程序模塊中嵌入其他應(yīng)用程序模塊。您也許會想在一個(gè)特定的應(yīng)用程序屏幕或任務(wù)中用多個(gè)應(yīng)用程序模塊實(shí)現(xiàn)業(yè)務(wù)邏輯,為每一部分邏輯提供它自己的模塊。典型的情況是,一個(gè)應(yīng)用程序模塊中可能包含34個(gè)視圖對象和鏈接,甚至可能更多。一個(gè)大的應(yīng)用程序可能包含20個(gè)或更多的應(yīng)用程序模塊,其中每個(gè)模塊都包含與給定任務(wù)對應(yīng)的適當(dāng)視圖對象和視圖鏈接。1.2.4BC4J邏輯體系結(jié)構(gòu)從邏輯上講,用BC4J創(chuàng)建的對象可分為兩類:數(shù)據(jù)庫接口對象與應(yīng)用程序端對象。在數(shù)據(jù)庫端,BC4J包括了實(shí)體對象和關(guān)聯(lián)。應(yīng)用程序端對象則包括視圖對象、視圖鏈接及應(yīng)用程序模塊。實(shí)體對象及關(guān)聯(lián)實(shí)體對象及關(guān)聯(lián)多多少少都和表及外
33、鍵約束相對應(yīng)。不過,并不是必須像構(gòu)造表那樣來構(gòu)造實(shí)體對象。如果是初次使用BC4J,可以創(chuàng)建只是表的映像的默認(rèn)實(shí)體對象。默認(rèn)關(guān)聯(lián)將根據(jù)數(shù)據(jù)庫中的外鍵約束來生成,以便您最終就可以在BC4J層得到數(shù)據(jù)庫的精確映像。不過,實(shí)體對象并不一定非要構(gòu)造得像底層數(shù)據(jù)庫表。這兩者可以在以下方面有所區(qū)別:您可以定義實(shí)體對象,但并不一定表示表中的全部字段。如果開發(fā)人員永遠(yuǎn)不會使用CREATED_DATE、CREATED_BY、MODIFIED_DATA及MODIFIED_BY等字段,就沒有理由在應(yīng)用程序中理會這些字段。而且,如果數(shù)據(jù)庫中存在非常寬(字段很多)的表,那么在BC4J層中包含所有這些字段將會使實(shí)體對象變得
34、很難操作。有些字段可以在實(shí)體對象中存在,但不在數(shù)據(jù)庫中存在。例如,在交易清單明細(xì)中用TOTAL字段表示數(shù)量和價(jià)格的乘積;或者顯示與表相關(guān)聯(lián)的函數(shù),例如,為了顯示的方便,在EMP表中將名和姓連接在一起作為顯示名稱。這使開發(fā)人員在想顯示特定的雇員記錄時(shí)只要訪問屬性即可,不用每一名開發(fā)人員都去決定顯示記錄時(shí)該用哪一個(gè)字段。您可以定義更新不同數(shù)據(jù)庫字段的實(shí)體屬性。這可以簡單到將一個(gè)現(xiàn)有的字段重命名這可以使數(shù)據(jù)庫更清晰或更混亂,也可以用來簡化開發(fā)環(huán)境。例如,“生日”和“年齡”等BC4J實(shí)體屬性可以結(jié)合使用,以填充物理數(shù)據(jù)庫中的“出生日期”字段。您可以在實(shí)體對象中執(zhí)行額外的驗(yàn)證操作。為了實(shí)現(xiàn)這一點(diǎn),可以將
35、業(yè)務(wù)邏輯從關(guān)系數(shù)據(jù)庫復(fù)制到BC4J層中,以支持CHECK約束或基于觸發(fā)器的驗(yàn)證。甚至可以在BC4J層中添加額外的驗(yàn)證,但使用的時(shí)候要多加小心。如果任何驗(yàn)證規(guī)則僅存在于實(shí)體對象中,而不存在于數(shù)據(jù)庫中,那么只要應(yīng)用程序繞過了BC4J層,就可以繞過其中包含的任何驗(yàn)證。定義的實(shí)體對象的行為可以與具有INSTEADOF觸發(fā)器的視圖類似??梢岳@過標(biāo)準(zhǔn)的INSERT、UPDATE以及DELETE邏輯,轉(zhuǎn)而執(zhí)行所期望的代碼。不過,對于這類BC4J視圖對象,也得同樣小心:直接訪問表的應(yīng)用程序?qū)@過數(shù)據(jù)庫視圖中的觸發(fā)器代碼。實(shí)體對象不必一定與某個(gè)表關(guān)聯(lián)。實(shí)體對象可以是完全由人工構(gòu)造,從開發(fā)人員角度看,實(shí)體對象就
36、像一個(gè)表,但是與之交互的可以是替代數(shù)據(jù)源、普通文件或者與應(yīng)用程序完全處于同一位置的Java代碼。正如實(shí)體對象通常是根據(jù)關(guān)系數(shù)據(jù)庫中的表生成那樣,關(guān)聯(lián)通常根據(jù)外鍵約束生成。然而,BC4J中的關(guān)聯(lián)可以與數(shù)據(jù)庫中的參照完整性約束不同。您可以將關(guān)聯(lián)的基數(shù)改為與在數(shù)據(jù)庫中的不同,不過請記住,即便是BC4J層接納了數(shù)據(jù),BC4J規(guī)則也永遠(yuǎn)不能削弱底層數(shù)據(jù)庫的規(guī)則;只能增強(qiáng)這些規(guī)則。您也可以創(chuàng)建在數(shù)據(jù)庫中不存在底層外鍵約束的BC4J關(guān)聯(lián)。2.抽象層實(shí)體對象與關(guān)聯(lián)就是開發(fā)人員對物理數(shù)據(jù)庫的看法。如前所述,這種理解可能和實(shí)際的物理數(shù)據(jù)庫不同。因此,實(shí)體對象是開發(fā)人員和數(shù)據(jù)庫之間的一個(gè)抽象層。抽象層還存在一些細(xì)微
37、的局限性。實(shí)體對象永遠(yuǎn)也不能直接指向多個(gè)表或視圖。這并不是說實(shí)體對象不能與數(shù)據(jù)庫中的多個(gè)表或者視圖進(jìn)行交互。如前所述,這實(shí)際上可以用兩種不同的方式實(shí)現(xiàn):可以覆蓋某個(gè)實(shí)體對象默認(rèn)的INSERT、UPDATE和DELETE行為,讓它完成更復(fù)雜的事情??梢允褂冒琁NSTEADOF觸發(fā)器的數(shù)據(jù)庫視圖。這種策略允許能查詢?nèi)我鈹?shù)目表的復(fù)雜視圖,并用INSTEADOF插入、更新和刪除觸發(fā)器,實(shí)現(xiàn)任何需要的行為。使用實(shí)體對象及關(guān)聯(lián),Oracle已經(jīng)有效地再現(xiàn)了常有INSTEADOF觸發(fā)器的數(shù)據(jù)庫視圖所提供的能力。您冒著風(fēng)險(xiǎn)把代碼放到可能被繞過的地方,而沒有把代碼放在數(shù)據(jù)庫中;如果把代碼放在數(shù)據(jù)庫中,那么在不
38、同的平臺和工具下無需重寫代碼就可以實(shí)現(xiàn)重用。而且,作為設(shè)計(jì)人員,如果選擇BC4J作為放置業(yè)務(wù)邏輯的地方,就是在染指產(chǎn)品的體系結(jié)構(gòu)。那么為什么還會有人不想把實(shí)體對象做成底層表或者視圖的精確映像呢?這樣做的原因如下:改善性能。您可以選擇BC4J層作為放置驗(yàn)證規(guī)則的地方,這樣可以改善性能。對于有些應(yīng)用程序,在數(shù)據(jù)庫層實(shí)現(xiàn)代碼要求在網(wǎng)絡(luò)上傳輸消息,而在業(yè)務(wù)邏輯層實(shí)現(xiàn)則可能極大地提高性能。支持超負(fù)荷的表。可以將多個(gè)實(shí)體對象指向同一張表。這使開發(fā)人員可以支持包含超負(fù)荷表的抽象數(shù)據(jù)模型。例如,如果用典型的單表方式實(shí)現(xiàn)雇員超類,它包含薪水工及小時(shí)工兩個(gè)子類,會得到一個(gè)單一的雇員表,其中包含一個(gè)類型字段。按小時(shí)
39、計(jì)酬的雇員和領(lǐng)薪水的雇員都保存在一張表里。在BC4J中,可以為領(lǐng)薪水的雇員和按小時(shí)計(jì)酬的雇員創(chuàng)建相互獨(dú)立的實(shí)體對象,其中每種對象的屬性都指向相應(yīng)的字段。然而,數(shù)據(jù)庫中的視圖可以簡單地完成同樣的功能。實(shí)體對象層仍然是在數(shù)據(jù)庫之上的另外一層抽象。但是,應(yīng)用程序并不與這一層直接進(jìn)行交互。在實(shí)體對象和關(guān)聯(lián)之上還存在一個(gè)抽象層,稱為視圖對象和視圖鏈接。3.視圖對象與視圖鏈接視圖對象和視圖鏈接可能分別對應(yīng)于實(shí)體對象和關(guān)聯(lián)。但視圖對象能實(shí)現(xiàn)更多功能。當(dāng)您運(yùn)行BC4J向?qū)Р⒔邮苣J(rèn)設(shè)置時(shí),在視圖對象與實(shí)體對象,以及視圖鏈接與關(guān)聯(lián)之間存在一對一的對應(yīng)關(guān)系。然而,正如實(shí)體對象和關(guān)聯(lián)不必與表和外鍵約束完全相同一樣,
40、視圖對象和視圖鏈接也不必完全對應(yīng)于實(shí)體對象和約束。實(shí)際上,視圖對象與實(shí)體對象之間連接的緊密程度甚至比實(shí)體對象與表之間的緊密程度還要低。視圖對象的主要特征是:它們正是支持應(yīng)用程序所需要的數(shù)據(jù)。視圖對象是用于訪問關(guān)系表的一個(gè)簡單查詢。視圖對象與實(shí)體對象之間的關(guān)系可以是多對多的。視圖鏈接是指視圖對象之間的關(guān)系。還可以使用視圖對象的結(jié)構(gòu)直接與表或其他數(shù)據(jù)結(jié)構(gòu)進(jìn)行交互,而不是使用實(shí)體對象。只要代碼的行為合理,視圖對象并不必一定與外部數(shù)據(jù)容器交互。實(shí)體對象所的所有靈活性都可以同樣適用于視圖對象。您可以顯示屬性、計(jì)算屬性等,還可以在視圖對象中放置驗(yàn)證邏輯;然而,驗(yàn)證邏輯通常應(yīng)該放在數(shù)據(jù)庫和/或?qū)嶓w對象中,因
41、為那些位置更加集中。您也會考慮在視圖對象中加入驗(yàn)證邏輯,以便強(qiáng)制實(shí)現(xiàn)特定應(yīng)用程序的驗(yàn)證規(guī)則。應(yīng)用程序模塊視圖對象和視圖鏈接都用于名為應(yīng)用程序模塊的集合中。為了支持主從式(master-detail)譯者注:有些地方稱為主細(xì)表關(guān)系,本書中統(tǒng)一稱為主從表關(guān)系。的應(yīng)用程序,您必須在創(chuàng)建應(yīng)用程序模塊之前設(shè)置主從視圖鏈接。應(yīng)用程序模塊還包含了訪問數(shù)據(jù)時(shí)需要用到的數(shù)據(jù)庫連接定義。1.2.5使用BC4J當(dāng)您創(chuàng)建特定應(yīng)用程序的BC4J時(shí),就是在建立一組Java類,其中包裝了DML命令和存儲數(shù)據(jù)結(jié)構(gòu)定義的XML文檔的引用。這些Java類擴(kuò)展了基本的BC4J類庫,向數(shù)據(jù)庫發(fā)出JDBC調(diào)用,接管所有的插入、更新、刪
42、除和加鎖功能請求,以使應(yīng)用程序運(yùn)行。這使您能夠?qū)⑴c數(shù)據(jù)庫訪問有關(guān)的邏輯完全封裝起來。它為開發(fā)人員提供了一種開發(fā)應(yīng)用程序的簡單方式,像OracleFormsDeveloper那樣在表之上搭建模塊。然而,BC4J的功能遠(yuǎn)遠(yuǎn)不止于此。復(fù)雜的驗(yàn)證通常是在數(shù)據(jù)庫中實(shí)現(xiàn)的,比如在表或者視圖上創(chuàng)建INSTEADOF觸發(fā)器。INSTEADOF觸發(fā)器視圖是一種Oracle視圖,它使用用戶提供的觸發(fā)器代替默認(rèn)的插入、更新和刪除行為。在BC4J類中也可以實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)驗(yàn)證。除了這個(gè)額外的選項(xiàng)之外,還是很難制定出準(zhǔn)則,告訴人們什么情況下把數(shù)據(jù)驗(yàn)證邏輯放在數(shù)據(jù)庫中,什么情況下又該把驗(yàn)證邏輯放在BC4J組件中。在一個(gè)非純
43、Java的環(huán)境中,將驗(yàn)證邏輯放在BC4J組件中可能會很危險(xiǎn)。一些應(yīng)用程序會通過BC4J訪問驗(yàn)證,而另一些在其他產(chǎn)品中編寫的應(yīng)用程序可能無法通過BC4J訪問驗(yàn)證邏輯。如果您正在工作的環(huán)境是完全基于Java的,那么用JDeveloper創(chuàng)建和操作BC4J組件就會十分簡單,您完全可以選擇用BC4J實(shí)現(xiàn)服務(wù)器端的驗(yàn)證,因?yàn)闇p少開發(fā)時(shí)間就意味著降低成本。然而,只有保證所有涉及數(shù)據(jù)更改的DML操作都使用BC4J組件,才能說這種操作是合適的。BC4J類還能夠緩存數(shù)據(jù),供多個(gè)用戶共享,由于這樣做不用再訪問數(shù)據(jù)庫,因此會提高性能。1.2.6使用BC4J的方法使用Oracle9iJDeveloper和J2EE,就
44、可以使用多種方法建立應(yīng)用程序?,F(xiàn)在,系統(tǒng)業(yè)務(wù)規(guī)則可以在以下的任何地方駐留:核心數(shù)據(jù)庫過程和觸發(fā)器帶INSTEADOF觸發(fā)器的數(shù)據(jù)庫視圖BC4J實(shí)體對象及關(guān)聯(lián)BC4J視圖對象及視圖鏈接應(yīng)用程序邏輯如何在應(yīng)用程序中使用BC4J可以有多種思路。業(yè)務(wù)規(guī)則不應(yīng)該放在應(yīng)用程序邏輯或視圖對象中。之所以在此處給出這兩項(xiàng),是因?yàn)闃I(yè)務(wù)邏輯的確可以在這些地方駐留。有人聲稱所有的業(yè)務(wù)邏輯都應(yīng)該放在數(shù)據(jù)庫中,應(yīng)用程序根據(jù)需要使用其中的一個(gè)子集。又有人說實(shí)際上所有的業(yè)務(wù)邏輯都應(yīng)該存儲在BC4J層,這樣數(shù)據(jù)庫就只是作為一個(gè)永久存儲類中數(shù)據(jù)副本的地方。每一種策略的擁護(hù)者都以極大的韌性堅(jiān)持著自己的開發(fā)風(fēng)格。本節(jié)將討論這兩種方法
45、的優(yōu)缺點(diǎn)。要記住,這些方法都依賴于JDeveloper對它們的支持能力。由于JDeveloper的功能在不斷擴(kuò)展和進(jìn)化,因此這些優(yōu)缺點(diǎn)也可能發(fā)生轉(zhuǎn)變,現(xiàn)在幾乎無法實(shí)現(xiàn)的方法在將來發(fā)布的版本中也許會變得更加可行。以數(shù)據(jù)庫為中心的方法以數(shù)據(jù)庫為中心的方法假設(shè)您一開始就具有一個(gè)功能完整的Oracle數(shù)據(jù)庫。當(dāng)進(jìn)行應(yīng)用程序的邏輯設(shè)計(jì)時(shí),很明顯,如果將數(shù)據(jù)庫視圖和用戶界面元素對應(yīng)起來實(shí)現(xiàn)會更加簡單。創(chuàng)建這些視圖時(shí)應(yīng)該使用INSTEADOF觸發(fā)器,這樣就可以支持插入、更新和刪除功能。視圖對象中顯示的所有字段都是數(shù)據(jù)庫視圖中的列。對于每一個(gè)程序來說,都要?jiǎng)?chuàng)建一個(gè)小BC4J項(xiàng)目,其中包含實(shí)體對象和關(guān)聯(lián),它們與
46、創(chuàng)建程序必需的表、視圖、外鍵約束之間存在一對一關(guān)系。接下來,要為每一個(gè)實(shí)體對象和關(guān)聯(lián)創(chuàng)建默認(rèn)的視圖對象和視圖鏈接。然后將這些組裝成一個(gè)應(yīng)用程序模塊,用來支持前端程序。因?yàn)樗械臉I(yè)務(wù)邏輯都在數(shù)據(jù)庫內(nèi)部驗(yàn)證,所以只有需要增強(qiáng)性能時(shí)才會把驗(yàn)證邏輯加進(jìn)實(shí)體對象中。很少會發(fā)生向?qū)嶓w對象或視圖對象中添加額外屬性的情況,這是由于這些屬性已經(jīng)包含在數(shù)據(jù)庫中的基礎(chǔ)視圖里面了。每個(gè)程序都有自己的BC4J項(xiàng)目。BC4J項(xiàng)目不會被其他程序共享。應(yīng)用程序模塊相對較小,其作用范圍與OracleFormsDeveloper文件差不多,可能稍有區(qū)別。以數(shù)據(jù)庫為中心方法的優(yōu)點(diǎn)用以數(shù)據(jù)庫為中心的方法構(gòu)建應(yīng)用程序具有如下優(yōu)點(diǎn):這種
47、方法對于現(xiàn)有的Oracle開發(fā)人員來說是感覺最舒服的。它基本上使用相同的邏輯為Oracle數(shù)據(jù)庫創(chuàng)建前端程序。這種系統(tǒng)不會緊密依賴于單一的產(chǎn)品(BC4J)。大部分非UI代碼都位于數(shù)據(jù)庫中。例如,由于所有的業(yè)務(wù)規(guī)則都放在數(shù)據(jù)庫中,所以不訪問BC4J層的程序也會使用數(shù)據(jù)庫中的代碼。BC4J上幾乎所有的工作都可以通過JDeveloper向?qū)硗瓿?。需要手工編程的工作幾乎沒有。應(yīng)用程序模塊的BC4J項(xiàng)目只需花幾個(gè)小時(shí)甚至更少時(shí)間就可以完成,因?yàn)槟恍铻槊恳粋€(gè)數(shù)據(jù)庫視圖給出一個(gè)默認(rèn)的實(shí)體對象定義即可。以數(shù)據(jù)庫為中心方法的缺點(diǎn)下面是用以數(shù)據(jù)庫為中心的方法構(gòu)建應(yīng)用程序的一些缺點(diǎn):這種方法忽視了BC4J提供的
48、所有功能和靈活性。有了實(shí)體對象和視圖對象,在該開發(fā)策略中未使用的數(shù)據(jù)庫頂端就有了兩個(gè)新的抽象層,而這種方法沒有利用這兩層。這種方法不支持BC4J的重用。BC4J體系結(jié)構(gòu)的一個(gè)關(guān)鍵要素就是建立與重用BC4J項(xiàng)目的能力。沒有充分利用BC4J緩沖的優(yōu)勢。這也是BC4J的主要優(yōu)勢之一,因?yàn)樗梢詫?shù)據(jù)庫的活動卸載到其他地方,以節(jié)省數(shù)據(jù)庫服務(wù)器的CPU周期,完成主要目標(biāo):管理數(shù)據(jù)。這樣減少了網(wǎng)絡(luò)上的消息數(shù)目,如果所請求的數(shù)據(jù)已經(jīng)提供過了,那么對數(shù)據(jù)庫活動的需求也會減少。沒有利用BC4J對于Web層和業(yè)務(wù)層服務(wù)器的支持。BC4J支持J2EE的概念:認(rèn)為將一部分應(yīng)用程序代碼分離到另外一臺服務(wù)器上是有好處的。
49、如果要求數(shù)據(jù)庫處理應(yīng)用程序的代碼,那么為了處理復(fù)雜的業(yè)務(wù)邏輯,數(shù)據(jù)庫完成其主要目標(biāo)的效率必然會打折扣。應(yīng)用程序嚴(yán)重依賴于OracleDBMS中帶INSTEADOF觸發(fā)器的視圖。除非其他數(shù)據(jù)庫也提供與帶INSTEADOF觸發(fā)器的視圖類似的結(jié)構(gòu),否則就無法用這種方法創(chuàng)建跨數(shù)據(jù)庫的應(yīng)用程序。需要有才干的PL/SQL開發(fā)人員。如果您公司的主要開發(fā)環(huán)境是Java,那么這種方法簡直毫無意義。業(yè)務(wù)邏輯層方法業(yè)務(wù)邏輯層方法一開始也假設(shè)您有一個(gè)功能完備的Oracle數(shù)據(jù)庫。這種方法與前一種方法的主要區(qū)別在于,業(yè)務(wù)邏輯包含在位于數(shù)據(jù)庫之外的Java類文件中。在極端情況下,這種方法意味著只需創(chuàng)建一個(gè)BC4J包(其中
50、包含實(shí)體對象與關(guān)聯(lián))來支持整個(gè)企業(yè)的數(shù)據(jù)模型。對數(shù)據(jù)庫中的每一張表,都創(chuàng)建一個(gè)實(shí)體對象。然后,我們就可以根據(jù)程序需要的結(jié)構(gòu),創(chuàng)建單獨(dú)的項(xiàng)目,其中包含視圖對象、視圖鏈接和應(yīng)用程序模塊。接著,為每一個(gè)程序構(gòu)建一個(gè)BC4J應(yīng)用程序模塊。這樣就將業(yè)務(wù)規(guī)則添加到實(shí)體對象中,為了增強(qiáng)健壯性,也可以在數(shù)據(jù)庫中重復(fù)定義業(yè)務(wù)規(guī)則。在一個(gè)大規(guī)模的企業(yè)級數(shù)據(jù)模型中,可能要將根據(jù)數(shù)據(jù)庫創(chuàng)建的實(shí)體對象和關(guān)聯(lián)劃分成更小的子集,以使在設(shè)計(jì)時(shí)處理起來更容易。例如,一個(gè)有300張表的系統(tǒng)對應(yīng)著300個(gè)實(shí)體對象,那么可以將其劃分成大約10個(gè)應(yīng)用程序模塊,大概每30張表為一個(gè)應(yīng)用程序模塊。如果一組表之間有很多關(guān)系,這些表就應(yīng)該放在
51、同一個(gè)包內(nèi),然后用關(guān)聯(lián)表示這些關(guān)系??绨年P(guān)系應(yīng)該用同一包內(nèi)的關(guān)聯(lián)表示為視圖對象、視圖鏈接及使用它們的應(yīng)用程序模塊。然后這個(gè)實(shí)體項(xiàng)目就可以共享了。如前所述,視圖對象不僅僅是實(shí)體對象的默認(rèn)映像,它通常會從多個(gè)實(shí)體對象中同步地搜集信息。實(shí)際上,視圖對象根本不必基于實(shí)體對象,而是可以直接將數(shù)據(jù)庫的數(shù)據(jù)緩存在自身中。更多相關(guān)信息請參看第13章。一個(gè)實(shí)體對象和關(guān)聯(lián)可以被很多(520個(gè))不同的包共享,這些包里還包含其他的關(guān)聯(lián)、視圖對象、視圖鏈接及應(yīng)用程序模塊。簡單的程序通常是一個(gè)程序只有一個(gè)應(yīng)用程序模塊,但一個(gè)程序也可以包含多個(gè)應(yīng)用程序模塊,兩個(gè)能完成類似任務(wù)的程序使用同一個(gè)應(yīng)用程序模塊也很正常。采用這種
52、方法后,驗(yàn)證邏輯可以存在于BC4J層中,也可存在于數(shù)據(jù)庫中。業(yè)務(wù)邏輯層方法的優(yōu)點(diǎn)采用這種方法具有如下的優(yōu)點(diǎn):BC4J緩存、項(xiàng)目重用、以及相對于數(shù)據(jù)庫的獨(dú)立性是該方法的用武之地。如果正確使用這種方法,可以達(dá)到最大的開發(fā)效率。這是因?yàn)槌志没瘜雍蜆I(yè)務(wù)邏輯層的模塊化程度增強(qiáng)了。您可以借用BC4J的能力從數(shù)據(jù)庫服務(wù)器上卸載活動。這一優(yōu)勢也正是前一種方法的弱項(xiàng)。業(yè)務(wù)邏輯層方法的缺點(diǎn)下面是這種方法的一些缺點(diǎn):從概念上來講,這種方法比較難于實(shí)現(xiàn),因?yàn)橄到y(tǒng)的業(yè)務(wù)規(guī)則可能存在于不同的地方。例如,這些規(guī)則可能存在于表、實(shí)體對象或視圖對象中。必須為使用不同的代碼位置開發(fā)出一套標(biāo)準(zhǔn)和準(zhǔn)則,并強(qiáng)制執(zhí)行。采用這種策略的組織
53、應(yīng)該仔細(xì)地將這些規(guī)則形式化。規(guī)則適用于數(shù)據(jù)庫、實(shí)體對象及視圖對象。它們必需回答“對象是如何組織的?對象之間如何交互?”等問題。如果沒有仔細(xì)進(jìn)行規(guī)劃,那么BC4J提供的靈活性可能會導(dǎo)致系統(tǒng)中充滿難以跟蹤的bug。這是因?yàn)樵S多地方都可能出現(xiàn)邏輯錯(cuò)誤。設(shè)計(jì)良好的錯(cuò)誤信息有助于減少這一問題。1.2.7用BC4J創(chuàng)建應(yīng)用程序您可以將用戶界面連接到BC4J對象上,從而迅速建立完整的應(yīng)用程序。過去,即便是完成最簡單的事務(wù),客戶端和服務(wù)器之間也要進(jìn)行多次通信。然而,在如今的Web和廣域網(wǎng)中,這種在系統(tǒng)中存在大量傳輸?shù)娘L(fēng)格已經(jīng)行不通了。BC4J組件解決這種問題的辦法是,為傳統(tǒng)的客戶端/服務(wù)器邏輯提供不同的實(shí)現(xiàn)地
54、點(diǎn),結(jié)果是使業(yè)務(wù)邏輯和數(shù)據(jù)驗(yàn)證代碼中的數(shù)據(jù)路徑變得更短。使用BC4J就好像在臨近客戶端應(yīng)用程序的地方出現(xiàn)了一個(gè)虛擬數(shù)據(jù)庫(包括表、歹U、同義詞和元數(shù)據(jù))。您可以將BC4J簡單地想象成一個(gè)黑盒數(shù)據(jù)庫。它可以和一個(gè)或更多客戶端進(jìn)行交互,同步數(shù)據(jù),管理緩沖區(qū),并實(shí)現(xiàn)數(shù)據(jù)模型的基本功能。研究一下BC4J組件的可擴(kuò)展性,就會意識到它們除了充當(dāng)虛擬資料檔案庫的角色之外,還可以提供更多的功能。BC4J通過包含復(fù)雜業(yè)務(wù)邏輯這種元素,提供了一種可擴(kuò)展的架構(gòu),使您能夠遠(yuǎn)遠(yuǎn)超越傳統(tǒng)的關(guān)系數(shù)據(jù)庫結(jié)構(gòu)。例如,無需采用BEFOREINSERT觸發(fā)器就可以實(shí)現(xiàn)邏輯“或”的約束關(guān)系。只要增加一點(diǎn)兒代碼,再充分利用部署選項(xiàng),您
55、就可以優(yōu)化系統(tǒng)的整體性能。實(shí)際上,每個(gè)應(yīng)用程序都需要對基本的BC4J組件進(jìn)行一些修改。因此,理解BC4J組件是如何設(shè)計(jì)的及如何使用BC4J的接口非常重要。1.3在JDeveloper中創(chuàng)建應(yīng)用程序代碼JDeveloper是一個(gè)應(yīng)用程序開發(fā)工具,可以幫助您邁出Java世界中的第一步。它既可以像一張白紙,所有復(fù)雜的文章都由您自己來書寫;也可以給那些喜歡用4GL的拖放技術(shù)開發(fā)應(yīng)用程序的人用做代碼生成器。JDeveloper還可以自動生成基本的數(shù)據(jù)庫接口代碼,允許您定制出滿足需要的結(jié)果。理解Java和JDeveloper,就如同同時(shí)學(xué)習(xí)英語和一個(gè)計(jì)算機(jī)字處理程序。在您投入精力做這種事情之前,應(yīng)該對其他
56、的計(jì)算機(jī)語言和應(yīng)用程序開發(fā)模式有一定的經(jīng)驗(yàn)。最好是在閱讀本章的同時(shí),實(shí)際創(chuàng)建一下本書動手練習(xí)里面介紹的那些項(xiàng)(item)和結(jié)構(gòu)(structure)。這樣,您在嘗試編寫真正代碼時(shí)就可以迅速了解開發(fā)環(huán)境。傳統(tǒng)環(huán)境和JDeveloper環(huán)境的主要區(qū)別是:在有些開發(fā)環(huán)境中,用戶界面和它與數(shù)據(jù)庫之間的交互是不可分離的。在JDeveloper中,您可以在稱為項(xiàng)目(project)的邏輯容器中創(chuàng)建文件。每個(gè)程序通常由兩種類型的JDeveloper項(xiàng)目組成:Java業(yè)務(wù)組件使用Java和XML建立及編寫,提供與數(shù)據(jù)庫交互的組件。用戶界面組件與邏輯主要由Java及與Java相關(guān)的語言建立和編寫。JDevelo
57、per為協(xié)助您產(chǎn)生多層體系結(jié)構(gòu)的數(shù)據(jù)庫應(yīng)用程序進(jìn)行了優(yōu)化。在JDeveloper背后,生成多層應(yīng)用程序的功能集中在BC4J上。多層體系結(jié)構(gòu)提倡從邏輯上劃分出下列元素:客戶層客戶層支持終端用戶對數(shù)據(jù)訪問的需求。對于復(fù)雜的GUI,可以在Internet上通過瀏覽器的腳本處理能力運(yùn)行應(yīng)用程序代碼,也可以在客戶端的桌面上安裝應(yīng)用程序代碼,并從瀏覽器之外運(yùn)行它。應(yīng)用程序?qū)討?yīng)用程序?qū)右话阋獜?qiáng)制實(shí)現(xiàn)業(yè)務(wù)邏輯,并對數(shù)據(jù)訪問進(jìn)行調(diào)整。應(yīng)用程序服務(wù)器上包含的業(yè)務(wù)邏輯可以被多種客戶端及應(yīng)用程序重用,這樣就可能實(shí)現(xiàn)跨越多層體系結(jié)構(gòu)的物理和邏輯資源共享。應(yīng)用程序?qū)舆€可以包含專門的報(bào)表和分析工具,以便處理復(fù)雜的業(yè)務(wù)智能需
58、求。另外,應(yīng)用程序?qū)?包含J2EE體系結(jié)構(gòu)中的Web層和業(yè)務(wù)層)還能夠提供在瀏覽器中顯示的HTML用戶界面代碼。數(shù)據(jù)庫層數(shù)據(jù)庫層是存儲及查詢數(shù)據(jù)的地方。這一層中也可以包含一些鏈接,指向其他外部數(shù)據(jù)源和應(yīng)用程序,這些應(yīng)用程序也可能是組成整個(gè)體系結(jié)構(gòu)的成員。下面幾小節(jié)介紹了JDeveloper用于支持應(yīng)用程序的代碼構(gòu)造和組織方式。1.3.1工作空間工作空間(workspace)是JDeveloper中最高級別的容器。除了連接之外的全部代碼都必須包含在某個(gè)工作空間中。工作空間在大小和范圍上大概與FormsDeveloper中的一個(gè).fmb文件相對應(yīng)。每個(gè)工作空間都由一個(gè)擴(kuò)展名為jws的文件實(shí)現(xiàn)。這是
59、一個(gè)XML文件,其中包含了組成這個(gè)工作空間的項(xiàng)目文件。工作空間文件包含了一些指針,指向組成它的項(xiàng)目文件。1.3.2項(xiàng)目項(xiàng)目(project)是JDeveloper中下一個(gè)級別的容器,包含代碼文件。您可以將項(xiàng)目看作是應(yīng)用程序的主要部分。典型的情況下,應(yīng)用程序被劃分為兩個(gè)項(xiàng)目:一個(gè)用于BC4J組件,一個(gè)用于UI組件。一個(gè)項(xiàng)目可以位于相同或不同的工作空間之內(nèi)。項(xiàng)目代表一起部署的若干代碼文件。它是在一個(gè)后綴名為.jpr的文件中實(shí)現(xiàn)的。該文件是一個(gè)XML文件,其中包含組成項(xiàng)目的代碼文件的文件名。JDeveloper目錄結(jié)構(gòu)用JDeveloper建立的應(yīng)用程序可以劃分到多個(gè)目錄中。通常工作空間存儲在一個(gè)目
60、錄下,該工作空間內(nèi)的項(xiàng)目則存儲在工作空間目錄下面的子目錄中。在每一個(gè)項(xiàng)目的目錄中,JDeveloper會為Java源代碼和編譯過的代碼額外生成兩個(gè)目錄。保存源代碼的文件夾名為src,編譯后的代碼保存在classes文件夾中。每個(gè)這類目錄中的子目錄都與某個(gè)指定的包相對應(yīng),如圖1-3所示。-_JLocDepUA-_Jclasses_Jlocdept-_JSIC、Ilocdept圖1-3在BC4J項(xiàng)目的包目錄中,還有一個(gè)額外的common文件夾,保存了所生成的BC4J配置文件。圖1-4顯示的是JSP項(xiàng)目的目錄,它位于JDEV_HOMEjdevmyworkLocDeptWS目錄下,其目錄結(jié)構(gòu)不同是因?yàn)?/p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 托班冬天有趣課程設(shè)計(jì)
- 自動插線機(jī)課程設(shè)計(jì)
- 研學(xué)紅色教育課程設(shè)計(jì)
- 牙齒矯正牽引課程設(shè)計(jì)
- 藝人練習(xí)生課程設(shè)計(jì)
- 承德護(hù)理職業(yè)學(xué)院《科學(xué)研究方法與論文寫作》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年版特定事項(xiàng)連帶保證協(xié)議版B版
- 2024文化創(chuàng)意產(chǎn)業(yè)合作開發(fā)協(xié)議
- 2024年綠色能源項(xiàng)目內(nèi)部股東股權(quán)轉(zhuǎn)讓與權(quán)益調(diào)整協(xié)議3篇
- 2025年度:區(qū)塊鏈技術(shù)應(yīng)用合同標(biāo)的數(shù)字資產(chǎn)安全3篇
- 12G614-1砌體填充墻結(jié)構(gòu)構(gòu)造
- 自然拼讀法基本規(guī)則 教案
- 德語語言學(xué)導(dǎo)論智慧樹知到期末考試答案章節(jié)答案2024年中國海洋大學(xué)
- 檢驗(yàn)試劑實(shí)施方案范文
- JT-T-1078-2016道路運(yùn)輸車輛衛(wèi)星定位系統(tǒng)視頻通信協(xié)議
- 2024-2029年中國人工骨行業(yè)發(fā)展分析及發(fā)展前景與趨勢預(yù)測研究報(bào)告
- 2024年高校教師資格證資格考試試題庫及答案(各地真題)
- 扭虧增盈提質(zhì)增效方案
- 侵權(quán)法智慧樹知到期末考試答案章節(jié)答案2024年四川大學(xué)
- 期末考試卷2《心理健康與職業(yè)生涯》(解析卷)高一思想政治課(高教版2023基礎(chǔ)模塊)
- 年度安全生產(chǎn)投入臺賬(詳細(xì)模板)
評論
0/150
提交評論