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