當你使用CASE工具畫(huà)出包,類(lèi),屬性,方法和關(guān)系時(shí),AndroMDA的“概貌”就形成了。然后,你把模型保存為XMI格式,并用AndroMDA和XDoclet產(chǎn)生整個(gè)組件模型的Java原始碼。AndroMDA和XDoclet都能和著(zhù)名的構建工具Ant進(jìn)行集成。你通常會(huì )使用Ant的命令行版本,但也能在IDE如Eclipse或JBuilder中使用Ant。無(wú)論是哪一種方式,你都要使用自己制定的Ant構建腳本,并在腳本中把AndroMDA定義為其中的一個(gè)Task。 在CASE工具中用UML建模 你能使用UML的圖像符號為現實(shí)世界中的事物建模。例如,考慮一個(gè)汽車(chē)租用系統,用于管理客戶(hù),司機,汽車(chē)和租用合同。這個(gè)系統UML模型的類(lèi)圖可能是如下的樣子:

將模型保存為XMI格式。某些CASE工具把這稱(chēng)為“export”,用于差別他本身私有的格式。 代碼生成器 從XMI模型中產(chǎn)生代碼,Ant構建腳本經(jīng)過(guò)以下的步驟:
Ant Task讀入XMI格式的UML模型,并在內存中生成抽象的語(yǔ)法樹(shù)(abstract syntax tree),其中包含包,類(lèi),屬性,方法和關(guān)系的信息。
然后,使用Velocity模板處理引擎來(lái)處理entity bean,session bean,Hibernate類(lèi)或別的代碼生成模板,所有的模板都基于從CASE工具中產(chǎn)生的抽象語(yǔ)法樹(shù)。他使用一個(gè)腳本helper facade來(lái)屏蔽UML元模型的復雜性,因此模板的研發(fā)者能使用容易理解的API來(lái)為腳本寫(xiě)代碼。這些步驟會(huì )產(chǎn)生一些原始碼文件。
最后,Ant腳本調用XDoclet中的 使用Cartridges制定輸出 到此為止,你可能以為AndroMDA是個(gè)EJB或Hibernate JavaBean的生成器。其實(shí),AndorMDA能生成所有東西! 事實(shí)上,AndroMDA對于他生成的東西一無(wú)所知。他擁有一個(gè)稱(chēng)為“cartridges”的可插入模塊。一個(gè)Cartridge由一套定義生成格式的模板文件組成。目前,AndroMDA包括四個(gè)cartridge: andromda-java - 生成一般的Java原始碼。 andromda-ejb - 生成EJB。 andromda-hibernate - 生成Hibernate ORM工具的持久層類(lèi)。 andromda-struts - 生成Jakarta Struts的web頁(yè)面,form bean和action類(lèi)。 你能選擇使用哪一個(gè)cartridge來(lái)產(chǎn)生你的應用框架。你也能編寫(xiě)你自己的cartridge - 一旦你理解了cartridge的基礎知識及其XML描述文件,編寫(xiě)一個(gè)新的cartridge非常容易! AndroMDA核心自動(dòng)檢測安裝在類(lèi)路徑下的cartridge。如需要了解更多cartridge的信息,請參見(jiàn)本網(wǎng)站的其他文件。 EJB Cartridge生成代碼的例子 從上面汽車(chē)租用系統模型的客戶(hù)模型部分,AndroMDA(使用andromda-ejb)和XDoclet將為你產(chǎn)生下面的代碼。Bean類(lèi)使用 編寫(xiě)業(yè)務(wù)方法 你可能知道,使用代碼生成器并沒(méi)有完成了所有的工作。編寫(xiě)Bean的主體即業(yè)務(wù)邏輯是留給你的工作。AndroMDA為你構建了一個(gè)應用框架,你需要往里面填充代碼。這些所謂的“implementation classes”來(lái)自bean類(lèi),是類(lèi)繼承結構樹(shù)上的葉子。AndroMDA一次性地產(chǎn)生這些代碼并不再修改他們。這能夠確保手工編寫(xiě)的代碼不被代碼生成器覆蓋。 因此,在實(shí)現類(lèi)中實(shí)現你的業(yè)務(wù)方法,并啟動(dòng)Ant構建腳本用于編譯Java文件的其他task,并把編譯好的class文件打包到一個(gè)ejb-jar文件中。jar文件當然也包含了生成的部署設置文件。 最后的工作 最后的工作當然是發(fā)布到應用服務(wù)器上。以JBoss為例,只需簡(jiǎn)單地將jar文件復制到JBoss的部署路徑中即可。 




















聯(lián)系客服