WADER

          java,swt,hibernate,struts,xml,spring,ant,cvs,uml,db,server
          隨筆 - 15, 文章 - 0, 評論 - 0, 引用 - 0
          數據加載中……

          概要設計怎么寫(你想成為軟件設計師嗎) (轉貼)( 2005-08-10 11:41)

          發表者付:
          做軟件到一定層次了,就要考慮到設計了,設計了很久,就是不系統,系統的設計需要一個記錄,記錄就用文檔,那么對項目所有包括技術上的設計都記錄下來,我們就可以理解為軟件的概要設計了。


          在需求明確、準備開始編碼之前,要做概要設計,而詳細設計可能大部分公司沒有做,有做的也大部分是和編碼同步進行,或者在編碼之后。因此,對大部分的公司來說,概要設計文檔是唯一的設計文檔,對后面的開發、測試、實施、維護工作起到關鍵性的影響。
            一、問題的提出
            概要設計寫什么?概要設計怎么做?
            如何判斷設計的模塊是完整的?
            為什么說設計階段過于重視業務流程是個誤區?
            以需求分析文檔還是以概要設計文檔來評估開發工作量、指導開發計劃準確?
            結構化好還是面向對象好?
            以上問題的答案請在文章中找。
            二、概要設計的目的
            將軟件系統需求轉換為未來系統的設計;
            逐步開發強壯的系統構架;
            使設計適合于實施環境,為提高性能而進行設計;
            結構應該被分解為模塊和庫。
            三、概要設計的任務
             制定規范:代碼體系、接口規約、命名規則。這是項目小組今后共同作戰的基礎,有了開發規范和程序模塊之間和項目成員彼此之間的接口規則、方式方法,大家就有了共同的工作語言、共同的工作平臺,使整個軟件開發工作可以協調有序地進行。
            總體結構設計:
            功能(加工)->模塊:每個功能用那些模塊實現,保證每個功能都有相應的模塊來實現;
            模塊層次結構:某個角度的軟件框架視圖;
            模塊間的調用關系:模塊間的接口的總體描述;
            模塊間的接口:傳遞的信息及其結構;
            處理方式設計:滿足功能和性能的算法
            用戶界面設計;
            數據結構設計:
            詳細的數據結構:表、索引、文件;
            算法相關邏輯數據結構及其操作;
            上述操作的程序模塊說明(在前臺?在后臺?用視圖?用過程?······)
            接口控制表的數據結構和使用規則
            其他性能設計。
            四、概要設計寫什么
            結構化軟件設計說明書結構(因篇幅有限和過時嫌疑,在此不作過多解釋)
            任務:目標、環境、需求、局限;
            總體設計:處理流程、總體結構與模塊、功能與模塊的關系;
            接口設計:總體說明外部用戶、軟、硬件接口;內部模塊間接口(注:接口≈系統界面)
            數據結構:邏輯結構、物理結構,與程序結構的關系;
            模塊設計:每個模塊“做什么”、簡要說明“怎么做”(輸入、輸出、處理邏輯、與其它模塊的接口,與其它系統或硬件的接口),處在什么邏輯位置、物理位置;
            運行設計:運行模塊組合、控制、時間;
            出錯設計:出錯信息、處錯處理;
            其他設計:保密、維護;
            OO軟件設計說明書結構
            1 概述
            系統簡述、軟件設計目標、參考資料、修訂版本記錄
            這部分論述整個系統的設計目標,明確地說明哪些功能是系統決定實現而哪些時不準備實現的。同時,對于非功能性的需求例如性能、可用性等,亦需提及。需求規格說明書對于這部分的內容來說是很重要的參考,看看其中明確了的功能性以及非功能性的需求。
          這部分必須說清楚設計的全貌如何,務必使讀者看后知道將實現的系統有什么特點和功能。在隨后的文檔部分,將解釋設計是怎么來實現這些的。
            2 術語表
            對本文檔中所使用的各種術語進行說明。如果一些術語在需求規格說明書中已經說明過了,此處不用再重復,可以指引讀者參考需求說明。
            3 用例
            此處要求系統用用例圖表述(UML),對每個用例(正常處理的情況)要有中文敘述。
            4 設計概述
            4.1 簡述
            這部分要求突出整個設計所采用的方法(是面向對象設計還是結構化設計)、系統的體系結構(例如客戶/服務器結構)以及使用到的相應技術和工具(例如OMT、Rose)
            4.2 系統結構設計
            這部分要求提供高層系統結構(頂層系統結構、各子系統結構)的描述,使用方框圖來顯示主要的組件及組件間的交互。最好是把邏輯結構同物理結構分離,對前者進行描述。別忘了說明圖中用到的俗語和符號。
            4.3 系統界面
            各種提供給用戶的界面以及外部系統在此處要予以說明。如果在需求規格說明書中已經對用戶界面有了敘述,此處不用再重復,可以指引讀者參考需求說明。如果系統提供了對其它系統的接口,比如說從其它軟件系統導入/導出數據,必須在此說明。
            4.4 約束和假定
            描述系統設計中最主要的約束,這些是由客戶強制要求并在需求說明書寫明的。說明系統是如何來適應這些約束的。
            另外如果本系統跟其它外部系統交互或者依賴其它外部系統提供一些功能輔助,那么系統可能還受到其它的約束。這種情況下,要求清楚地描述與本系統有交互的軟件類型以及這樣導致的約束。
            實現的語言和平臺也會對系統有約束,同樣在此予以說明。
            對于因選擇具體的設計實現而導致對系統的約束,簡要地描述你的想法思路,經過怎么樣的權衡,為什么要采取這樣的設計等等。
            5 對象模型
            提供整個系統的對象模型,如果模型過大,按照可行的標準把它劃分成小塊,例如可以把客戶端和服務器端的對象模型分開成兩個圖表述。在其中應該包含所有的系統對象。這些對象都是從理解需求后得到的。要明確哪些應該、哪些不應該被放進圖中。所有對象之間的關聯必須被確定并且必須指明聯系的基數。聚合和繼承關系必須清楚地確定下來。每個圖必須附有簡單的說明。
            6 對象描述
            在這個部分敘述每個對象的細節,它的屬性、它的方法。在這之前必須從邏輯上對對象進行組織。你可能需要用結構圖把對象按子系統劃分好。
            為每個對象做一個條目。在系統對象模型中簡要的描述它的用途、約束(如只能有一個實例),列出它的屬性和方法。如果對象是存儲在持久的數據容器中,標明它是持久對象,否則說明它是個臨時對象(transient object)。
            對每個對象的每個屬性詳細說明:名字、類型,如果屬性不是很直觀或者有約束(例如,每個對象的該屬性必須有一個唯一的值或者值域是有限正整數等)。
            對每個對象的每個方法詳細說明:方法名,返回類型,返回值,參數,用途以及使用的算法的簡要說明(如果不是特別簡單的話)。如果對變量或者返回值由什么假定的話,Pre-conditions和Post-conditions必須在此說明。列出它或者被它調用的方法需要訪問或者修改的屬性。最后,提供可以驗證實現方法的測試案例。
            7 動態模型
            這部分的作用是描述系統如何響應各種事件。一般使用順序圖和狀態圖。
            確定不同的場景(Scenario)是第一步,不需要確定所有可能的場景,但是必須至少要覆蓋典型的系統用例。不要自己去想當然地創造場景,通常的策略是描述那些客戶可以感受得到的場景。
            7.1 場景(Scenarios)
            對每個場景做一則條目,包括以下內容:
            場景名:給它一個可以望文生義的名字
            場景描述:簡要敘述場景是干什么的以及發生的動作的順序。
            順序圖:描述各種事件及事件發生的相對時間順序。
            7.2 狀態圖
            這部分的內容包括系統動態模型重要的部分的狀態圖??赡苣阆霝槊總€對象畫一個狀態圖,但事實上會導致太多不期望的細節信息,只需要確定系統中一些重要的對象并為之提供狀態圖即可。
            8 非功能性需求
            五、概要設計怎么做
            結構化軟件設計方法:
            詳細閱讀需求規格說明書,理解系統建設目標、業務現狀、現有系統、客戶需求的各功能說明;
            分析數據流圖,弄清數據流加工的過程;
            根據數據流圖決定數據處理問題的類型(變換型、事務型、其他型);
            通過以上分析,推導出系統的初始結構圖;
            對初始結構圖進行改進完善:所有的加工都要能對應到相應模塊(模塊的完整性在于他們完成了需求中的所有加工),消除完全相似或局部相似的重復功能(智者察同),理清模塊間的層次、控制關系,減少高扇出結構,隨著深度增大扇入,平衡模塊大小。
            由對數據字典的修改補充完善,導出邏輯數據結構,導出每種數據結構上的操作,這些操作應當屬于某個模塊。
            確定系統包含哪些應用服務系統、客戶端、數據庫管理系統;
            確定每個模塊放在哪個應用服務器或客戶端的哪個目錄、哪個文件(庫),或是在數據庫內部建立的對象。
            對每個篩選后的模塊進行列表說明。
            對邏輯數據結構進行列表說明。
            根據結構化軟件設計說明書結構對其他需要說明的問題進行補充說明,形成概要設計說明書。
            OO軟件設計方法:
            在OOA基礎上設計對象與類:在問題領域分析(業務建模和需求分析)之后,開始建立系統構架。
            第一步是抽取建立領域的概念模型,在UML中表現為建立對象類圖、活動圖和交互圖。對象類就是從對象中經過“察同”找出某組對象之間的共同特征而形成類:
            對象與類的屬性:數據結構;
            對象與類的服務操作:操作的實現算法;
            對象與類的各外部聯系的實現結構;
            設計策略:充分利用現有的類;
            方法:繼承、復用、演化;
            活動圖用于定義工作流,主要說明工作流的5W(Do What、Who Do、When Do、Where Do、Why Do)等問題,交互圖把人員和業務聯系在一起是為了理解交互過程,發現業務工作流中相互交互的各種角色。
            第二步是構建完善系統結構:對系統進行分解,將大系統分解為若干子系統,子系統分解為若干軟件組件,并說明子系統之間的靜態和動態接口,每個子系統可以由用例模型、分析模型、設計模型、測試模型表示。軟件系統結構的兩種方式:層次、塊狀
            層次結構:系統、子系統、模塊、組件(同一層之間具有獨立性);
            塊狀結構:相互之間弱耦合
            系統的組成部分:
            問題論域:業務相關類和對象(OOA的重點);
            人機界面:窗口、菜單、按鈕、命令等等;
            數據管理:數據管理方法、邏輯物理結構、操作對象類;
            任務管理:任務協調和管理進程;
            第三步是利用“4+1”視圖描述系統架構:用例視圖及劇本;說明體系結構的設計視圖;以模塊形式組成包和層包含概要實現模型的實現視圖;說明進程與線程及其架構、分配和相互交互關系的過程視圖;說明系統在操作平臺上的物理節點和其上的任務分配的配置視圖。在RUP中還有可選的數據視圖。
            第四步是性能優化(速度、資源、內存)、模型清晰化、簡單化(簡單就是享受)。
            六、概要設計的原則
            總體原則和方法:由粗到細的原則,互相結合的原則,定性分析和定量分析相結合的方法,分解和協調的方法和模型化方法。
            要系統考慮系統的一般性、關聯性、整體性和層次性。
            分解協調:目的是為了創造更好的系統。系統分解是指將一個復雜的系統分解為若干個子系統,系統協調一是系統內協調,即根據系統的總結構、總功能、總任務和總目標的要求,使各個子系統之間互相協調配合,在各個子系統局部優化基礎上,通過內部平衡的協調控制,實現系統的整體優化;
            屏蔽抽象:從簡單的框架開始,隱含細節;
            一致性:統一的規范、統一的標準、統一的文件模式;
            每個模塊應當有一個統一命名的容易理解的名字;
            編碼:由外向內(界面->核心);
            面向用戶:概要設計是對于按鈕按下后系統“怎么做”的簡要說明;
            模塊、組件的充分獨立性、封閉性;
            同時考慮靜態結構與動態運行;
            每個邏輯對象都應當說明其所處物理對象(非一一對應);
            每個物理對象都有合適的開發人員,并且利于分工與組裝。(詳細說明見本人另一篇文章:系統構架設計應考慮的因素);
            確立每個構架視圖的整體結構:視圖的詳細組織結構、元素的分組以及這些主要分組之間的接口;
            軟件構架與使用的技術平臺密切相關,目前常用的平臺有J2EE、.NET、CORBA等等,因此具體的軟件構架人員應當具備使用這些平臺的軟件開發經驗;
            通過需求功能與設計模塊之間的列表對應,檢查每個需求功能是否都有相應的模塊來實現,保證需求功能的可追溯性和需求實現(模塊)的完整性,同時可以檢查重復和不必要的模塊。
            在需求調研分析過程中對業務處理過程了解的完整性和準確性非常重要。調查了解清楚所有的業務流程才能設計出適合各流程業務節點用戶業務特點和習慣的軟件,使開發出來的軟件更受歡迎。當然在進行軟件概要設計時,要盡量排除業務流程的制約,即把流程中的各項業務結點工作作為獨立的對象,設計成獨立的模塊,充分考慮他們與其他各種業務對象模塊的接口,在流程之間通過業務對象模塊的相互調用實現各種業務,這樣,在業務流程發生有限的變化時(每個業務模塊本身的業務邏輯沒有變的情況下),就能夠比較方便地修改系統程序模塊間的調用關系而實現新的需求。如果這種調用關系被設計成存儲在配置庫的數據字典里,則連程序代碼都不用修改,只需修改數據字典里的模塊調用規則即可。
            七、概要設計的重要輸出
            編碼規范:信息形式、接口規約、命名規則;
            物理模型:組件圖、配置圖;
            不同角度的構架視圖:用例視圖、邏輯視圖、進程視圖、部署視圖、實施視圖、數據視圖(可選);
            系統總體布局:哪些部分組成、各部分在物理上、邏輯上的相互關系;
            兩個不可忽視的輸出:
            與需求功能的關系:對于需求中的每一個功能,用哪一層、哪個模塊、哪個類、哪個對象來實現(一對多關系);反過來,應當說明將要創建的系統每一層、每個模塊、每個對象、每一個類“做什么”,他們是為了幫助實現哪些功能(一對多關系)。(需求的顆粒度在一開始往往是比較粗的,因此根據功能點對于整體項目規模的估計或得到項目WBS其誤差范圍也是比較大的。更為重要的原因是,需求往往不是編碼工作分解的準確依據,因為一個需求的功能點可能對應多個代碼模塊,而多個需求的功能點也可能只對應一個或少數代碼模塊,同時還有軟件復用等因素要考慮,因此只有在概要設計完成以后才能準確地得到詳細設計或編碼階段的二次WBS,并估計較為準確的整體項目規模。)
            邏輯與物理位置:每個對象在邏輯上分別落在哪一層、哪個模塊、哪個類;在物理上每個模塊、每個對象、每一個類放在哪個應用服務器或客戶端的哪個目錄、哪個文件(庫),或者是建立在數據庫管理系統中的什么東東(過程、函數、視圖、觸發器等等)。
            八、結構化與面向對象方法特點比較
            1. 從概念方面看,結構化軟件是功能的集合,通過模塊以及模塊和模塊之間的分層調用關系實現;面向對象軟件是事物的集合,通過對象以及對象和對象之間的通訊聯系實現;
            2. 從構成方面看,結構化軟件=過程+數據,以過程為中心;面向對象軟件=(數據+相應操作)的封裝,以數據為中心;
            3. 從運行控制方面看,結構化軟件采用順序處理方式,由過程驅動控制;面向對象軟件采用交互式、并行處理方式,由消息驅動控制;
            4. 從開發方面看,結構化方法的工作重點是設計;面向對象方法的工作重點是分析;但是,在結構化方法中,分析階段和設計階段采用了不相吻合的表達方式,需要把在分析階段采用的具有網絡特征的數據流圖轉換為設計階段采用的具有分層特征的結構圖,在面向對象方法中則不存在這一問題。
            5. 從應用方面看,相對而言,結構化方法更加適合數據類型比較簡單的數值計算和數據統計管理軟件的開發;面向對象方法更加適合大型復雜的人機交互式軟件和數據統計管理軟件的開發;
            參考文獻:
            《實用軟件工程》第二版,鄭人杰、殷人昆、陶永雷等著
            《微軟項目:求生法則》Steve McConnell著,余孟學譯
            《軟件工程:實踐者的研究方法》(第5版)Roger S.Pressman著
            《軟件構架實踐》SEI軟件工程譯叢,林·巴斯著
            《RUP2000》電子版;
            《UML與系統分析設計》張龍祥著;
            《面向對象的分析與設計》楊正甫著;

          posted @ 2005-11-23 16:03 wader 閱讀(1318) | 評論 (1)編輯 收藏

          Oracle開發人員 JAVA存儲過程(轉貼)(2005-07-12 17:51 )

          Oracle開發人員 JAVA存儲過程
          利用Java存儲過程簡化數據庫操作
          作者:Kuassi Mensah
          利用Java存儲過程溝通SQL、XML、Java、J2EE和Web服務。
          存儲過程(stored procedure)允許將運行于數據庫層中的持久性邏輯與運行于中間層中的商務邏輯有效地分離開來。這種分離可以降低整個應用程序的復雜性,并提供其重用性、安全性、性能和可伸縮性。

          但是,妨礙存儲過程廣泛采用的一個主要障礙是不同數據庫廠商使用各種專有的、且依賴于數據庫的實現語言。使用基于Java的存儲過程可以解決這一問題。Oracle已經實現了ANSI標準,這些標準規定了從SQL中將靜態Java方法作為過程或函數進行調用的能力。這種實現被簡單地稱作"Java存儲過程"。

          在本文中,你將了解基于Java的存儲過程如何幫助簡化商務邏輯、提高其性能,并擴展數據庫的功能。本文將介紹Oracle如何在數據庫內啟用基于Java的存儲過程。還會介紹Java存儲過程如何訪問數據,以及如何創建基本Java存儲過程。

          選擇PL/SQL還是Java

          在考慮Oracle存儲過程時,你可能會想到PL/SQL。不過,從Oracle8i開始,Oracle已經在數據庫中支持Java,從而為存儲過程提供了不同于PL/SQL的開放式和可移植的方法。我可以聽到"$64 000問題":"我如何在PL/SQL和Java之間做出選擇?我是否應當忘記已經學習的所有PL/SQL相關知識,而變為一個Java天地的新手?"

          兩種語言都適用于數據庫編程,都有自己的優點和弱點。在決定選擇哪一種語言時,可以參考下面根據經驗得出的通用規則:

          對于要求與SQL進行無縫集成的數據庫中心來說則邏輯使用PL/SQL,從而完成對數據庫對象、類型和特性的訪問。
          出于與數據庫的無關性考慮時,可以選擇Java作為開放式的語言來取代PL/SQL,同時也為了集成和溝通SQL、XML、J2EE和Web服務等各個領域。
          OralceJVM使得Java可以運行在數據庫中

          從Oracle8i版本1(Oralce8.1.5)開始,Oracle便提供緊密集成的Java虛擬機(JVM),JVM支持Oralce的數據庫會話期結構。任何數據庫對話期都可以在第一Java代碼調用時啟動一個虛擬上專用的JVM,后續的用戶可以使用這一已經存在的支持Java的會話期。事實上,所有會話共享同一JVM代碼并保持"僅靜態"的私有狀態,而垃圾則收集在單個對話期空間內,從而為各個Java對話期提供了和SQL操作相同的對話期隔離和數據完整性能力。這里,不需要為了數據完整性而進行單獨的Java支持的過程。這一基于對話期的結構提供了較小的內存占用率,并使OracleJVM具有與Oracle數據庫一樣的線性SMP可伸縮性。

          創建Java存儲過程

          要將Java方法轉換為Java存儲過程需要幾個步驟,包括:用loadjava實用程序將Java類加載到數據庫中,利用調用規范(Call Spec)發布Java方法,將Java方法、參數類型和返回類型映射到其SQL的對應部分。下面部分說明如何完成這些步驟。

          我將使用一個簡單的Hello類,它有一個方法Hello.world(),返回字符串"Hello world":
          public class Hello { public static String world () { return "Hello world"; } }
          Loadjava 實用程序

          Loadjava是加載Java源文件、Java類文件和Java資源文件的實用程序,它可以用來驗證字節碼,并將Java類和JAR文件布置到數據庫中。它既可以通過命令行調用,也可以通過包含于DBMS_JAVA類中的loadjava()方法調用。為了加載我們的Hello.class示例,輸入:
          loadjava -user scott/tiger Hello.class

          從Oracle9i版本2開始,loadjava允許通過為包含在被處理的類中的方法創建相應的Call Specs來自動將Java類發布為存儲過程。Oracle為開發、測試、調試和布置Java存儲過程提供了Oracle9i JDeveloper。

          The Resolver Spec

          基于JDK的JVM在列于CLASSPATH中的目錄中查找類引用,并對其進行解析。因為Oracle數據庫類存在于數據庫模式中,所以OracleJVM利用數據庫解析器(resolver)通過列于Resolver Spec中的模式查找并解析類引用。與CLASSPATH不同(CLASSPATH可以應用于所有的類),Resover Spec根據每類的情況進行應用。缺省解析器首先在加載類的模式中搜尋類,然后在公共同義詞(public synonyms)中搜索。 
           loadjava -resolve <myclass>
          你可能需要指定不同的解析器,也可以在使用loadjava時強制進行解析,從而在布置時確定可能在以后運行時發生的任何問題。
          loadjava -resolve -resolver "((* SCOTT) (foo/bar/* OTHERS) (* PUBLIC))"
          Call Spec和存儲過程調用

          為了從SQL中調用Java方法(以及從PL/SQl和JDBC中調用),必須首先通過Call Spec發布公共靜態方法,它為SQL定義方法采用的參數以及返回的SQL類型。

          在我們的例子中,我們將利用SQL*Plus連接到數據庫,并為Hello.world()定義一個頂級Call Spec:
          SQL> connect scott/tiger SQL> create or replace function helloworld return VARCHAR2 as language java name 'Hello.world () return java.lang.String'; / Function created.
          可以像下面這樣調用Java存儲過程:
          SQL> variable myString varchar2[20]; SQL> call helloworld() into :myString; Call completed. SQL> print myString; MYSTRING --------------------- Hello world
          Java存儲過程可以通過其Call Spec從以下各項中進行調用:SQL DML語句(INSERT, UPDATE、DELETE、SELECT、CALL、EXPLAIN PLAN、LOCK TABLE和MERGE)、PL/SQL塊、子程序、程序包以及數據庫觸發器。Call Spec的美妙之處在于存儲過程實現可以從PL/SQL轉換為Java,反之亦可,這一點對于請求者是透明的。

          Call Spec從實現語言中(PL/SQL或Java)中抽象出調用界面,因而使之能夠在原有應用程序和新的基于Java/J2EE的應用程序之間共享商務邏輯。但是,在從Java客戶程序調用在數據庫駐留的Java類時,你可能不希望通過PL/SQL包裝器(wrapper)。在以后的版本中,Oracle計劃提供一種機制,它可以使開發人員略過Call Spec。

          高級數據訪問控制

          Java存儲過程可用于控制和限制對Oracle數據的訪問,其方法是只允許用戶通過存儲過程管理數據,而存儲過程在其調用者的權限內執行,而不能對表本身進行訪問。例如,你可以在特定時間內禁止更新數據,或者使管理者只具有查詢工資數據的權利,而不能進行更新,或者記錄所有的訪問并通知某一安全機構。

          原有應用程序與J2EE應用程序之間的數據邏輯共享因為原有應用程序與J2EE應用程序都通過Call Spec調用存儲過程,所以J2EE和非J2EE應用程序可以共享相同的數據邏輯。由于有了Call Spec,所以不用考慮所用的是何種實現語言(無論是PL/SQL還是Java),該數據邏輯都可以共享。

          為BMP實體Bean自動生成主關鍵字

          在對EJB實體bean應用BMP時,一個bean實例可以由自動生成的與新插入的數據相關聯的主關鍵字惟一確定,它是ejbCreate()的返回值??梢岳靡粋€插入相應數據的存儲過程在一個數據庫操作中檢索ejbCeater()中的該值,并檢索或計算主關鍵字。作為另一種方法,也可以利用JDBC3.0的RETURN_GENERATED_KEYS特性,以一個SQL語句插入該數據并檢索相應的關鍵字(或ROWID)。但是,存儲過程方法在各個JDBC驅動器版本和數據庫之間更具可移植性。

          posted @ 2005-11-23 15:54 wader 閱讀(442) | 評論 (0)編輯 收藏

          標準hibernate配置文件(我以前做海信項目時配置的)

          <!DOCTYPE hibernate-configuration
          PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
          "
          http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

          <hibernate-configuration>
          <session-factory>

          <!-- properties -->

          <property name="hibernate.connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>
          <property name="hibernate.connection.url">jdbc:jtds:sqlserver://192.168.0.29:1433/HisenseCommunity</property>
          <property name="hibernate.connection.username">sa</property>
          <property name="hibernate.connection.password">admin</property>
          <property name="hibernate.dialect">org.hibernate.dialect.SybaseDialect</property>
          <property name="hibernate.connection.pool.size">20</property>
          <property name="hibernate.show_sql">true</property>

          <!-- mapping files -->
          <mapping resource="hisense/ORMFILE/AdminInfoBean.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/AdminLevel.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/Operate.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/Relation.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/Community.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/Category.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/CategoryType.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/AdBusiness.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/AdClient.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/AdContent.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/AdType.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/Profile.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/ProfileDv.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/ProfileAlbum.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/Club.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/CommendType.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/Comment.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/Goods.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/CommunityMarket.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/CommunityMarketType.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/News.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/Merchant.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/Commend.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/ClubActivities.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/ActivityType.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/EstateManagement.hbm.xml"/>
          <mapping resource="hisense/ORMFILE/ProfileAndClubRelations.hbm.xml"/>

          </session-factory>
          </hibernate-configuration>

          posted @ 2005-11-23 15:37 wader 閱讀(677) | 評論 (0)編輯 收藏

          用xdoclet 1.2 實例生成struts實體bean的hbm文件

          這是我曾經為系統生成hbm文件時編寫的一個ant 的build.xml配置文件,這里面主要有兩類參數設置,一類是路徑設置,另一類是功能加載設置;下面通過看看我的注釋你就應該明白了:
          <?xml version="1.0" encoding="UTF-8"?>         //xml標頭信息
          <project name="Test" default="all" basedir=".">      //basedir是指定根目錄,"."提當前目錄;
             <property name="classes" location="./classes"/>      //生成類的指定目錄
             <property name="src" value="src" />      //源文件,要編譯的源的目錄;
             <property name="db" value="db" />      //數據庫設置
             <property name="lib" value="./aiihome_admin/WEB-INF/lib" />  //指定庫路徑;
             <property name="lib-xdoc" value="./lib" />            //指定xdoc庫路徑;
             <property name="build" value="classes" />            //成生輸出的目錄;

             <path id="myclasspath">         //設置路徑組
              <fileset dir="${lib}">
               <include name="*.jar"/>
              </fileset>
              <fileset dir="${lib-xdoc}">
               <include name="*.jar"/>
              </fileset>

             </path>

             <target name="init">                  //設置初始化功能
             <mkdir dir="${classes}"/>
             </target>

             <target name="compile" depends="init">         //設置要完成的工作,depends指他的依賴項,也是必須項
             <javac executable="jikes" classpathref="myclasspath"    srcdir="${src}" destdir="${classes}"/>
             </target>

             <target name="clean">               //設置清除功能
             <delete dir="${classes}"/>            //dir要清除的目錄
             </target>

             <target name="xdoc" description="Generates Hibernate class descriptor files.">          //設置xdoc工作功能
               <taskdef name="hibernatedoclet" classpathref="myclasspath"               classname="xdoclet.modules.hibernate.HibernateDocletTask">       //任務名hibernatedoclet,類庫classname
               </taskdef>
               <hibernatedoclet destdir="${classes}">                                       //hibernatedoclet任務設置項
                <fileset dir="${src}">                                                                  //源目錄
                 <include name="**/*.java"/>                                                      //文件名
                </fileset>
               <hibernate version="2.0"/>                                                         //hibernate vs
             </hibernatedoclet>
             </target>

             <target name="all" depends="xdoc" />                                             //執行任務名
             <!-- Other target omited -->
          </project>

          關于ant編譯文件的標簽很多,不同的標簽可以實現不同的功能,在編譯這一塊地,ant真是太強了,可惜我只知道皮毛,提供大家一個配置文件參考:在middlegen2里面有一個example里有一個生成ejb項目的build文件,它的生成項目比較全,應該可以滿足一般需要了。

          posted @ 2005-11-23 15:30 wader 閱讀(566) | 評論 (0)編輯 收藏

          [Hibernate]使用XDoclet生成hbm.xml

          用XDoclet生成hbm.xml就是在.java文件里寫入一些元數據,XDoclet會從這些數據以及類本身得到足夠的信息來生成目標文件。當然,除了用于hibernate,XDoclet還可以用于web、ejb等等很多用途。

          XDoclet要從sourceforge上下載,包含了很多jar包、文檔和例子,我覺得文檔做得還是不錯的,查起來比較方便。要使用XDoclet,一般要通過ant來完成,也就是在ant腳本里加入XDoclet的內容。

          由于eclipse已經包含了ant支持,因此我沒有專門去下載一個ant回來,而是直接使用eclipse帶的,版本是1.5.3。

          創建一個名為build.xml的腳本(其實應該換個名,比如gen-hbm.xml,看起來比較明白),內容如下:

          <?xml version="1.0" encoding="ISO-8859-1"?>

          <project name="XDoclet Examples" default="hibernate" basedir=".">
              <property name="xdoclet.root.dir" value="c:/xdoclet-1.2.1"/>
              <property name="xdoclet.lib.dir" value="${xdoclet.root.dir}/lib"/>
              <path id="myclasspath">
                  <fileset dir="${xdoclet.lib.dir}">
                      <include name="*.jar"/>
                  </fileset>
              </path>
               <taskdef
                  name="hibernatedoclet"
                  classname="xdoclet.modules.hibernate.HibernateDocletTask"
                  classpathref="myclasspath"
                  />
              <target name="hibernate" description="Generate mapping documents">

                  <echo>+---------------------------------------------------+</echo>
                  <echo>|                                                   |</echo>
                  <echo>| R U N N I N G   H I B E R N A T E D O C L E T     |</echo>
                  <echo>|                                                   |</echo>
                  <echo>+---------------------------------------------------+</echo>

                  <hibernatedoclet
                      destdir="./src"
                      excludedtags="@version,@author,@todo,@see"
                      addedtags="@xdoclet-generated at ${TODAY},@copyright The XDoclet Team,@author XDoclet,@version ${version}"
                      force="false"
                      verbose="true">

                      <fileset dir="./src">
                          <include name="org/haree/struts/form/UserForm.java"/>
                      </fileset>

                      <hibernate version="2.0"/>

                  </hibernatedoclet>
              </target>
          </project>

          我曾經卡住的一個地方就是在taskdef里的classpathref屬性。一開始我在eclipse的ant運行參數里設置了XDoclet相關的包,總是提示:

          Can't create a hibernate element under hibernatedoclet. Make sure the jar file containing the corresponding subtask class is on the classpath specified in the <taskdef> that defined {2}.

          后來如上設置了classpathref,即包含了XDoclet使用到的包,并將eclipse的ant里關于XDoclet的包都去掉,竟然就成功了。其實現在也不明白為什么會這樣。。。

          posted @ 2005-11-23 15:09 wader 閱讀(762) | 評論 (0)編輯 收藏

          僅列出標題
          共2頁: 上一頁 1 2 
          主站蜘蛛池模板: 涟水县| 图片| 武功县| 固始县| 石狮市| 淮南市| 佛教| 尉氏县| 乃东县| 龙里县| 专栏| 山西省| 沾化县| 阆中市| 瑞丽市| 永寿县| 东安县| 邵武市| 长汀县| 中超| 四川省| 三明市| 东乌珠穆沁旗| 福贡县| 辽阳县| 丰原市| 施秉县| 仙游县| 竹北市| 砀山县| 顺义区| 闵行区| 略阳县| 金秀| 巴林左旗| 德兴市| 南康市| 正镶白旗| 临沂市| 登封市| 神农架林区|