thanks for your comment :-)
I have been trying to get on MDA bandwagon for my next project. What might be your recommendation if somebody dont have existing catridges to become a part of this technology.
In the world of AndroMDA you need to have those cartridges to execute the transformation PIM -> PSM -> Implementation. AndroMDA supplies you with
- General cartridge: Java (POJO)
- Business Layer cartridges: EJB 2.x (SSB - EB), Hibernate (SSB - Hibernate)
- Presentation Layer cartridge: Struts (BPM4Struts = Business Process Model for Struts)
1. As a "user" of those cartrigdes (= developers, who develop the business applications), you just need to use those cartridges. The learning process is as follow:
- Create the models with UML (class diagrams, use case diagrams, ...) -> PIM.
- Tag your models (your PIM) with stereotypes and tagged values.
- Compile your models using one of the cartridges above, so you get the skeletons of your application -> PSM (AndroMDA uses AST for the PSM) -> Implementation.
- Implement the application.
-> This is the development cycle for the application development.
2. As a "developer" of those cartridges (= developers, who develop and maintain the cartridges), you need to understand UML Metamodel and the structure of cartridge in AndroMDA:
- The most important thing is: understand the metamodel of UML if you want to use UML for your modelling language! I think, an article in this area is what we need to spread MDA to reach more developers at the moment, because there is no good and simple article about understanding metamodels...
To understand this in AndroMDA => see Metafacades:http://www.andromda.org/docs/andromda-metafacades/index.html
To see the metamodel diagrams of UML 1.4:http://www.andromda.org/docs/andromda-metafacades/resources/UML14Metamodel.pdf
IMO, this part is the most difficult part since you need to think in term of "Meta" model instead of the model itself.
- If you are already fit with those metamodels, you are ready to develop your own cartridges. In general you just extend an existent class diagram (metamodels) to develop your own. You will use the "Meta cartridge" of AndroMDA to generate the first skeleton of your own cartridge. Just "eat your own dog food" :-) This is cool, since you develop your cartridges with the help of another available cartridge...
- After implementing and deploy your cartridge you can give it to your application developers, so that they can use it (see above => "user" of the cartridges).
Although you can see that the there are 2 roles (user and developer of the cartridges) in this art of development, IMO, we need to integrate both, since it is almost impossible to create a perfect cartridge just in one shot. IMO, you need to integrate the cartridge development into your application development, at least as long as the cartridges are not stable yet.
Also in some cases you maybe want to develop your "domain specific cartridges" (like in the domain of eLearning, financial planning, etc. I'm doing a domain specific cartridge eLearning for OpenUSS for example). In this case you need to integrate the development of the cartridges within your application development. Therefore I added AndroMDA into EJOSA (Enterprise Java Open Source Architecture) :-)
At the moment I update EJOSA cartridges to use AndroMDA 3.x instead of 2.x and the process of migrating them is actually pretty easy. I'll release a new version of EJOSA as soon as I finished to migrate all those cartridges into AndroMDA 3.x. If you want to know more about the cartridges in EJOSA, you can read the complete docu:http://prdownloads.sourceforge.net/ejosa/ejosa-revo-doc.pdf?download
Generally I divided them into following structure:
- model: to make the transformation from model to model (e.g.: language transformation cartridge -> If you want to translate your model to other languages: English, German, etc.)
- specification: API -> pure Java interfaces, EJB interface, Remote interface.
- business: EJB, Hibernate, JDO, ...
- presentation: JSP/Struts, XMLC/EAF, Swing, AWT, Midlet...
IMO, it is wise to seperate and classify the cartridges into the above structure.
Hope this helps!