这篇文章告诉你如何写一个AndroMDA cartridge在10个不同的步骤中,使用一个简单的cartridge从UML开发模型中生成一个类似于Ant的构建脚本。这就是为什么教程cartridge被叫做“andromeda-deployment”。
新的cartridge作的任务
Written by Matthias Bohlen
Tuesday,21 March 2006
让我们看看cartridge要处理的测试模型:
在这张图上,你看到了四个重要的模型元素类型:
l Node:工件能够被部署的方框(通常是机器,例如server)
l Component:带一个定义的接口的软件的逻辑块
l Artifact:软件的物理块,例如符合组件接口的jar文件(用UML的话来讲就是:“manifest a”)
l Package:一些类周围的壳。
隐藏在这个模型背后的思想是:工件包含包并且被部署在节点上。包中包括应该在打包进工件前要被编译的类。
你可以从这样一个模型中作的更多,但是对于一个教程来说这会使这个cartridge更复杂。从这个模型中,cartridge会生成两种类型的文件:
l 一种像ant的构建脚本(给每个节点)
l 简单的关于要被部署到节点的报告,组件,工件和包(每个模型一个报告)
从上面的模型中,这个新的cartridge将生成下面的输出:
build.xml:
<project name="org.andromda.cartridges.deployment.sampledeployment.AppServer1" default="deploy">
<target name="compile"> <javac package="org.andromda.cartridges.deployment.sampledeployment.mybackendservices" /> <javac package="org.andromda.cartridges.deployment.sampledeployment.mywebapp" /> <javac package="org.andromda.cartridges.deployment.sampledeployment.mywebapp2" /> </target>
<target name="deploy" depends="compile"> <jar name="MyBackendComponents.jar"> <package name="org.andromda.cartridges.deployment.sampledeployment.mybackendservices" /> </jar> <jar name="MyWebComponents.jar"> <package name="org.andromda.cartridges.deployment.sampledeployment.mywebapp" /> <package name="org.andromda.cartridges.deployment.sampledeployment.mywebapp2" /> </jar> </target>
</project> |
你们中的ant专家现在会说这不是一个有效的ant文件,不,不是。这是个冒牌货!
下面是要生成的另外一个文件:
<deployment-report generation-date="Fri Feb 17 10:12:33 CET 2006">
<node name="AppServer1"> <component name="BackendComponent"> <artifact name="MyBackendComponents.jar"> <package name="org.andromda.cartridges.deployment.sampledeployment.mybackendservices"> </package> </artifact> </component> <component name="WebComponent"> <artifact name="MyWebComponents.jar"> <package name="org.andromda.cartridges.deployment.sampledeployment.mywebapp"> </package> <package name="org.andromda.cartridges.deployment.sampledeployment.mywebapp2"> </package> </artifact> </component> </node>
</deployment-report>
|
下面我们会为你演示在cartridge开发流程中的每个步骤的设计。