Discussions

AndroMDA is a code generation framework that follows the Model Driven Architecture (MDA) paradigm. It takes a UML model from a CASE-tool and generates classes and deployable components (J2EE or other) specific for your application architecture.

The AndroMDA Team is proud to release the first release candidate of version 3.0! It includes many new features, bug fixes, and much more documentation. Some of the more notable new features include:

- Code generation targeting the Spring framework has been improved greatly - generating Spring applications is now easier than ever- Completely new How-to documentation for both Spring and bpm4struts cartridges - Hibernate inheritance support has been tremedulously improved (all flavors of hibernate inheritance are now supported) - Performance improvements (AndroMDA is now more than 30% faster for larger projects)

AndroMDA, the leading open source MDA code generation framework, is now backed with professional training and consulting services under the name AndroMDA.com. Matthias Bohlen, the founder of the AndroMDA project, is an expert in Model Driven Architecture and AndroMDA technology and designed a series of training courses that will give users the knowledge they need to make the most out of AndroMDA.

Whether you are a manager and ask yourself which impact MDA may have on your project or whether you are a software architect or developer, looking to use Model Driven Architecture to create a robust and responsive application - in-depth, hands-on training will take you through open source MDA and teach you how to optimize AndroMDA for your needs.

Explore the internals of MDA and the AndroMDA code generation framework together with a person who shares the passion for communicating what MDA is about. This is a unique offering in the industry where you learn directly from the creators of the technology.

Public training sessions are unique experiences. You meet your peers while immersing yourselves in the inner workings of AndroMDA. Trainings take place at high level business hotels.

You will need to bring your own laptop computer for all public technical courses.

Private hands-on training courses enable you to train a team of developers at one time at your own site. There is also some flexibility in the course curricula allowing you to tailor the training course to meet your specific needs - both in terms of subject matter and knowledge-level of your staff. Contact AndroMDA.com, we'll find a way to satisfy your needs!

The next public AndroMDA Boot Camp takes place from April 25 to April 28 in Bonn, Germany. Register online at http://www.andromda.com . In the boot camp, I'll guide you from scratch to writing your own AndroMDA cartridge in only 4 days time! I am looking forward to welcome you there, and I promise: it will be an exciting time!

Are you thinking about supporting model transformations (via your own implementation or just integrating/interoperating with other transformation tool, e.g. Mia-Software http://www.mia-software.com/) ?

yes, we support model transformation although most of our users might not be aware of it and are not yet using it because our samples do not yet show it :-)

The necessary steps inside AndroMDA are:

1) It loads the model into a MOF repository.2) It instantiates the PIM abstract syntax tree (AST).3) It wraps the AST objects with metafacade objects.4) The facades transform the PIM AST into a PSM AST.5) Templates generate text from the PSM AST objects.6) The PSM AST objects are thrown away after the templates have transformed them to text (e.g. source code).

At the moment, most users skip step #4 and let the metafacades produce String objects that fill the placeholders inside the templates. True model transformation has significant advantages over this simple approach.

At the JAX conference this year (see http://www.jax.de ), I'll show model to model translation from step #4 above in a practical demo ("model transformation in practice"). The AndroMDA Boot Camp training also shows how to do it in practice.

Does AndroMDA have (or will have) some language to define model-to-model transformations and what are relationships to emerging Q/V/T OMG standard?

Hi Donatas,

currently, the model-to-model transformations are done in plain Java. As soon as the OMG will select one of the QVT proposals to finalize a standard, we will support that one. In the meantime, we stick to Java.

<blockquoteHi Donatas,currently, the model-to-model transformations are done in plain Java. As soon as the OMG will select one of the QVT proposals to finalize a standard, we will support that one. In the meantime, we stick to Java.Cheers...MatthiasSo this going to be interesting! It is already now interesting :)

Hi Donatas,currently, the model-to-model transformations are done in plain Java. As soon as the OMG will select one of the QVT proposals to finalize a standard, we will support that one. In the meantime, we stick to Java.Cheers...Matthias

metafacades are services that wrap elements from the meta-model: let's say you have modeled a simple class in UML but you would like to interface with it using a domain specific API such as for DBs, then you could have a metafacade called 'Table' wrapping this 'class' element: doing $table.columns would return the underlying class attributes and associations, $table.tableName could return the name modeled in UML but with all characters in uppercase, etc..

each cartridge defines it own meta-model with its unique set of metafacades that map onto the the elements in the UML model, the runtime instances of these facades make up the PSM for that specific UML model

FYI, AndroMDA exposes these facades in templates to easily generate code, it makes the templates much more readable as the transformation know-how is defined in these facades (java code)

they are closely related yes, you can use stereotypes to control how a metafacade is mapped

in AndroMDA you can use a stereotype such as 'ValueObject' on a class to have the ValueObjectFacade wrapped around it, but this approach is rather limited

recently the AndroMDA core has been extended to allow these 'wrappings' to be based on metafacade properties in addition to stereotypes, this clearly has allowed much greater flexibility in the use of metafacades

example: suppose an AndroMDA cartridge-developer wants to put the 'MyPackage' stereotype on a package to denote that all classes owned by that package are to be wrapped by a MyClassFacade

instead of requiring the user to model the 'MyClass stereotype onto each individual class the developer can now simply say: "if the package owning this class has the 'MyPackage' stereotype then wrap it, otherwise don't",

so you see, mapping metafacades envelopes more than just the notion of stereotypes

What you strangely call an AST is presumably just a document object model (DOM) ?

Well, a DOM on a much higher level, yes. It is an in-memory graph made of instances of the metamodel classes. At the moment, our metamodel is mostly UML so the types of the objects that make up the AST are the classes in the UML metamodel.

Example: If you model a "Person" class with a "birthday:Date" attribute and a "calculateAge:int" operation, then you get an abstract syntax tree made of several objects:

When AndroMDA sees the UMLClass object, it wraps it with a ClassifierFacade object so that you can suddenly can call ClassifierFacade.getFullyQualifiedName() and you will get "com.yourcompany.somepackage.Person" as a result. And this is only the beginning!

What you strangely call an AST is presumably just a document object model (DOM) ?

Well, a DOM on a much higher level, yes. It is an in-memory graph made of instances of the metamodel classes.

From your clarification I infer that Andro's engine is based neither on the XMI DOM nor JMI. This surprises me since presumably if JMI isn't good enough to base a model compiler on, then what exactly is JMI good for?!

From your clarification I infer that Andro's engine is based neither on the XMI DOM nor JMI. This surprises me since presumably if JMI isn't good enough to base a model compiler on, then what exactly is JMI good for?!

The engine we use for metadata processing is called Netbeans MetaData Repository (MDR, see http://mdr.netbeans.org). It parses an XMI file with the model, builds the in-memory AST that I was talking about, and makes the AST objects implement the JMI interfaces of the metamodel, as well as the reflective JMI interfaces.

So, all this is 100% compliant to the MOF standards by the OMG.

Based on the JMI-accessible objects, we add model transformation behavior by wrapping them with metafacades. A pure JMI metaobject has no behavior, that's why.

If I want to generate an app completely independent of EJB, and deploy to Tomcat, can I do that today with MDA?I see mention of Hibernate, Spring, etc., but at a quick glance it looked as if the example apps still used Stateless Session Beans.Thanks,Mike

Yes you can do that, very easily. The Spring cartridge by default wraps the services with stateless session beans, however all you need to do is change a property and the ejb generation goes away (no code changes at all). A lot of our users use the Spring cartridge without EJB and deploy to Tomcat.

The application generator (for getting started very quickly with AndroMDA), doesn't generate a standalone war structure yet, it assumes an ear (however it can be easily changed once the structure has been generated). We're planning on making the application generator generate structures for stand-alone wars as well for 3.0 final.

TechTarget provides technology professionals with the information they need to perform their jobs - from developing strategy, to making cost-effective purchase decisions and managing their organizations technology projects - with its network of technology-specific websites, events and online magazines.