I have dealt last weeks with evaluating SOADesigner (see http://marketplace.obeonetwork.com/module/soa) as a complementary solution of a traditional Enterprise Architecture Management suite we are using at day work. One of our goals when deciding to use this suite was to minimize the gap between architecture analysis and realizations by generating and managing SOA assets such as WSDL and XSD artifacts. Obviously we did not succeed and then evaluate another way to get the job done…
SOADesigner is based on Eclipse tooling and implies many Eclipse Modeling initiative technologies. It provides a bunch of EMF Metamodels related to information system management in general and SOA in particular ; so that models produced on its top can be used by tools like Acceleo for generating text artifacts from.
The purpose of this blog post is to introduce the Acceleo generators I have realized for producing WSDL and XSD artifacts from SOADesigner models. The generators – still a work in progress – have been open sourced and put onto Github. You can find them here https://github.com/lbroudoux/InformationSystem-generators and I’ll explain later how to use them.
As an introduction and to setup ideas, here’s some screenshots of the kind of diagrams and concepts you may work with into SOADesigner.
Exchange model design
This first one, covers the design of the exchange model that will be used for services interface specification. The elements of such a model are called DTO (for Data Transfert Object) and may be initialized from Entity elements. DTO are organized into Category – which is roughly the same notion as a package – within a DTO Registry.
Service model design
This second diagram deals with the specification of Services within a Component. Service may hold many operations through its interface that can be detailed in terms of input and output specifications. You see here that we’re quite close of the SOA / WebServices terminologies apart the missing of fault specification (but there’s a feature request on its way ;-)).
The design generators specifications are the following :
- generate 1 XSD artifact per Category or sub-Category holding DTOs,
- use the parent system name, category name and version to produce distinct file name,
- generate 1 WSDL artifact per Service holding Operations,
- make the WSDL artifact hold only the service related datatypes and reference reusable one from XSD,
- use the service name and version to produce distinct file name
As an example on the nonRegressionModel.is model that is embedded into the tests modules of the Git repository, we achieve the following results in term of artifacts generation :
Generators features and usage
The currently supported features of generators are as followed :
- usage of descriptions put into models to annotate artifacts with documentation,
- usage of multiplicity informations to generate according XSD occurence specifications,
- correct import XSD within another XSD or a WSDL,
- correct usages of different namespaces during inclusions and reuse,
- support of inheritance between DTOs,
- support of composition and references between DTOs
If you would like to give them a try, you’ll have for now to git clone the repository (I have not yet released them under an plugin) and import the plugins/com.github.lbroudoux.acceleo.soa.contracts into your Eclipse workspace. Then you’ll have to create a new Acceleo launcher referencing a fresh model and the com.github.lbroudoux.acceleo.soa.contracts.main.GenerateAll class as the Acceleo generator class.
Obviously, we assumed you’ll have previously installed SOADesigner as mentionned here onto an Eclipse setup – so that you will have designers but also complete Acceleo environment sets up.
As always, feedback and comments are greatly appreciated !