当你使用CASE工具画出包,类,属性,方法和关系时,AndroMDA的“概貌”就形成了。然后,你把模型保存为XMI格式,并用AndroMDA和XDoclet产生整个组件模型的Java源代码。AndroMDA和XDoclet都可以和著名的构建工具Ant进行集成。你通常会使用Ant的命令行版本,但也可以在IDE如Eclipse或JBuilder中使用Ant。无论是哪一种方式,你都要使用自己定制的Ant构建脚本,并在脚本中把AndroMDA定义为其中的一个Task。 在CASE工具中用UML建模 你可以使用UML的图形符号为现实世界中的事物建模。例如,考虑一个汽车租赁系统,用于管理客户,司机,汽车和租赁合同。这个系统UML模型的类图可能是如下的样子:
将模型保存为XMI格式。某些CASE工具把这称为“export”,用于区别它本身私有的格式。 代码生成器 从XMI模型中产生代码,Ant构建脚本经过以下的步骤:
- Ant Task读入XMI格式的UML模型,并在内存中生成抽象的语法树(abstract syntax tree),其中包含包,类,属性,方法和关系的信息。
- 然后,使用Velocity模板处理引擎来处理entity bean,session bean,Hibernate类或别的代码生成模板,所有的模板都基于从CASE工具中产生的抽象语法树。它使用一个脚本helper facade来屏蔽UML元模型的复杂性,因此模板的开发者可以使用容易理解的API来为脚本写代码。这些步骤会产生一些源代码文件。
- 最后,Ant脚本调用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来产生你的应用框架。你也可以编写你自己的cartridge - 一旦你理解了cartridge的基础知识及其XML描述文件,编写一个新的cartridge非常容易! AndroMDA核心自动检测安装在类路径下的cartridge。如需要了解更多cartridge的信息,请参见本网站的其他文档。 EJB Cartridge生成代码的例子 从上面汽车租赁系统模型的客户模型部分,AndroMDA(使用andromda-ejb)和XDoclet将为你产生下面的代码。Bean类使用 标记,其他类使用 标记。你可以点击文件名查看文件的内容。
编写业务方法 你可能知道,使用代码生成器并没有完成了所有的工作。编写Bean的主体即业务逻辑是留给你的工作。AndroMDA为你构建了一个应用框架,你需要往里面填充代码。这些所谓的“implementation classes”来自bean类,是类继承结构树上的叶子。AndroMDA一次性地产生这些代码并不再修改它们。这能够确保手工编写的代码不被代码生成器覆盖。 因此,在实现类中实现你的业务方法,并启动Ant构建脚本用于编译Java文件的其他task,并把编译好的class文件打包到一个ejb-jar文件中。jar文件当然也包含了生成的部署配置文件。 最后的工作 最后的工作当然是发布到应用服务器上。以JBoss为例,只需简单地将jar文件复制到JBoss的部署路径中即可。