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

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