<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
	
	<channel>
		<title>The Enterprise Architect</title>
		<link>http://www.theenterprisearchitect.eu</link>
                
		<description>building an agile enterprise</description>
		<language>en</language>
		<managingEditor>jdenhaan@gmail.com (Johan den Haan)</managingEditor>
                <copyright>Copyright 2009</copyright>
		<generator>Pivot Pivot - 1.40.4: 'Dreadwind'</generator>
		<pubDate>Wed, 08 Jul 2009 10:31:13 +0200</pubDate>
		<ttl>60</ttl>
		
		
		
		
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/TheEnterpriseArchitect" type="application/rss+xml" /><feedburner:emailServiceId>TheEnterpriseArchitect</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
			<title>6 questions to Maarten Steen, experienced researcher in the field of Model Driven Engineering</title>
			<link>http://feedproxy.google.com/~r/TheEnterpriseArchitect/~3/D8BwN44IfYc/6-questions-to-maarten-steen-experienced-researcher-in-the-field-of-model-driven-engineering</link>
			<comments>http://www.theenterprisearchitect.eu/archive/2009/07/08/6-questions-to-maarten-steen-experienced-researcher-in-the-field-of-model-driven-engineering#comm</comments>
                        <description>Recently I visited the second Dutch Model Driven Experience symposium, organized by Maarten Steen. It was interesting to meet other people in the field and to share experiences in the field of &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/01/16/mda-model-driven-architecture-basic-concepts" title="Model-Driven Architecture MDA"&gt;Model-Driven Architecture&lt;/a&gt;, &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/15/mde---model-driven-engineering----reference-guide" title="Model-Driven Engineering MDE"&gt;Model-Driven Engineering&lt;/a&gt;, &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/05/06/dsl-development-7-recommendations-for-domain-specific-language-design-based-on-domain-driven-design" title="Domain-Specific Language DSL design"&gt;Domain-Specific Language design&lt;/a&gt;, &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/18/model-driven-engineering-tools-compared-on-user-activities" title="Model-Driven Software Factories MDSF"&gt;Model-Driven Software Factories&lt;/a&gt;, and most important experiences with Model-Driven approaches in real-life projects. I thought it would be interesting to ask Maarten Steen to share some of his views and years of experience in the field. So, without further ado, six question to Maarten Steen:&lt;h3&gt;Can you please introduce yourself?&lt;/h3&gt;&lt;img src="http://www.theenterprisearchitect.eu/images/090708_maartensteen.png" style="float:right;margin-left:10px;margin-bottom:5px;border:0px solid" title="" alt="" class="pivot-image" /&gt;Of course and thanks for the opportunity to present myself to your audience. You have a very interesting blog that I've been following for about a year now. 
&lt;p&gt;
Like yourself I'm Dutch and based in the Netherlands. However, I have also lived in England and France, and I do not exclude the possibility to eventually settle in Portugal. I am married and have two small children. We are soon to set off again in our mobile home to travel through Europe like nomads as we do every summer. 
&lt;/p&gt;
&lt;p&gt;
I work as a researcher and consultant at Novay, the former Telematics Institute. Novay is an independent, non-profit institute for ICT-based innovation. We help organisations to innovate their products and services or the way they work by using ICT as an enabler. As a researcher and consultant I get the best of both worlds: I can both work together with researchers at universities to advance the state of the art, and I can directly work with enterprises to advise them on how to employ these novel ideas in their organisation.
&lt;/p&gt;
&lt;p&gt;
In addition I try to be active in both the national and international MDD communities. At a national level I organise the annual &lt;a href="http://www.mdexperience.nl/" target="_blank" title="Model Driven Experience symposium"&gt;Model Driven Experience symposium&lt;/a&gt; and I moderate the associated online community of practice. At an international level I am on the steering committee of the International IEEE Enterprise Computing Conference (EDOC) and have hosted this conference once in the past.
&lt;/p&gt;
&lt;p&gt;
For more details, see:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.novay.nl/our-people/maarten-steen/4427" target="_blank" title="Novay profile Maarten Steen"&gt;http://www.novay.nl/our-people/maarten-steen/4427&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.linkedin.com/in/maartensteen" target="_blank" title="LinkedIn profile Maarten Steen"&gt;http://www.linkedin.com/in/maartensteen&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Can you tell something about your research in the field of Model Driven Development?&lt;/h3&gt;
&lt;p&gt;
I first encountered UML, OCL and the idea of model transformation when I was doing my PhD in England at the University of Kent at Canterbury. My own PhD research was about reconciling different formal specifications of distributed systems, which required a kind of horizontal transformation. In addition, I had the opportunity to discuss modelling issues with David Akehurst (developer of the Kent Modelling Framework and SiTra, a Java framework for Simple Transformations) and Stuart Kent (currently responsible for the Microsoft DSL tools). Mind you, this was still before the MDA initiative was launched by OMG! 
&lt;/p&gt;
&lt;p&gt;
Then when I first joined Novay in 1999, I worked mainly on methods, techniques and tools for conceptual modelling in various domains, such as networked enterprises, inter-organizational business processes, enterprise architecture and service-oriented architectures (SOA). So, I guess you could say that I have been researching some form of model-driven engineering (MDE) for over 10 years now. 
&lt;/p&gt;
&lt;p&gt;
The most concrete steps I have been able to make in de recently finished &lt;a href="http://a-muse.freeband.nl/" target="_blank" title="A-Muse project"&gt;A-Muse project&lt;/a&gt;, where we developed a method, several DSLs and supporting tools for model-driven development of context-aware mobile services. Amongst many other lines of research, we test-drove the idea of platform-independence: is it really possible to generate PSMs and code for two different platforms - J2ME and .NET Compact Framework in our case - from a single PIM? The answer was: yes, but it ain't easy. As a side-effect we gained a lot of experience with QVT, the new model-to-model transformation standard, which we published as a kind of design patterns for model transformations. Another interesting experiment was to develop a graphical modeller and code generator for Google's Android platform using Eclipse EMF, GMF and xPand. Through this work, I got very excited about recent developments in Eclipse-based tooling for MDD (EMF, GMF, M2M, M2T). It's getting so much easier now to create the tools that you need. 
&lt;/p&gt;
&lt;p&gt;
My current research is focussing on applying MD-techniques in specific domains. In the &lt;a href="http://www.novay.nl/okb/projecten/vesta/2332" target="_blank" title="VESTA project"&gt;VESTA project&lt;/a&gt;, for example, we are investigating how to model, analyse, simulate and visualise processes and scenarios for public order and safety. The idea is to use model transformations to link the various modelling, analysis and visualization tools used in the project.
&lt;/p&gt;
&lt;h3&gt;What future plans does Novay have in the field of Model Driven Development?&lt;/h3&gt;
&lt;p&gt;
Novay stands for networked innovation. We enable organisations to join forces and innovate together using ICT. The Model Driven Experience symposium is one example where we bring together organisations to exchange their experiences with MDD in order to inspire each other. And we intend to continue this highly successful symposium series in future years.
&lt;/p&gt;
&lt;p&gt;
In addition, we are working on new projects where MD technology plays an enabling role. For example, we are currently investigating the feasibility of a project on combining business rules, business processes, services and objects in the development of enterprise systems. 
&lt;/p&gt;
&lt;h3&gt;What do you see as the most important research gaps in the field of Model Driven Development?&lt;/h3&gt;
&lt;p&gt;
First of all, there is still a considerable gap between the state of the art and the state of practice in MDD. Practitioners rarely go beyond straightforward code generation from UML or DSL models. As a consequence these models are rarely platform-independent. MDD is mainly positioned as a method for increasing developer productivity, whereas it can be used also to get rid of the always problematic business - IT gap. Our efforts should be focussed on raising the level of abstraction at which models are made and used. 
&lt;/p&gt;
&lt;p&gt;
For me the most important research issues are related to this question: how to make MDE more practical? What should an MD development process look like? Which models should be made? In which order? How do we know they are consistent? How do we deal with changes? How do we manage and version models? And one issue I am particularly interested in myself is how to employ model transformation technology to relate and synchronize models from different viewpoints.
&lt;/p&gt;
&lt;h3&gt;You recently organized the second Model Driven Experience conference, did you see emerging trends?&lt;/h3&gt;
&lt;p&gt;
There was a lot of consensus on the advantages and pitfalls of MDD. Almost everyone agrees that MDD reduces development time and costs, increases software quality, increases maintainability and improves communication between stakeholders. On the other hand, it is generally acknowledged that MDD requires changes in culture, process, roles and skills, and that these changes cause resistance. Some also mention that MDD reduces flexibility and introduces new integration problems.
&lt;/p&gt;
&lt;p&gt;
When we organised the symposium for the first time last year, most of the presentations were on experiments and small pilots with MDD. This year the presented initiatives seemed to be much more mature. Several Dutch companies, such as Sligro Food Group, ASR, Ordina, and Capgemini BAS, have a operational model-driven software factory, and others, such as ASML and Philips Healthcare, are using MDD in the development of critical software components. 
&lt;/p&gt;
&lt;p&gt;
Another noticeable development is that UML is hardly used anymore for modelling; almost all MDD initiatives now use some kind of DSL. &lt;br /&gt;
&lt;/p&gt;
&lt;h3&gt;Do you have some advice for the community about how to spread the message of Model Driven Development?&lt;/h3&gt;
&lt;p&gt;
One of the interesting conclusions of the discussion panel at the end of the Model Driven Experience 2009 was that most resistance against MDD comes from within the IT departments, not from the business. Business managers are easily convinced by the usual arguments of lower development and maintenance costs, better and more consistent software quality and reduced time-to-market. The software developers themselves however are often sceptic that their work can be automated. They also may feel that they loose control over the development process and the produced code. 
&lt;/p&gt;
&lt;p&gt;
Organisations that adopt MDD should address these fears. Switching to MDD requires a cultural change both at the business and the IT side. The business people should start feeling responsible for modelling the application domain and the required functionality. They also should learn how to work according to a structured development process. The IT people, on the other hand, should focus on generic solutions, reference architectures and the transformation to specific platform technology, and no longer feel responsible for the business analysis and application design. As with any cultural change, this won't happen overnight. 
&lt;/p&gt;
&lt;p&gt;
As a community we should collect and disseminate the increasing number of success stories to make people more aware of the advantages and implications of model-driven architecture and development.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=D8BwN44IfYc:U7QqMlf5y9A:2M-cTDv4Dz8"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?d=2M-cTDv4Dz8" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=D8BwN44IfYc:U7QqMlf5y9A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?i=D8BwN44IfYc:U7QqMlf5y9A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=D8BwN44IfYc:U7QqMlf5y9A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?i=D8BwN44IfYc:U7QqMlf5y9A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=D8BwN44IfYc:U7QqMlf5y9A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheEnterpriseArchitect/~4/D8BwN44IfYc" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">87@http://theenterprisearchitect.eu/pivot/</guid>
			<category>Common</category>
			<pubDate>Wed, 08 Jul 2009 10:27:00 +0200</pubDate>
		<feedburner:origLink>http://www.theenterprisearchitect.eu/archive/2009/07/08/6-questions-to-maarten-steen-experienced-researcher-in-the-field-of-model-driven-engineering</feedburner:origLink></item>
		
		
		
		<item>
			<title>8 reasons why Model-Driven Development is dangerous</title>
			<link>http://feedproxy.google.com/~r/TheEnterpriseArchitect/~3/kZNM2Qb-xFA/8-reasons-why-model-driven-development-is-dangerous</link>
			<comments>http://www.theenterprisearchitect.eu/archive/2009/06/25/8-reasons-why-model-driven-development-is-dangerous#comm</comments>
                        <description>Last week I gave a talk at the Hogeschool Arnhem Nijmegen as part of the conference &amp;quot;Information Systems the Next Generation&amp;quot;. This article is &lt;em&gt;inspired&lt;/em&gt; by a talk titled &amp;quot;Model Based Development - How to organize and architect survival of &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/06/11/mda_mdd_mde_mdsd_mdse_help" title="MD*"&gt;MD*&lt;/a&gt;&amp;quot; by Wiebe Wiersema given at the same conference. It was a well-balanced, realistic talk about the do's and don'ts of Model Driven Development.
&lt;p&gt;
While Model-Driven Development (MDD) is getting more and more attention by both tool vendors and developers, I think it's time to look at 8 reasons why MDD is dangerous. If you recognize one of these points from your practical experiences or if you think you have a solution for (almost) all points, please let me know it in the comments! Although &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/03/31/5-types-of-model-driven-software-development" title="Different model driven software development approaches"&gt;model-driven approaches can differ a lot&lt;/a&gt;, I think these 8 points can be applied to almost all of them.&lt;/p&gt;&lt;img src="http://www.theenterprisearchitect.eu/images/090624_dangerous.png" style="float:right;margin-left:10px;margin-bottom:5px;border:0px solid" title="MDD can be dangerous" alt="MDD can be dangerous" class="pivot-image" /&gt;
&lt;h3&gt;1. MDD actually introduces a lot of rigidity&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;
If you're used to programming everything by hand, MDD can be quite rigid. The goal of MDD is to &amp;lsquo;program' on a higher level of abstraction. This means that you have to specify less and generate more. However, this also means that you can't change every little detail you want. It is, for example, often the case that generated graphical user interface are inflexible and they all look like each other.
&lt;/p&gt;
&lt;h3&gt;2. Models are only flexible where flexibility has been designed&lt;/h3&gt;
&lt;p&gt;
The problem with using models to directly drive the engineering of software is that they are far from flexible. First, you are limited by the kind of &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/18/model-driven-engineering-tools-compared-on-user-activities" title="MDE tool"&gt;Model Driven Engineering tool&lt;/a&gt; you use. Second, you're only flexible in the parts of the solution covered by the used &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/05/06/dsl-development-7-recommendations-for-domain-specific-language-design-based-on-domain-driven-design" title="DSL Domain Specific Language"&gt;Domain-Specific Languages&lt;/a&gt;. The higher level the DSL the more commonalities are &amp;lsquo;hard-coded' in the framework or engine you use. Third, sometimes models are made flexible at predefined points by lower level expressions or languages. That's nice, but hopefully it is exactly done at the points you'll need it.
&lt;/p&gt;
&lt;h3&gt;3. The roles of project members are quite different&lt;/h3&gt;
&lt;p&gt;
You need to be aware of the fact that the &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/04/roles-in-model-driven-engineering" title="roles in Model Driven Engineering"&gt;roles in Model-Driven Engineering&lt;/a&gt; are different from the roles in traditional development. The real technical or programming part is mostly moved to the &amp;lsquo;meta-team' building the &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/18/model-driven-engineering-tools-compared-on-user-activities" title="Model Driven Software Factory"&gt;model-driven software factory&lt;/a&gt;. Building the solution is done by so-called business engineers instead of programmers. These people need to understand the business (like e.g. traditional functional designers) but they also need to express the knowledge they gather in a formal model. People able to do both these things are quite rare.
&lt;/p&gt;
&lt;h3&gt;4. The modeling environment doesn't always support version control&lt;/h3&gt;
&lt;p&gt;
If you have experience with building (enterprise) software applications I guess you're using a version control system. If not you should go and read &lt;a href="http://betterexplained.com/articles/a-visual-guide-to-version-control/" target="_blank" title="explanation of version control systems"&gt;this nice explanation&lt;/a&gt;. Existing version control systems work very well for textual programming languages. However, versioning of graphical models is a far less researched field. Most existing modeling and model-driven tools don't include a full featured versioning system. That's a pain when working with large teams.
&lt;/p&gt;
&lt;h3&gt;5. The modeling tool/approach is &amp;quot;almost&amp;quot; finished at project start&lt;/h3&gt;
&lt;p&gt;
The famous word &amp;quot;almost&amp;quot; is pitifully used a lot when talking about how far the model-driven software factory is finished at the start of a project. People building a model-driven software factory using &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/18/model-driven-engineering-tools-compared-on-user-activities" title="DSL tool"&gt;DSL tools &lt;/a&gt;will have a lot of fun during the process. However, if the factory isn't finished and tested in practice before you are going to start a big project you will have a huge risk! If you're not scared by this article to use MDD, at least use a proven tool/approach!
&lt;/p&gt;
&lt;h3&gt;6. The requirements team needs to understand what is allowed and what not&lt;/h3&gt;
&lt;p&gt;
In point 1 and 2 I pointed at the rigidity and inflexibility of MDD. This is mostly dangerous from a technical perspective. However, it is even more dangerous when the requirements team, i.e. the people talking with the customer, don't understand the limitations of the used tool/approach. In the ideal situation, the people talking with the customer directly translate their knowledge in executable models. However, in big projects you often see a separation in two roles. As in traditional development this can lead to a gap. This gap can become a nasty problem if the requirements team doesn't understand the limitations of the tool/approach. For example, the requirements team reaches a consensus with the customer on a certain part of the graphical user interface (let's say a form), while it isn't possible to build  that form with the model-driven tool without a lot of custom handiwork.
&lt;/p&gt;
&lt;h3&gt;7. MDD is sold to the customer, but the team has no experience&lt;/h3&gt;
&lt;p&gt;
While MDD is becoming more popular, customers start to ask for model-driven solutions. Actually I think MDD will become a hype (again!) very soon, and as with each hype everybody will start sticking the MDD label on their products. Doing a project in a model-driven way with an inexperienced team can lead to at least two problematic situations. First, the solution will not be build on time and it will not fulfill the customers' expectations due to most of the issues mentioned in the previous points. Second, big chance the end product isn't as easy to change as you expect from a solution built using a model-driven approach, due to misuse of the tool, not knowing its limitations, or due to using immature tools.
&lt;/p&gt;
&lt;h3&gt;8. Innovation distracts&lt;/h3&gt;
&lt;p&gt;
Last but not least, MDD is dangerous because innovation distracts. People tend to focus on the new tool they are using with all its cool features. Even more, people will start bragging about the great advantages they have with the new technology, in the end forgetting the projects objectives. Experiments have been done actually showing this behavior of project teams starting to use new innovative tools. The important lesson: don't forget your project management, your process, and all other things you need beside the tool or technical approach you use!
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
See also &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/21/10-misperceptions-and-challenges-of-model-driven-development" title="Challenges and risks of MDD"&gt;10 Misperceptions and challenges of Model Driven Development&lt;/a&gt; or &lt;a target="_blank" href="http://www.infoq.com/articles/8-reasons-why-MDE-fails" title="8 pitfalls of model driven engineering MDE"&gt;8 Reasons Why Model-Driven Approaches (will) Fail&lt;/a&gt; for a critical analysis of MDD.
&lt;/p&gt;
&lt;p&gt;
Photo by &lt;a href="http://www.flickr.com/photos/netwalker/2990809708/" target="_blank" title="netwalker"&gt;netwalker&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=kZNM2Qb-xFA:u92xOWYnaW4:2M-cTDv4Dz8"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?d=2M-cTDv4Dz8" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=kZNM2Qb-xFA:u92xOWYnaW4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?i=kZNM2Qb-xFA:u92xOWYnaW4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=kZNM2Qb-xFA:u92xOWYnaW4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?i=kZNM2Qb-xFA:u92xOWYnaW4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=kZNM2Qb-xFA:u92xOWYnaW4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheEnterpriseArchitect/~4/kZNM2Qb-xFA" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">86@http://theenterprisearchitect.eu/pivot/</guid>
			<category>Software Engineering</category>
			<pubDate>Thu, 25 Jun 2009 22:44:00 +0200</pubDate>
		<feedburner:origLink>http://www.theenterprisearchitect.eu/archive/2009/06/25/8-reasons-why-model-driven-development-is-dangerous</feedburner:origLink></item>
		
		
		
		<item>
			<title>A Framework for Model-Driven SOA</title>
			<link>http://feedproxy.google.com/~r/TheEnterpriseArchitect/~3/pC72euVgwE4/a-framework-for-model-driven-soa</link>
			<comments>http://www.theenterprisearchitect.eu/archive/2009/06/03/a-framework-for-model-driven-soa#comm</comments>
                        <description>&lt;img src="http://www.theenterprisearchitect.eu/images/framework.png" style="float:left;margin-right:10px;margin-bottom:5px;border:0px solid" title="Framework" alt="Framework" class="pivot-image" /&gt;A couple of weeks ago I gave &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/04/14/the-science-of-model-driven-soa" title="Science research Model Driven SOA"&gt;an overview of two scientific publications&lt;/a&gt; researching a framework (or methodology) providing end-to-end guidance and assistance to refine and transform business models created by business experts into IT models and then to IT implementation. I tend to refer to these frameworks as &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/26/soa-is-dead-long-live-model-driven-soa" title="Model Driven SOA MDA MDE"&gt;Model-Driven SOA&lt;/a&gt;, because they focus on using models to construct an IT implementation complying to SOA principles.
&lt;p&gt;
However, I didn't elaborate on the practical applicability of these studies. I asked you for your opinion. From the comments on the article and the discussion in the &lt;a href="http://www.linkedin.com/groups?gid=50539" target="_blank" title="LinkedIn MDA group"&gt;LinkedIn MDA&lt;/a&gt; group triggered by this article, it became clear to me that there's a need to describe Model-Driven SOA in more detail before we can sufficiently compare different approaches and discuss the needed models, languages, and transformations.
&lt;/p&gt;
&lt;p&gt;
In this article I present a generic framework describing Model-Driven SOA. I first describe the common terms in system development, like design, engineering, and architecture. After that we can apply these terms to a Service-Oriented Architecture (SOA) based development process. Finally, I want to define the requirements making this SOA system development process a &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/15/mde---model-driven-engineering----reference-guide" title="Model Driven Engineering MDE reference guide"&gt;Model-Driven Engineering&lt;/a&gt; approach.&lt;/p&gt;&lt;h3&gt;System Development&lt;/h3&gt;System development is the bringing about of a new system or of changes to an existing system. The system development process comprises all activities that have to be performed in order to arrive at an implemented system. Such a development process can be described by the Generic System Development Process (GSDP) as introduced in [1] and recently described in more detail in [2]. Figure 1 exhibits the GSDP. At first sight it can looks a bit abstract, but give me a moment to explain it and I hope you'll see that it's in fact an easy and powerful way to explain the common terms in software development.
&lt;p align="center" style="text-align:center;"&gt;&lt;img src="http://www.theenterprisearchitect.eu/images/gsdp.png" style="border:0px solid" title="Generic System Development Process" alt="Generic System Development Process" class="pivot-image" /&gt;&lt;/p&gt;&lt;br /&gt;
&lt;em&gt;Figure 1 - The Generic System Development Process [2]&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
I have explained this process before in &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2007/05/15/architecture-a-definition" title="definition of architecture"&gt;a post on the definition of architecture&lt;/a&gt;. So, for details I refer to that post. However, the process has slightly changed over the years as did my view on it. I will therefore briefly explain this generic system development process again.
&lt;/p&gt;
&lt;p&gt;
The GSDP always concerns two systems, the object system (i.e. the system which is going to be developed) and the using system (i.e. the system that is going to use the functionality of the object system). If we, for example, want to build a human resource management (HRM) information system, this HRM information system is the object system. The using system is the HRM department. People are often referring to the using system as the problem domain, while they call the object system the solution domain.
&lt;/p&gt;
&lt;p&gt;
While in a lot of cases no construction model of the using system exists, we need to reconstruct the higher level models from the implementation. This process is known as reverse engineering. Let's look again at our HRM system example. Before we can build an HRM information system supporting a certain HRM department we need to know &lt;em&gt;what&lt;/em&gt; to support. We need to describe the using system and the only way to come to this description is to use reverse engineering. In case of the HRM department reverse engineering means talking with the people (the &amp;quot;implementation&amp;quot; of the using system) to learn how their work is performed.
&lt;/p&gt;
&lt;p&gt;
The design process is split into function design and construction design. Function design starts from the construction of the using system and ends with a functional (black-box) model of the object system. This functional model describes the external behavior of the object system in terms of the using system, it doesn't talk about the construction of the object system. The functional model of an HRM information system can for example be describe with use cases.
&lt;/p&gt;
&lt;p&gt;
Construction design starts with the functional model and ends with a construction (white-box) model of the object system. As shown in Figure 1 multiple construction models can exist on different abstraction levels.
&lt;/p&gt;
&lt;p&gt;
The engineering of a system is the activity in which the highest level constructional model is converted into lower level models until the implementation model is constructed. Dietz defines the highest level constructional model as the ontology of a system, i.e. a model of the construction of a system that is completely independent of the way in which it is implemented [2]. This can be compared to the Platform Independent Model (PIM) in the &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/01/16/mda-model-driven-architecture-basic-concepts" title="Model Driven Architecture MDA"&gt;Model Driven Architecture (MDA)&lt;/a&gt;. In practice it is often the case that not all constructional models are defined, in most cases only the implementation model (the lowest level constructional model) is defined in a programming language (e.g. Java, C#, C++).
&lt;/p&gt;
&lt;p&gt;
Implementing a system means assigning technological means to the constructional elements in the implementation model [2]. In case of an implementation model expressed in a programming language, the implementation is the compilation of that model to a specific platform. Once a system is implemented it can be put into operation.
&lt;/p&gt;
&lt;p&gt;
The last part of the generic system development process is &amp;quot;architecture&amp;quot;. Dietz uses the &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2007/05/15/architecture-a-definition" title="prescriptive notion of architecture"&gt;prescriptive notion of architecture&lt;/a&gt;, in contrast to the descriptive notion of architecture. The descriptive definition defines architecture as 'blue-prints', but the GSDP already refers to this by &amp;quot;constructional model&amp;quot; or &amp;quot;ontology&amp;quot;. The prescriptive notion of architecture sees  architecture as a consistent and coherent set of design principles. In the generic system development process, architecture is split into functional principles guiding the function design and constructional principles guiding the construction design.
&lt;/p&gt;
&lt;h3&gt;Service-Oriented Software Development&lt;/h3&gt;
&lt;p&gt;
It's time to tailor the generic system development process to a service-oriented development process. Lot's of SOA definitions exist, but I prefer to see &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/05/19/architecture-requirements-for-service-oriented-business-applications" title="Service Oriented Business Applications SOBA architecture"&gt;SOA as an architectural style&lt;/a&gt;. Figure 2 shows the service-oriented development process, based on the generic system development process.
&lt;/p&gt;
&lt;p align="center" style="text-align:center;"&gt;&lt;img src="http://www.theenterprisearchitect.eu/images/soa-gsdp.jpg" style="border:0px solid" title="Service Oriented Development Process" alt="Service Oriented Development Process" class="pivot-image" /&gt;&lt;/p&gt;&lt;br /&gt;
&lt;em&gt;Figure 2 - The Service-Oriented Development Process&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
As shown in Figure 2 the using system is an organization (or part of an organization) which can be modeled with an organization model. Such a model can consist of process models or just textual descriptions. The organization model needs to be reverse engineered from the organization's implementation, which is in most cases a group of people and optionally already existing software. 
&lt;/p&gt;
&lt;p&gt;
The object system is an ICT system, to be designed and implemented to support the organization. The design, consisting of function and construction design, is guided by architecture principles. In case of a service-oriented development process the design is guided by SOA principles. A good overview of SOA principles is given by Thomas Erl in his book &amp;quot;Principles of Service Design&amp;quot; [3].
&lt;/p&gt;
&lt;p&gt;
While the functional model of the software to build is defined with a set of services, the function design step consists of &lt;em&gt;service identification&lt;/em&gt; and &lt;em&gt;service specification&lt;/em&gt;. First the set of needed services is identified based on the organization model, next each service is specified in more detail (preferably using a standardized template). I'm just giving the outline of a generic service-oriented development process, so the details of question like &amp;quot;what exactly is a service?&amp;quot; and &amp;quot;how to specify a service?&amp;quot; are left for future ramblings.
&lt;/p&gt;
&lt;p&gt;
The next step in the process is to take the functional specification consisting of service specifications and to design the construction of the needed ICT system which is going to provide these services. Following the &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/03/11/what-every-architect-should-now-know-about-the-service-component-architecture-sca" title="Service Component Architecture SCA"&gt;Service Component Architecture (SCA)&lt;/a&gt; services can be grouped in components, which in their turn can be implemented with other components. Hence, service-oriented construction design consists of component identification. The highest level constructional model can for example be described by an SCA-based model.
&lt;/p&gt;
&lt;p&gt;
The &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/03/11/what-every-architect-should-now-know-about-the-service-component-architecture-sca" title="SCA Service Component Architecture"&gt;SCA&lt;/a&gt; also specifies how components can be implemented. Example component implementation possibilities are Java, .NET, and BPEL. So, the engineering step consists of specifying component implementations using Java, .NET, or BPEL, resulting in an implementation model consisting of artifacts described in these languages. This implementation model can be &amp;quot;implemented&amp;quot; on technology thereby resulting in the final software application, i.e. a &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/05/19/architecture-requirements-for-service-oriented-business-applications" title="SOBA Service Oriented Business Application"&gt;Service-Oriented Business Application&lt;/a&gt;. Implementation of the implementation model means &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/03/11/what-every-architect-should-now-know-about-the-service-component-architecture-sca" title="Deploying SCA artifacts"&gt;deploying all constructed artifacts to an SCA container&lt;/a&gt;.
&lt;/p&gt;
&lt;h3&gt;
Model-Driven Service-Oriented Software Development&lt;/h3&gt;
&lt;p&gt;
Now what distinguishes SOA from Model-Driven SOA? I've already stated the term &amp;quot;model&amp;quot; a couple of times in the previous section and in Figure 2, but does that make the described service-oriented development process model driven? &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/15/mde---model-driven-engineering----reference-guide" title="MDE Model Driven Engineering"&gt;Model-driven engineering&lt;/a&gt; is based on formal models which are transformed into other models until the lowest level model can be executed with an engine or until code can be generated from that model (for more explanation read &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/03/31/5-types-of-model-driven-software-development" title="5 types of Model Driven Software Development"&gt;this introduction into model-driven software development&lt;/a&gt;). As we saw in the previous section the models are not necessarily formal and the implementation model is directly specified in a programming language. So, what are the requirements for Model-Driven SOA?
&lt;/p&gt;
&lt;p&gt;
First, each model needs to be formal, i.e. it needs to be specified in a well-defined language. As we know from the previous the following models are needed:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;em&gt;Organization model&lt;/em&gt; - for example specified in &lt;a href="http://www.bpmn.org/" target="_blank" title="BPMN"&gt;BPMN&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Service model&lt;/em&gt; - mostly consisting of service specifications which are represented with a table listing some properties.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Component model&lt;/em&gt; - for example specified using the &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/03/11/what-every-architect-should-now-know-about-the-service-component-architecture-sca" title="SCA Service Component Architecture assembly"&gt;SCA assembly specification&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Component implementation model&lt;/em&gt; - each component can be specified with &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/08/11/dsl-and-mde-necessary-assets-for-model-driven-approaches" title="MDE and DSL necessary assets for model driven development"&gt;a set of connected Domain-Specific Languages (DSLs)&lt;/a&gt;, meaning that a component implementation model can be considered as a &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/11/03/domain-specific-modeling-needs-multi-models" title="multi-model domain specific modeling"&gt;multi-model&lt;/a&gt;.
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Second, each model (except for the first model) is linked to the previous model, derived from the previous model, or a refinement of the previous model. The following steps are part of a Model-Driven SOA process:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;em&gt;Reverse engineering&lt;/em&gt; - an organization model is manually created.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Function design&lt;/em&gt; - a service model is derived from the organization model, whether this can be automated or not depends on how formal the organization model is. In most cases this is handiwork. Elements of the service model are linked to the organization model to enable tracing.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Construction design&lt;/em&gt; - a component model is derived from the service model. This is again a manual job.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Engineering &lt;/em&gt;- a component implementation model is a refinement of the component model. Implementation elements are specified in detail using DSLs.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Implementation &lt;/em&gt;- the component implementation model is implemented on technology, i.e. the models specified using DSLs are executed on high-level engines. The result is a &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/05/19/architecture-requirements-for-service-oriented-business-applications" title="Service Oriented Business Application SOBA"&gt;Service-Oriented Business Application&lt;/a&gt;.
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/04/roles-in-model-driven-engineering" title="Roles in Model Driven Engineering"&gt;Multiple roles&lt;/a&gt; are involved in such a process using &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/18/model-driven-engineering-tools-compared-on-user-activities" title="Model Driven Engineering MDE tools"&gt;different tools&lt;/a&gt;. An important aspect for the success of a Model-Driven SOA approach is the ability to specify DSLs which are both high-level and directly executable. Constructing such DSLs can be quite a challenge, I gave &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/05/06/dsl-development-7-recommendations-for-domain-specific-language-design-based-on-domain-driven-design" title="Domain Specific Language DSL design and development"&gt;an overview and 7 recommendations for DSL development in my previous post&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
A second important aspect for Model-Driven SOA is the traceability of decisions throughout the model chain. It should be possible to trace a model element in the component implementation model back to the organization model and the other way around. 
&lt;/p&gt;
&lt;p&gt;
This also leads to the last important aspect for Model-Driven SOA I want to mention: change propagation. The organization model and service model are very useful for gaining a quick insight in the function of the system. The real power of these models will become available if a change in the organization model leads to an automatic impact analysis on the service model. The same should hold for changes in the service model and how they affect the organization model and component model. 
&lt;/p&gt;
&lt;p&gt;
If you look back at Figure 2, I think it is a good recommendation that models which are connected horizontally (organization model - service model - component model) do not automatically propagate changes, they should report inconsistencies and provide a change impact analysis. Vertically connected models (the models used in the engineering step) will need automatic change propagation to provide productivity improvements, otherwise you're half of the time busy with keeping the models consistent. In case of organization, service, and component models, you should be busy with that because in the consistency between these models lay most of the design decisions.
&lt;/p&gt;
&lt;h3&gt;
Conclusion&lt;/h3&gt;
&lt;p&gt;
I hope this article gave you more insight in my ideas with respect to Model-Driven SOA. I have only described the framework including the needed models and transformations between these models. An important aspect to talk about in the future is the languages these models are specified in, i.e. the exact form of these models. Other aspects are needed tooling and technology (runtime engines). Moreover, every time we talk about such a model-driven approach, we shouldn't forget &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/21/10-misperceptions-and-challenges-of-model-driven-development" title="challenges of model driven development"&gt;these 10 misperceptions and challenges of Model-Driven Development&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
I'd like to hear your thoughts on this model-driven SOA framework! I'm also interested in your experiences with using a model-driven approach to build software supporting (part of) an organization. What are your important learned lessons? What challenges are you dealing with?
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
---------------------------&lt;br /&gt;
[1] J.L.G. Dietz and J.A.P. Hoogervorst. &lt;em&gt;Enterprise Ontology and Enterprise Architecture - how to let them evolve into effective complementary notions&lt;/em&gt;. GEAO Journal of Enterprise Architecture, 1, 2007.
&lt;/p&gt;
&lt;p&gt;
[2] J.L.G. Dietz. &lt;em&gt;Architecture - Building strategy into design&lt;/em&gt;. Academic Service, The Hague, The Netherlands, 2008.
&lt;/p&gt;
&lt;p&gt;
[3] Thomas Erl. &lt;em&gt;Principles of Service Design&lt;/em&gt;. The Prentice Hall Service-Oriented Computing Series from Thomas Erl. Prentice Hall, Upper Saddle River, NJ, USA, 2007.
&lt;/p&gt;
&lt;p&gt;
Photo by &lt;a href="http://www.flickr.com/photos/charlesbodi/236037049/" target="_blank" title="Framework by Ride My Pony"&gt;Ride My Pony&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=pC72euVgwE4:9rZTzvbUQ0k:2M-cTDv4Dz8"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?d=2M-cTDv4Dz8" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=pC72euVgwE4:9rZTzvbUQ0k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?i=pC72euVgwE4:9rZTzvbUQ0k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=pC72euVgwE4:9rZTzvbUQ0k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?i=pC72euVgwE4:9rZTzvbUQ0k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=pC72euVgwE4:9rZTzvbUQ0k:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheEnterpriseArchitect/~4/pC72euVgwE4" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">85@http://theenterprisearchitect.eu/pivot/</guid>
			<category>Software Engineering</category>
			<pubDate>Wed, 03 Jun 2009 17:36:00 +0200</pubDate>
		<feedburner:origLink>http://www.theenterprisearchitect.eu/archive/2009/06/03/a-framework-for-model-driven-soa</feedburner:origLink></item>
		
		
		
		<item>
			<title>DSL development: 7 recommendations for Domain Specific Language design based on Domain-Driven Design</title>
			<link>http://feedproxy.google.com/~r/TheEnterpriseArchitect/~3/yDCrEA4DQSA/dsl-development-7-recommendations-for-domain-specific-language-design-based-on-domain-driven-design</link>
			<comments>http://www.theenterprisearchitect.eu/archive/2009/05/06/dsl-development-7-recommendations-for-domain-specific-language-design-based-on-domain-driven-design#comm</comments>
                        <description>The term Domain-Specific Language (DSL) is heard a lot nowadays. A DSL is a language developed to address the need of a given domain. This domain can be a problem domain (e.g. insurance, healthcare, transportation) or a system aspect (e.g. data, presentation, business logic, workflow). The idea is to have a language with limited concepts which are all focused on a specific domain. This leads to higher level languages improving developer productivity and communication with domain experts. In a lot of cases it is even possible to let domain experts use the DSL and develop applications.
&lt;p&gt;
The question for this article is: &lt;strong&gt;how to develop a Domain-Specific Language?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I'll first explain the DSL lifecycle, consisting of the phases: decision, analysis, design, implementation, deployment, and maintenance. Afterwards I'll give 7 recommendations for DSL development based on my experiences with developing non-trivial DSLs.&lt;/p&gt;&lt;h3&gt;The DSL lifecycle&lt;/h3&gt;&lt;img src="http://www.theenterprisearchitect.eu/images/lifecycle_small.jpg" style="float:right;margin-left:10px;margin-bottom:5px;border:0px solid" title="" alt="" class="pivot-image" /&gt;According to Mernik et al. [1] the DSL life cycle consists of five development phases: decision, analysis, design, implementation and deployment. Eelco Visser [2] adds maintenance as the sixth phase in the lifecycle of DSLs. Note that in practice DSL Development isn't a sequential process, the phases should be applied iteratively. 
&lt;p&gt;
Let's look at each phase in more detail.
&lt;/p&gt;
&lt;h4&gt;1. Decision &lt;/h4&gt;
&lt;p&gt;
The development of a DSL starts with the decision to develop a DSL, to reuse an existing one, or to use a GPL. If a domain is very fresh and little knowledge is available, it doesn't make sense to start developing a DSL. In order to determine the basic concepts of the field, first the regular software engineering process should be applied and a code base supported with libraries should be developed [2]. 
&lt;/p&gt;
&lt;p&gt;
In other words: if you never have developed an application for a certain domain by hand and you have no existing code base, it isn't smart to start implementing a DSL and its associated code generators or execution engine.
&lt;/p&gt;
&lt;p&gt;
The situation differs of course for non-executable DSLs. However, as you need experience with existing code for executable DSL, along the same lines you'll need a deep understanding of the domain you are modeling for non-executable DSLs.
&lt;/p&gt;
&lt;h4&gt;2. Analysis &lt;/h4&gt;
&lt;p&gt;
In the analysis phase the problem domain is identified and domain knowledge is gathered. The output of formal domain analysis is a domain model consisting of [1]:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;a domain definition, defining the scope of the domain,&lt;/li&gt;
	&lt;li&gt;domain terminology (vocabulary, ontology),&lt;/li&gt;
	&lt;li&gt;descriptions of domain concepts, and&lt;/li&gt;
	&lt;li&gt;feature models describing the commonalities and variabilities of domain concepts and their interdependencies. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The information gathered in this phase can be used to develop the actual DSL. Variabilities indicate what elements should be specified in the DSL, while commonalities are used to define the execution engine or domain framework.
&lt;/p&gt;
&lt;p&gt;
If you, for example, analyze a couple of existing code bases in a certain domain, you can split the elements of this code in two parts: the parts that differ and the parts that are the same for each code base. The static parts (the commonalities) can, depending on your implementation approach, be part of the execution engine interpreting the DSL or can be put in a domain framework which is used by the generated code. The parts that differ (the variabilities) should be specified in the DSL, these are the parts which a user of the DSL needs to &amp;lsquo;configure'.
&lt;/p&gt;
&lt;p&gt;
Eelco Visser [2] recommends an inductive approach which, in opposite to designing the complete DSL before implementation, incrementally introduces abstractions that allow to capture a set of common programming patterns in software development for a particular domain. He also states that developing the DSL in iterations can mitigate the risk of failure. Instead of a big project that produces a functional DSL in the end, an iterative process produces useful DSLs for sub-domains early on. 
&lt;/p&gt;
&lt;p&gt;
In the second part of this article I will give 7 additional recommendations for the analysis and design phase of a DLS, based on my own experiences. 
&lt;/p&gt;
&lt;h4&gt;3. Design&lt;/h4&gt;
&lt;p&gt;
Approaches to DSL design can be characterized along two orthogonal dimensions: the relationship between the DSL and existing languages, and the formal nature of the design description [1]. A DSL can be designed from scratch or it can be easier to base it on an existing language. 
&lt;/p&gt;
&lt;p&gt;
Mernik et al. [1] identify three different patterns of design based on existing languages: 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;em&gt;piggyback&lt;/em&gt;: existing language is partially used,&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;specialization&lt;/em&gt;: existing language is restricted, and&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;extension&lt;/em&gt;: existing language is extended. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Besides the relation with existing languages the formal nature can range between: 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;em&gt;informal&lt;/em&gt;: a DSL specified in natural language and/or with examples, and&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;formal&lt;/em&gt;: a DSL specified using one of the available semantic definition methods, e.g. regular expressions, grammars, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
It is important to decide what approach to take, however, it is maybe even more important to keep this lesson in mind [3]:
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;em&gt;Lesson T2&lt;/em&gt;: &lt;strong&gt;You are almost never designing a programming language.&lt;/strong&gt;&lt;br /&gt;
	Most DSL designers come from language design backgrounds. There the admirable principles of orthogonality and economy of form are not necessarily well-applied to DSL design. Especially in catering to the pre-existing jargon and notations of the domain, one must be careful not to embellish or over-generalize the language.
&lt;/blockquote&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;em&gt;Lesson T2 Corollary&lt;/em&gt;: Design only what is necessary. Learn to recognize your tendency to over-design.
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;4. Implementation&lt;/h4&gt;
&lt;p&gt;
For executable DSLs the most suitable implementation approach should be chosen. Mernik et al. [1] identify seven different implementation patterns, all with different characteristics: 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;em&gt;interpreter&lt;/em&gt;, DSL constructs are recognized and interpreted using a standard fetch-decode-execute cycle. With this pattern no transformation takes place, &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/15/mde---model-driven-engineering----reference-guide#model-interpretation" title="Model Interpretation"&gt;the model is directly executable&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;compiler/application generator&lt;/em&gt;, DSL constructs are translated to base language constructs and library calls. People are mostly talking about &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/15/mde---model-driven-engineering----reference-guide#code-generation" title="code generation"&gt;code generation&lt;/a&gt; when pointing at this implementation pattern.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;preprocessor&lt;/em&gt;, DSL constructs are translated to constructs in an existing language (the base language). Static analysis is limited to that done by the base language processor.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;embedding&lt;/em&gt;, DSL constructs are embedded in an existing GPL (the host language) by defining new abstract data types and operators. A basic example are application libraries. This type of DSL is mostly called an &lt;a href="http://www.martinfowler.com/bliki/DomainSpecificLanguage.html" target="_blank" title="Internal DSL"&gt;internal DSL&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;extensible compiler/interpreter&lt;/em&gt;, a GPL compiler/interpreter is extended with domain-specific optimization rules and/or domain-specific code generation. While interpreters are usually relatively easy to extend, extending compilers is hard unless they were designed with extension in mind.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;commercial off-the-shelf&lt;/em&gt;, existing tools and/or notations are applied to a specific domain. You don't have to define your DSL, editor and DSL implementation approach yourself, you just make use of a &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/18/model-driven-engineering-tools-compared-on-user-activities" title="Model Driven Software Factory"&gt;Model Driven Software Factory&lt;/a&gt;. You can, for example, use the &lt;a href="http://www.mendix.com/products/technology" target="_blank" title="Mendix Model-Driven Enterprise Application Platform"&gt;Mendix Model-Driven Enterprise Application Platform&lt;/a&gt; targeted at the domain of &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/05/19/architecture-requirements-for-service-oriented-business-applications" title="SOBA Service Oriented Business Application"&gt;Service-Oriented Business Applications&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;hybrid&lt;/em&gt;, a combination of the above approaches.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
While the different approaches can make a big difference in the total effort to be invested in DSL development, the choice for a particular approach is very important.
&lt;/p&gt;
&lt;h4&gt;5. Deployment &lt;/h4&gt;
&lt;p&gt;
In the deployment phase the DSLs and the applications constructed with them are used. Developers and/or domain experts use the DSLs to specify models. These models are implemented with one of the implementation patterns presented in the previous section (e.g. the models are interpreted by an engine). Such an implementation results in working software which is used by end-users.
&lt;/p&gt;
&lt;h4&gt;6. Maintenance&lt;/h4&gt;
&lt;p&gt;
While domain experts themselves can understand, validate, and modify the software by adapting the models expressed in DSLs, modifications are easier to make and their impact is easier to understand. However, more substantial changes in the software may involve altering the DSL implementation. So, like any other element of software a DSL will evolve over time. Therefore having a &lt;a href="http://martinfowler.com/bliki/DslMigration.html" target="_blank" title="DSL migration"&gt;DSL migration&lt;/a&gt; strategy is very important.
&lt;/p&gt;
&lt;p&gt;
Besides migration strategies, I have two recommendations which alleviate the maintenance risks of DSLs: 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;use a good &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/18/model-driven-engineering-tools-compared-on-user-activities" title="DSL tools"&gt;DSL tool&lt;/a&gt;, which at least generates editors and generators / interpreters from your language definition, and&lt;/li&gt;
	&lt;li&gt;implement &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/11/03/domain-specific-modeling-needs-multi-models" title="Multi-model DSL"&gt;models specified in different DSLs&lt;/a&gt; with different loosely coupled engines. In this way maintenance of a specific DSL or its compiler does not affect the whole system and the engines can make use of different technologies. In case of business applications, this calls for an &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/05/19/architecture-requirements-for-service-oriented-business-applications" title="Architecture for Service Oriented Business Application"&gt;architecture encouraging the development of Service-Oriented Business Applications&lt;/a&gt;, i.e. an application composed of multiple loosely-coupled services.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Seven Domain-Driven Design based recommendations for DSL Development&lt;/h3&gt;
&lt;p&gt;
&lt;img src="http://www.theenterprisearchitect.eu/images/ddd_small.jpg" style="float:right;margin-left:10px;margin-bottom:5px;border:0px solid" title="" alt="" class="pivot-image" /&gt;Now
the lifecycle of a DSL is clear I want to share some of my experiences
with the analysis and design phases of the DSL lifecycle. The other
phases are left for a future article. 
&lt;/p&gt;
&lt;p&gt;
Before going into the details of DSL design let's try to understand the context of these experiences. First of all, they are focused on creating &lt;strong&gt;multiple connected DSLs&lt;/strong&gt;, i.e. you can create models expressed with different DSLs referring to each other. For example, in a Form model you can refer to elements from your Data model. More specifically, we are talking about a &lt;a href="http://www.mendix.com/products/technology" target="_blank" title="Mendix DSLs"&gt;set of DSLs&lt;/a&gt; covering all system aspects of a &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/05/19/architecture-requirements-for-service-oriented-business-applications" title="Service-Oriented Business Application SOBA"&gt;Service-Oriented Business Application&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Another important point in the DSLs we're talking about is that they are all &lt;strong&gt;aimed at non-programmer domain experts&lt;/strong&gt;. For most cases this means domain experts can create models expressed in these DSLs, in a few cases this means they can at least read them. This of course always leads to finding a balance between flexibility and complexity.
&lt;/p&gt;
&lt;p&gt;
Based on my experiences, influenced by the concepts of Domain-Driven Design [4],  I have the following 7 recommendations for DSL development:
&lt;/p&gt;
&lt;h4&gt;1. Capture domain knowledge in a metamodel&lt;/h4&gt;
&lt;p&gt;
If you talk about models for DSLs you will stumble upon the term metamodel. For a lot of people this sounds scary enough to stop reading. However, it's just a model of the abstract structure of the language. In other words: a metamodel models the concepts of a language and their relationships. Just as you model the concepts &amp;lsquo;Order', &amp;lsquo;Product', and &amp;lsquo;Customer' if you are building software like an order entry portal.
&lt;/p&gt;
&lt;p&gt;
A metamodel is essential for constructing a DSL. It captures the knowledge of the domain the DSL is aimed at. The model reflects how the team developing the DSL structures the domain knowledge and what they see as the most important elements. The binding of model and implementation ensures that the experiences with earlier versions of the DSL can be used as feedback in the modeling process.
&lt;/p&gt;
&lt;h4&gt;2. Communicate using an ubiquitous language&lt;/h4&gt;
&lt;p&gt;
The metamodel is also important for communication purposes. When designing a DSL a lot of communication is needed between the users of the language (domain experts) and the developers. The metamodel is the backbone of a language used by all &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/04/roles-in-model-driven-engineering" title="Roles in Model Driven Engineering"&gt;team members&lt;/a&gt;. Because the model is bound to the implementation, developers can talk about the DSL in this language. They can communicate with domain experts without translation. 
&lt;/p&gt;
&lt;p&gt;
You should play with the model when talking about the DSL. If you can't talk in terms of the model about a scenario, the model should be adapted until you can. If the domain experts don't understand the model, there is something wrong with the model. Domain experts should object to terms or structures that are awkward or inadequate to convey domain understanding. Developers should watch for ambiguity or inconsistency that will trip up design.
&lt;/p&gt;
&lt;h4&gt;3. Let the metamodel drive the implementation&lt;/h4&gt;
&lt;p&gt;
Don't forget that a language definition is more than just a metamodel (&lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/15/mde---model-driven-engineering----reference-guide#abstract-syntax" title="abstract syntax"&gt;abstract syntax&lt;/a&gt;). A language definition also contains a &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/15/mde---model-driven-engineering----reference-guide#concrete-syntax" title="concrete syntax"&gt;concrete syntax&lt;/a&gt; and &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/15/mde---model-driven-engineering----reference-guide#semantics" title="dsl semantics"&gt;semantics&lt;/a&gt;. When designing and implementing a DSL the concrete syntax is captured in the &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/18/model-driven-engineering-tools-compared-on-user-activities" title="solution workbench"&gt;solution workbench&lt;/a&gt;, i.e. an environment in which you can specify models using the DSL with either a textual or a graphical concrete syntax. The semantics of the language are captured in the transformation rules or model interpreter (based on the used implementation pattern, see above).
&lt;/p&gt;
&lt;p&gt;
It is important that the metamodel drives the implementation of the solution workbench and interpreter, i.e. the metamodel should driven the implementation of the DSL. If the implementation doesn't map to the metamodel, the metamodel is of little value. At the same time, complex mappings between metamodel and implementation are difficult to understand and in practice difficult to maintain as the design changes. A deadly gap between metamodel and implementation opens, so that insight gained in each of those activities does not feed into the other.
&lt;/p&gt;
&lt;p&gt;
Therefore, design the metamodel in such a way that it reflects the implementation in a very literal way. However, demand at the same time that a single metamodel also serves the purpose of supporting the ubiquitous language. The implementation must become an expression of the metamodel, so a change to the code may be a change tot the metamodel and the other way around. To tie the DSL implementation and metamodel in such a way, usually requires &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/18/model-driven-engineering-tools-compared-on-user-activities" title="DSL tools"&gt;DSL tools&lt;/a&gt; that let you generate big parts of the DSL implementation from the metamodel. Figure 1 exhibits such a scenario in which part of the solution workbench and interpreter are generated from the metamodel.&lt;br /&gt;
&lt;/p&gt;
&lt;p align="center" style="text-align:center;"&gt;&lt;img src="http://www.theenterprisearchitect.eu/images/dsl_implementation_copy1.gif" style="border:0px solid" title="" alt="" class="pivot-image" /&gt;&lt;/p&gt;

&lt;div align="center"&gt;
&lt;em&gt;
Figure 1 - Metamodel-driven DSL implementation&lt;/em&gt;
&lt;/div&gt;
&lt;h4&gt;4. Isolate the domain&lt;/h4&gt;
&lt;p&gt;
As said before, DSLs will evolve over time. In the previous recommendation we've seen that it is important to tie model and implementation, the model should drive the implementation. However, to do so you need to isolate the domain. If the domain code, representing the metamodel is diffused through the code it is very difficult to make changes to it. Changes in the GUI of your modeling environment or the infrastructure of your interpreter can actually change your domain code.
&lt;/p&gt;
&lt;p&gt;
In principle the recommendations for &amp;lsquo;normal' software also hold for DSL implementations. Divide your code into layers and concentrate all the code related to the domain model in one layer which is isolated from GUI and infrastructure code. The domain objects should be free of the responsibility of displaying themselves, storing themselves, managing application tasks, etc. They should focus on expressing the domain model. 
&lt;/p&gt;
&lt;p&gt;
In the previous recommendation I stated that the model should drive the implementation, and I meant to do that as literally as possible. This is possible if you isolate the domain! Using the &lt;a href="http://www.1160pm.net/2009/04/23/generation-gap-pattern/" target="_blank" title="Generation gap pattern"&gt;Generation Gap Pattern&lt;/a&gt; you can generate all the domain code while isolating it from your other code.
&lt;/p&gt;
&lt;p&gt;
So, isolate the domain to ensure that the model can evolve to be rich enough to express the domain and to keep track of the changes in that domain.
&lt;/p&gt;
&lt;h4&gt;5. Refactor continuously&lt;/h4&gt;
&lt;p&gt;
Along the same lines you should refactor all the time. You should refactor while you're knowledge crunching. You should refactor while you're communicating using the metamodel. You should refactor while you're busy with implementing the DSL. You should refactor while you're generating code from you metamodel. To say it with Eric Evans [4], you should especially refactor if:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;The design does not express the team's current understanding of the domain.&lt;/li&gt;
	&lt;li&gt;Important concepts are implicit in the design (and you see a way to make them explicit).&lt;/li&gt;
	&lt;li&gt;You see an opportunity to make some important part of the design suppler.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I think it doesn't need any explanation that such an approach needs close involvement of &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/04/roles-in-model-driven-engineering" title="Roles in MDE"&gt;all team members&lt;/a&gt; including the domain experts.
&lt;/p&gt;
&lt;h4&gt;6. Maintain metamodel integrity&lt;/h4&gt;
&lt;p&gt;
To effectively abstract a complex domain with domain-specific models, you need more than one DSL. In complex projects &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/11/03/domain-specific-modeling-needs-multi-models" title="multiple DSL"&gt;multiple DSLs&lt;/a&gt; are usually necessary in order to cope with different concerns. In other words: multiple domain-specific models (DSMs), specified in different DSLs are needed to accurately abstract complex systems. 
&lt;/p&gt;
&lt;p&gt;
Total unification of the metamodel (remember: the metamodel describes the concepts of the DSL we are designing) for a large domain will not be feasible or cost-effective. The most important reason for this is that attempting to satisfy everyone with a single metamodel (and thus a single language) will lead to complex options that make the language difficult to use. This is the reason we are designing a DSL at all! Different domain experts will have a need for their own domain specific language to define their aspect of the system. 
&lt;/p&gt;
&lt;p&gt;
So, we need multiple domain specific languages, hence we also need multiple metamodels. However, the boundaries and relationships between different metamodels need to be marked consciously. Some recommendations on multi-DSL development:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Explicitly define the context for each metamodel, i.e. define the domain (e.g. system aspect) the DSL is designed for.&lt;/li&gt;
	&lt;li&gt;Continuously integrate the implementation of a metamodel and make the interfaces to other metamodels part of the automated tests.&lt;/li&gt;
	&lt;li&gt;Model the points of contact between the metamodels and use that model in your ubiquitous language. These points of contact define how models expressed in different DSLs can refer to each other. For example, a GUI element can refer to an element in the data model.&lt;/li&gt;
	&lt;li&gt;Think about your reference resolve strategy. If you use interpreters / engines to execute the models expressed in a DSL you can use late-binding, i.e. use soft references and resolve them at runtime. The advantage of this strategy is flexibility and adaptability. The approach usually used with code generation is early-binding, the references are explicitly reflected in the generated code. Performance can be a reason to follow this strategy.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;7. Use a people-oriented approach&lt;/h4&gt;
&lt;p&gt;
Executing a DSL implementation process, especially in a way as recommended in the previous points, is not easy. It requires an effective team of developers and domain experts. My last, and most important, recommendation is to use a people-first approach in DSL development. DSL development is highly creative an professional work. Developers need to make the technical decisions, they are the best people to decide how to conduct their technical work. Domain experts live the domain, hence they are best suited to decide on the applicability of the concepts of the language.
&lt;/p&gt;
&lt;p&gt;
Although I strongly recommend the way of working reflected in the previous six points, the team has to decide on the process. Accepting a process requires commitment, and as such needs the active involvement of all the team. 
&lt;/p&gt;
&lt;h3&gt;Key take aways for DSL development&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;Capture domain knowledge in a metamodel&lt;/li&gt;
	&lt;li&gt;Communicate using an ubiquitous language&lt;/li&gt;
	&lt;li&gt;Let the metamodel drive the implementation&lt;/li&gt;
	&lt;li&gt;Isolate the domain&lt;/li&gt;
	&lt;li&gt;Refactor continuously&lt;/li&gt;
	&lt;li&gt;Maintain metamodel integrity&lt;/li&gt;
	&lt;li&gt;Use a people-oriented approach&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;p&gt;
----------------------
&lt;/p&gt;
&lt;p&gt;
[1] Marjan Mernik, Jan Heering, and Anthony M. Sloane. &lt;em&gt;When and how to develop domain-specific languages&lt;/em&gt;. ACM Comput. Surv., 37(4):316-344, 2005.
&lt;/p&gt;
&lt;p&gt;
[2] Eelco Visser. &lt;em&gt;WebDSL: A case study in domain-specic language engineering&lt;/em&gt;. In R. Lammel, J. Saraiva, and J. Visser, editors, Generative and Transformational Techniques in Software Engineering (GTTSE 2007), Lecture Notes in Computer Science. Springer, 2008.
&lt;/p&gt;
&lt;p&gt;
[3] Wile, D. S. 2004. &lt;em&gt;Lessons learned from real DSL experiments&lt;/em&gt;. Sci. Comput. Program. 51, 265-290.
&lt;/p&gt;
&lt;p&gt;
[4] Eric Evans, &lt;em&gt;Domain Driven Design: Tackling Complexity in the Heart of Software&lt;/em&gt;. Addison-Wesley, 2004.
&lt;/p&gt;
&lt;p&gt;
Photos by &lt;a href="http://www.flickr.com/photos/gspragin/1162774858/" target="_blank" title="Gail_S"&gt;Gail S&lt;/a&gt; and &lt;a href="http://www.flickr.com/photos/hlegius/3072942016/" target="_blank" title="Helio Costa"&gt;H&amp;eacute;lio Costa&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=yDCrEA4DQSA:8WJMtWbu1rY:2M-cTDv4Dz8"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?d=2M-cTDv4Dz8" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=yDCrEA4DQSA:8WJMtWbu1rY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?i=yDCrEA4DQSA:8WJMtWbu1rY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=yDCrEA4DQSA:8WJMtWbu1rY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?i=yDCrEA4DQSA:8WJMtWbu1rY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=yDCrEA4DQSA:8WJMtWbu1rY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheEnterpriseArchitect/~4/yDCrEA4DQSA" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">84@http://theenterprisearchitect.eu/pivot/</guid>
			<category>Software Engineering</category>
			<pubDate>Wed, 06 May 2009 15:50:00 +0200</pubDate>
		<feedburner:origLink>http://www.theenterprisearchitect.eu/archive/2009/05/06/dsl-development-7-recommendations-for-domain-specific-language-design-based-on-domain-driven-design</feedburner:origLink></item>
		
		
		
		<item>
			<title>The Science of Model-Driven SOA</title>
			<link>http://feedproxy.google.com/~r/TheEnterpriseArchitect/~3/mV5fq58gP5g/the-science-of-model-driven-soa</link>
			<comments>http://www.theenterprisearchitect.eu/archive/2009/04/14/the-science-of-model-driven-soa#comm</comments>
                        <description>&lt;p&gt;
What do organizations need to be successful in good times and to survive in bad times? &lt;a href="http://rvsoapbox.blogspot.com/2009/04/towards-intelligent-business.html" target="_blank" title="Towards intelligent business"&gt;According to Richard Veryard&lt;/a&gt; what matters is how people and systems collaborate effectively to address emerging business opportunities and threats, in an agile and innovative manner. He calls this Organizational Intelligence.
&lt;/p&gt;
&lt;p&gt;
I think for reaching Organizational Intelligence we need &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/26/soa-is-dead-long-live-model-driven-soa" title="Model Driven SOA MDA"&gt;Model-Driven SOA&lt;/a&gt;. The point of Model-Driven SOA is to create technology (&lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/05/19/architecture-requirements-for-service-oriented-business-applications" title="Architecture Service Oriented Business Applications SOBA"&gt;Service-Oriented Business Applications - SOBA&lt;/a&gt;) that truly supports an organization. We have to specify the business with &lt;a href="http://jtonedm.com/tag/declarative/" target="_blank" title="declerative models"&gt;declarative&lt;/a&gt; models, these models should directly lead to working software, either by direct execution (e.g. process engine, rule engine) or by transformations to executable models. Even if these transformations are manual, good tools support tracing between business requirements and implementation, thereby enabling methods to assure business-IT alignment.
&lt;/p&gt;
&lt;p&gt;
However, to do Model-Driven SOA in practice we'll need some kind of framework or process describing what models and transformations we need. Although I have some ideas about this subject, let's first look at some scientific research in this field. 
&lt;/p&gt;
&lt;p&gt;
In the remainder of this post I present two recent (last year) scientific publications researching a framework or methodology providing end-to-end guidance and assistance to refine and transform business models created by business experts into IT models and then to IT implementation:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;the Business to IT transformation Framework [1], and&lt;/li&gt;
	&lt;li&gt;the Model Driven Service Engineering Process [3].&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Business to IT Transformation Framework&lt;/h3&gt;Stein, K&amp;uuml;hne, and Ivanov [1] have conducted an extensive literature research in the field of model-driven business to IT transformations. They conclude that the reviewed works only cover a subset of the different criteria and present a new framework providing the building blocks of business to IT transformations from a practical point of view.
&lt;p&gt;
Mens and Van Gorp [2] distinguish between horizontal and vertical transformations. A horizontal transformation is a transformation where the source and target models reside at the same abstraction level. A vertical transformation is a transformation where the source and target models reside at different abstraction levels. According to Stein, K&amp;uuml;hne, and Ivanov [1] most approaches for business to IT transformations follow a horizontal transformation strategy. A horizontal transformation starting with an abstract business process model results in an abstract orchestration model requiring significant refinement efforts to make it executable. An alternative horizontal transformation strategy is to start from a business process model augmented with technical details. However, this forces the business analyst to think in terms of executable business processes.
&lt;/p&gt;
&lt;p&gt;
Due to the previous arguments, Stein, K&amp;uuml;hne, and Ivanov [1] formulate the following axiom, which forms the basic assumption for their business to IT transformation framework:
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;em&gt;Business process models (e.g. BPMN, EPC) must be platform independent and a platform specific IT implementation (e.g. BPEL) must be derived through a vertical transformation strategy.&lt;/em&gt;
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Consecutively they come to the following consequences and requirements for their framework:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;The business process model shall not contain any platform specific details, e. g. references to WSDL artefacts.&lt;/li&gt;
	&lt;li&gt;The business process model should use refineable proxy elements instead.&lt;/li&gt;
	&lt;li&gt;Source models should be restricted to a subset, which can be unambiguously transformed.&lt;/li&gt;
	&lt;li&gt;Full code generation is desirable but not achievable.&lt;/li&gt;
	&lt;li&gt;Target models should be comprehensible for human users.&lt;/li&gt;
	&lt;li&gt;The framework should use iterative development processes through change detection, change visualisation, merge functionalities.&lt;/li&gt;
&lt;/ul&gt;
&lt;div align="center"&gt;
&lt;p style="text-align:center;"&gt;&lt;img src="http://www.theenterprisearchitect.eu/images/relatedwork_mde4bpm_small.jpg" style="border:0px solid" title="Business to IT transformation framework" alt="Business to IT transformation framework" class="pivot-image" /&gt;&lt;/p&gt;&amp;nbsp;
&lt;/div&gt;
&lt;p align="center"&gt;
&lt;em&gt;Figure 1 - Business to IT transformation framework&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 1 exhibits the general business to IT transformation framework [1]. The framework shows three different model perspectives: process, data, and interaction perspective. These perspectives reduce cognitive complexity at design time [1]. The framework also presents two abstraction levels, the business level and the IT level, which are related with vertical transformations.
&lt;/p&gt;
&lt;h3&gt;Model Driven Service Engineering Process&lt;/h3&gt;
&lt;p&gt;
Anaby-Tavor et al. [3] define a model driven service engineering process aimed at providing a methodology giving end-to-end guidance and assistance to refine and transform business models created by business experts into IT models and then to IT implementation. 
&lt;/p&gt;
&lt;p&gt;
A service engineering process is a sequence of activities: analysis, strategy design, development, and deployment, done in this order to produce a services system [3].
&lt;/p&gt;
&lt;div align="center"&gt;
&lt;p style="text-align:center;"&gt;&lt;img src="http://www.theenterprisearchitect.eu/images/relatedwork_mdserviceengine.jpg" style="border:0px solid" title="Model Driven Service Engineering Process" alt="Model Driven Service Engineering Process" class="pivot-image" /&gt;&lt;/p&gt; &lt;br /&gt;
&lt;/div&gt;
&lt;p align="center"&gt;
&lt;em&gt;
Figure 2 - The Model Driven Service Engineering Process&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 2 presents the methodology in three layers. The upper layer shows the service engineering process, the middle layer describes the models supporting each phase of the service engineering process, and the bottom layer describes the aspects of the services system that the models affect. Anaby-Tavor et al. follow the definition of a services system given by Zang et al. [4] which states that a services system is a 6-tuple: &amp;lt;Inputs, Outputs, Goals, Transformation, Components, Sensors&amp;gt;.
&lt;/p&gt;
&lt;p&gt;
In the analysis phase the system requirements are analyzed and modeled. In the next phase a strategy design is conducted to describe the static and dynamic aspects of the services system. Static enterprise models define the components' black box view. The components collaborate using services, this forms the first step of the dynamic modeling of the enterprise. During the development phase detailed executable data is added leading to execution models describing the control flow of the activities of the services. Finally, sensors use IT management models to oversee the deployment of the services system.
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;strong&gt;
This time I don't want to give &lt;em&gt;my&lt;/em&gt; opinion on these studies, I'm curious what &lt;em&gt;your&lt;/em&gt; experiences are with translating organization models into software? &lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Do you use a framework? If so, what framework? 
&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I'd like to hear your thoughts in the comments.
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
---------------------
&lt;/p&gt;
&lt;p&gt;
[1] Sebastian Stein, Stefan K&amp;uuml;hne, and Konstantin Ivanov. &lt;em&gt;Business to IT Transformations Revisited&lt;/em&gt;. In Cesare Pautasso and Jana Koehler, editors, 1st International Workshop on Model-Driven Engineering for Business Process Management, pages 1-12, Milano, Italy, September 2008.
&lt;/p&gt;
&lt;p&gt;
[2] Tom Mens and Pieter Van Gorp. &lt;em&gt;A taxonomy of model transformation&lt;/em&gt;. Electr. Notes Theor. Comput. Sci., 152:125-142, 2006.
&lt;/p&gt;
&lt;p&gt;
[3] A. Anaby-Tavor, D. Amid, A. Sela, A. Fisher, Kuo Zhang, and Ou Tie Jun. &lt;em&gt;Towards a Model Driven Service Engineering Process&lt;/em&gt;. Congress on Services - Part I, 2008. SERVICES '08. IEEE, pages 503-510, July 2008.
&lt;/p&gt;
&lt;p&gt;
[4] L Zhang, J Zhang, and H Cai. &lt;em&gt;Services Computing: Core Enabling Technology of the Modern Services Industry&lt;/em&gt;. Tsinghua University Press, 2007.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=mV5fq58gP5g:C5zvPNemadE:2M-cTDv4Dz8"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?d=2M-cTDv4Dz8" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=mV5fq58gP5g:C5zvPNemadE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?i=mV5fq58gP5g:C5zvPNemadE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=mV5fq58gP5g:C5zvPNemadE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?i=mV5fq58gP5g:C5zvPNemadE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=mV5fq58gP5g:C5zvPNemadE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheEnterpriseArchitect/~4/mV5fq58gP5g" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">83@http://theenterprisearchitect.eu/pivot/</guid>
			<category>Software Engineering</category>
			<pubDate>Tue, 14 Apr 2009 21:05:00 +0200</pubDate>
		<feedburner:origLink>http://www.theenterprisearchitect.eu/archive/2009/04/14/the-science-of-model-driven-soa</feedburner:origLink></item>
		
		
		
		<item>
			<title>5 types of Model Driven Software Development</title>
			<link>http://feedproxy.google.com/~r/TheEnterpriseArchitect/~3/wK5ZVLY2YG0/5-types-of-model-driven-software-development</link>
			<comments>http://www.theenterprisearchitect.eu/archive/2009/03/31/5-types-of-model-driven-software-development#comm</comments>
                        <description>Model Driven Software Development is getting momentum. Is Model-Driven the future of software development? Or is it the same old wine in a new bottle? I'm not going to answer this question right now. I'll first show you the different types of model driven software development using a simple metaphor: farming.&lt;h3&gt;Programming - the manual work&lt;/h3&gt;&lt;img src="http://www.theenterprisearchitect.eu/images/approach1_farmer.jpg" style="float:right;margin-left:10px;margin-bottom:5px;border:0px solid" title="Farmer" alt="Farmer" class="pivot-image" /&gt;Doing all the farming by hand, it's a craft, an art. You love it, or you don't. Everything will become as you want it to be, on your time.
&lt;p&gt;
In software development programming can be seen as manually creating a low level model of an application. That low level model (implementation model) is compiled to an executable or interpreted on a virtual machine.
&lt;/p&gt;
&lt;p&gt;
As with tools for farming you have tools and frameworks making the job easier, but it stays handiwork. I won't define programming as model driven software development. I just mention it to sketch the starting point.
&lt;/p&gt;
&lt;h3&gt;Code generation - automation &lt;/h3&gt;
&lt;p&gt;
&lt;img src="http://www.theenterprisearchitect.eu/images/approach2_milking.jpg" style="float:right;margin-left:10px;margin-bottom:5px;border:0px solid" title="Automation" alt="Automation" class="pivot-image" /&gt;Nowadays lots of work on a farm can be automated. You have to learn how to use the machines doing the work for you, but once you have, all manual task are &amp;lsquo;generated' automatically.
&lt;/p&gt;
&lt;p&gt;
In software development the manual work can also be &lt;em&gt;automated&lt;/em&gt;. Instead of writing code you can create models. These models are transformed into source code. You, of course, have to learn how to model, but once you have, all the manual work of writing code is automated. This means a whole &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/04/roles-in-model-driven-engineering" title="Roles in Model Driven Engineering"&gt;shift in application development roles&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
An early, well-known example of code generation is the generation of corresponding source code for graphical user interfaces in Integrated Development Environments. Nowadays a lot of tools exist, generating full applications based on templates.&lt;br /&gt;
&lt;/p&gt;
&lt;h3&gt;MDA - abstraction &lt;/h3&gt;
&lt;p&gt;
In the previous approach we needed a specialized machine for each task. That involves a lot of learning about how to configure and operate those machines. In case of milking we have to attach the machine to each cow by hand. Can't this be automated by stepping one &lt;em&gt;abstraction level&lt;/em&gt; higher? We just model how to attach the machine and the next part of our job is automated! 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.theenterprisearchitect.eu/images/approach3_carousel_small.jpg" style="float:right;margin-left:10px;margin-bottom:5px;border:0px solid" title="" alt="" class="pivot-image" /&gt;In a very basic way that's what &lt;a href="http://www.theenterprisearchitect.eu/archive/2008/01/16/mda-model-driven-architecture-basic-concepts" target="_blank" title="MDA Model Driven Architecture"&gt;Model Driven Architecture (MDA)&lt;/a&gt; is for software development. Instead of just generating code from a model, you can construct platform independent and platform dependent models. The platform independent model is transformed into a platform dependent model using &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/02/18/mda-and-model-transformation" title="MDA model transformation"&gt;model transformations&lt;/a&gt;. From the platform dependent model the source code is generated. 
&lt;/p&gt;
&lt;p&gt;
If you specify the needed functionality in a platform independent model, you can transform this functionality into models for different platforms. So, the MDA is mainly aimed at technical variability.
&lt;/p&gt;
&lt;h3&gt;DSL - specializing&lt;/h3&gt;
&lt;p&gt;
&lt;img src="http://www.theenterprisearchitect.eu/images/approach4_plantation.jpg" style="float:right;margin-left:10px;margin-bottom:5px;border:0px solid" title="" alt="" class="pivot-image" /&gt;Farms have changed a lot over time. Started as a means for farmers to grow their own food, the focus has now changed to financial gain. That, in combination with, among others, the industrialization and growing complexity of a farm led to more specialized farms. This means that consumer products are mostly composed of materials from different farms. Examples of specialized farms are dairy farms, orchards, vineyards, stud farms, plantations, poultry farms, etc.
&lt;/p&gt;
&lt;p&gt;
In software development a same movement can be seen. A lot of people argue that &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/08/20/dsl-in-the-context-of-uml-and-gpl" title="DSL vs UML"&gt;the UML, the language used to define the models in the MDA, is too complex&lt;/a&gt;. Instead of using UML the use of &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/08/11/dsl-and-mde-necessary-assets-for-model-driven-approaches" title="Domain Specific Languages DSL"&gt;Domain-Specific Languages (DSLs)&lt;/a&gt; is promoted for model driven software development. DSLs are small languages tailored to a &lt;em&gt;specific domain&lt;/em&gt; (a system aspect or a certain problem domain). An application isn't modeled with a single, monolithic model specified in one language, but with &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/11/03/domain-specific-modeling-needs-multi-models" title="DSM multi-model"&gt;multiple small models specified with different DSLs&lt;/a&gt;. DSLs can vary in &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/09/03/the-structure-of-domain-specific-languages" title="DSL structure variability notation"&gt;structure, variability, and notation&lt;/a&gt;. Most DSL approaches contain a direct translation between DSLs and their execution by using code generation or the direct interpretation of the DSLs.
&lt;/p&gt;
&lt;h3&gt;MDE - from problem to solution&lt;/h3&gt;
&lt;p&gt;
&lt;img src="http://www.theenterprisearchitect.eu/images/approach5_dinner.jpg" style="float:right;margin-left:10px;margin-bottom:5px;border:0px solid" title="" alt="" class="pivot-image" /&gt;We can talk a lot about farming and how to automate and specialize it more, however, the real leap in productivity is in alignment. The production of raw materials need to be aligned with consumer needs. We see this happen with big companies targeting consumer needs (or manipulating them ;) ) with advertising campaigns. All production is aligned to deliver consumer products composed of multiple materials maybe coming from different farms. The focus is not on the farm and how to improve it, the focus has become &lt;em&gt;consumer-centric&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
In model driven software development the same can be done. In the approaches mentioned before the target was to model the application at a higher abstraction level than a programming language. We can, however, go one step further. We can also create models of the using system, i.e. creating models of the organization which is going to use the software. Once we have modeled the so-called problem domain, we can make translations to a model of the solution domain. These translations or transformations don't necessarily have to be automated, in some cases that's not even possible. However, they need to be supported by &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/18/model-driven-engineering-tools-compared-on-user-activities" title="Model Driven Engineering tools"&gt;appropriate tools&lt;/a&gt; and methodologies.
&lt;/p&gt;
&lt;p&gt;
This &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/15/mde---model-driven-engineering----reference-guide" title="Model Driven Engineering reference guide"&gt;Model-Driven Engineering&lt;/a&gt; approach differs from other approaches because we can distinct between horizontal and vertical transformations. Horizontal transformations &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/11/27/the-place-of-architecture-in-model-driven-engineering" title="Architecture in Model Driven Engineering"&gt;from problem to solution domain&lt;/a&gt;, and vertical transformations from solution domain models to executable models. We've seen in previous articles on &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/26/soa-is-dead-long-live-model-driven-soa" title="Model Driven SOA"&gt;Model-Driven SOA&lt;/a&gt; that such approaches are possible. However, the &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/21/10-misperceptions-and-challenges-of-model-driven-development" title="Challenges of model driven engineering"&gt;challenges of MDE&lt;/a&gt; are in appropriate tooling, methodologies, patterns, templates, reference architectures, and industry standards.
&lt;/p&gt;
&lt;p&gt;
In short: MDE focuses on the problem domain, it is (or should be) &lt;em&gt;business-centric&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
A lot more can be said about the different approaches and how they compare to each other (and yes, I think I'll do that in the future), but for now you have a quick overview of these 5 approaches. What are your experiences with these approaches? &lt;strong&gt;What approach do you prefer and why?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
Photos by &lt;a href="http://www.flickr.com/photos/cresk/3296999237/" target="_blank" title="cresk"&gt;cresk&lt;/a&gt;, &lt;a href="http://www.flickr.com/photos/12741215@N04/1469900579/" target="_blank" title="Airborne Guy"&gt;Airborne Guy&lt;/a&gt;, &lt;a href="http://www.flickr.com/photos/flint-hill/1401517947/" target="_blank" title="Flint-Hill"&gt;Flint-Hill&lt;/a&gt;, &lt;a href="http://www.flickr.com/photos/docbudie/3330610592/" target="_blank" title="DocBuddie"&gt;DocBuddie&lt;/a&gt;, &lt;a href="http://www.flickr.com/photos/colloidfarl/381532660/" target="_blank" title="Farl"&gt;Farl&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=wK5ZVLY2YG0:XcIX79JMgR4:2M-cTDv4Dz8"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?d=2M-cTDv4Dz8" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=wK5ZVLY2YG0:XcIX79JMgR4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?i=wK5ZVLY2YG0:XcIX79JMgR4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=wK5ZVLY2YG0:XcIX79JMgR4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?i=wK5ZVLY2YG0:XcIX79JMgR4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=wK5ZVLY2YG0:XcIX79JMgR4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheEnterpriseArchitect/~4/wK5ZVLY2YG0" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">82@http://theenterprisearchitect.eu/pivot/</guid>
			<category>Software Engineering</category>
			<pubDate>Tue, 31 Mar 2009 21:52:00 +0200</pubDate>
		<feedburner:origLink>http://www.theenterprisearchitect.eu/archive/2009/03/31/5-types-of-model-driven-software-development</feedburner:origLink></item>
		
		
		
		<item>
			<title>Microblog: news and articles on Model Driven Engineering</title>
			<link>http://feedproxy.google.com/~r/TheEnterpriseArchitect/~3/vbEO_bLN9u4/microblog-news-and-articles-on-model-driven-engineering</link>
			<comments>http://www.theenterprisearchitect.eu/archive/2009/03/23/microblog-news-and-articles-on-model-driven-engineering#comm</comments>
                        <description>I'm happy to announce my new &lt;strong&gt;microblog&lt;/strong&gt; dedicated to news and articles on Model Driven Engineering. Model driven software development approaches are getting more and more attention, resulting in more web content. I have also contributed to this movement with a considerable amount of articles on &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/01/16/mda-model-driven-architecture-basic-concepts" title="Model Driven Architecture MDA"&gt;Model Driven Architecture (MDA)&lt;/a&gt;, &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/15/mde---model-driven-engineering----reference-guide" title="Model Driven Engineering MDE"&gt;Model-Driven Engineering (MDE)&lt;/a&gt;, &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/08/11/dsl-and-mde-necessary-assets-for-model-driven-approaches" title="Domain Specific Languages DSL"&gt;Domain-Specific Languages (DSL)&lt;/a&gt;, &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/18/model-driven-engineering-tools-compared-on-user-activities" title="Model Driven tools"&gt;Model Driven tooling&lt;/a&gt;, and &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/26/soa-is-dead-long-live-model-driven-soa" title="Model Driven SOA"&gt;Model-Driven SOA&lt;/a&gt;, to name a few topics.&lt;p&gt;
&lt;a href="http://twitter.com/modeldriven" target="_blank" title="Twitter feed on Model Driven Software Development"&gt;&lt;img src="http://www.theenterprisearchitect.eu/images/twitter.gif" style="float:right;margin-left:10px;margin-bottom:5px;border:0px solid" title="Microblog dedicated to news and articles on Model Driven Engineering" alt="Microblog dedicated to news and articles on Model Driven Engineering" class="pivot-image" /&gt;&lt;/a&gt; A couple of times I've pointed at interesting articles or react on them, for example last year's discussion on &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/08/20/dsl-in-the-context-of-uml-and-gpl" title="UML versus DSL"&gt;UML vs.  DSL&lt;/a&gt; or my more recent reaction on the &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/21/10-misperceptions-and-challenges-of-model-driven-development" title="Challenges of MDD"&gt;challenges of MDD&lt;/a&gt;. Despite the fact that I like the dialog, I don't always have time to write a decent reaction. However, just mentioning interesting links, news, and facts, with a maximum of 140 characters doesn't take that much time. That's why I've started a microblog / twitter feed.
&lt;/p&gt;
&lt;p&gt;
I've planned to do daily updates on this &lt;a href="http://twitter.com/modeldriven" target="_blank" title="Microblog dedicated to the latest news and articles on Model Driven Engineering"&gt;microblog dedicated to the latest news and articles on Model Driven Engineering&lt;/a&gt;. These updates will mostly consist of interesting links related to model driven software development. 
&lt;/p&gt;
&lt;p&gt;
Why not just posting on this blog? Because I want to keep this blog dedicated to in-depth, original content, posted with a lower frequency.
&lt;/p&gt;
&lt;p&gt;
I'd like to hear what you think about this. If you stumble upon interesting news or articles about Model Driven Software Development, please let me now! 
&lt;/p&gt;
&lt;p&gt;
Oh... and don't forget to &lt;strong&gt;&lt;a href="http://twitter.com/modeldriven" target="_blank" title="Twitter feed on Model Driven Software Development"&gt;subscribe&lt;/a&gt;&lt;/strong&gt; to your new source of model driven information ;)&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=vbEO_bLN9u4:VrKdvgwaWek:2M-cTDv4Dz8"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?d=2M-cTDv4Dz8" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=vbEO_bLN9u4:VrKdvgwaWek:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?i=vbEO_bLN9u4:VrKdvgwaWek:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=vbEO_bLN9u4:VrKdvgwaWek:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?i=vbEO_bLN9u4:VrKdvgwaWek:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=vbEO_bLN9u4:VrKdvgwaWek:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheEnterpriseArchitect/~4/vbEO_bLN9u4" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">81@http://theenterprisearchitect.eu/pivot/</guid>
			<category>Common</category>
			<pubDate>Mon, 23 Mar 2009 21:26:00 +0200</pubDate>
		<feedburner:origLink>http://www.theenterprisearchitect.eu/archive/2009/03/23/microblog-news-and-articles-on-model-driven-engineering</feedburner:origLink></item>
		
		
		
		<item>
			<title>What every architect should now know about the Service Component Architecture (SCA)</title>
			<link>http://feedproxy.google.com/~r/TheEnterpriseArchitect/~3/BaLgdlH0m6g/what-every-architect-should-now-know-about-the-service-component-architecture-sca</link>
			<comments>http://www.theenterprisearchitect.eu/archive/2009/03/11/what-every-architect-should-now-know-about-the-service-component-architecture-sca#comm</comments>
                        <description>The definition of &amp;lsquo;application' is rapidly changing. As the industry is moving from using an application-centric architecture to a Service Oriented Architecture (SOA), the focus for building functionality is moving to &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/05/19/architecture-requirements-for-service-oriented-business-applications" title="Service Oriented Business Applications (SOBA)"&gt;Service Oriented Business Applications (SOBA)&lt;/a&gt;. This means that applications are a set of services and components working together in fulfilling a certain business need. The technology, specifications, and standards for specifying these components and services may vary, and most often religious discussions are going on about the usefulness of each of them.
&lt;p&gt;
As regular readers may guess, my take would be to create these components and services in a model driven way using an approach to &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/26/soa-is-dead-long-live-model-driven-soa" title="Model Driven SOA"&gt;Model Driven SOA&lt;/a&gt;. However, even in that case you'll need some kind of programming model that defines interfaces, implementations, and references. When building an application or solution based on services, these services can be both created specifically for the application and reused from existing systems and applications. Hence, we need a programming model that specifies how to create and implement services, how to reuse services, and how to assemble or compose services into solutions.
&lt;/p&gt;
&lt;p&gt;
That's exactly what the Service Component Architecture (SCA) is.&lt;/p&gt;&lt;p&gt;
Structure of this article:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.theenterprisearchitect.eu#introducingsca" target="_self" title="Introducing the Service Component Architecture (SCA)"&gt;Introducing the Service Component Architecture (SCA)&lt;/a&gt;: the who and why behind SCA.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.theenterprisearchitect.eu#scaspecs" target="_self" title="Service Component Architecture specifications"&gt;Service Component Architecture specifications&lt;/a&gt;: explaining the four main elements of the SCA.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.theenterprisearchitect.eu#scaconcepts" target="_self" title="Service Component Architecture concepts"&gt;Service Component Architecture concepts&lt;/a&gt;: explaining the concepts (e.g. composite, component, service, wire, binding, reference, etc.) of the SCA in detail.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.theenterprisearchitect.eu#scadeployment" target="_self" title="Deployment and the Service Component Architecture"&gt;Deployment and the Service Component Architecture&lt;/a&gt;: contributions, clouds, and nodes.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.theenterprisearchitect.eu#scaimplementations" target="_self" title="Implementations of the Service Component Architecture"&gt;Implementations of the Service Component Architecture&lt;/a&gt;: an overview of existing SCA implementations (open source and commercial).&lt;br /&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a name="#introducingsca" title="#introducingsca"&gt;&lt;/a&gt;Introducing the Service Component Architecture (SCA)&lt;/h3&gt;The SCA models the &amp;quot;A&amp;quot; in SOA. It provides a model for service construction, service assembly, and deployment. The SCA supports components defined in multiple languages, deployed in multiple container technologies, and with multiple service access methods.
&lt;p&gt;
The SCA consists of a set of specifications that define a model for building Service-Oriented Business Applications (SOBA). These specifications are based on the following design principles:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.theenterprisearchitect.eu/images/osoa.gif" style="float:right;margin-left:10px;margin-bottom:5px;border:0px solid" title="OSOA" alt="OSOA" class="pivot-image" /&gt;&amp;nbsp;
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Independent of programming language or underlying implementation.&lt;/li&gt;
	&lt;li&gt;Independent of host container technology.&lt;/li&gt;
	&lt;li&gt;Loose coupling between components.&lt;/li&gt;
	&lt;li&gt;Metadata vendor-independence.&lt;/li&gt;
	&lt;li&gt;Security, transaction and reliability modeled as policies.&lt;/li&gt;
	&lt;li&gt;Recursive composition.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The first draft of SCA was published in November 2005 by the &lt;a href="http://www.osoa.org/" target="_blank" title="OSOA"&gt;Open SOA Collaboration (OSOA)&lt;/a&gt;. OSOA is a consortium of vendors and companies interest in supporting or building a SOA. Among them are IBM, Oracle, SAP, Sun, and Tibco. In March 2007 the 1.0 final set of specifications was released. In July 2007 the specifications were adopted by OASIS and they are developed further in the &lt;a href="http://www.oasis-opencsa.org/" target="_blank" title="OASIS Open CSA"&gt;OASIS Open Composite Services Architecture (Open CSA)&lt;/a&gt; member section.
&lt;/p&gt;
&lt;h3&gt;&lt;a name="scaspecs" title="scaspecs"&gt;&lt;/a&gt;Service Component Architecture specifications&lt;/h3&gt;
&lt;p&gt;
The set of specification can be split into four main elements:  the assembly model specification, component implementation specifications, binding specifications, and the policy framework specification. I will shortly explain each of them in this section. In the next section I'm going to explain the concepts (e.g. what is a composite, what is a wire, etc.) of the SCA in more detail.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Assembly model specification&lt;/strong&gt;, this model defines how to specify the structure of a composite application. It defines what services are assembled into a SOBA and with which components these services are implemented. Each component can be a composite itself and be implemented by combining the services of one of more other components (i.e. recursive composition). So, in short, the assembly model specifies the components, the interfaces (services) for each component, and the references between components, in a unified, language independent-way. I'll explain these concepts in detail in the next section. The assembly model is defined with XML files.
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.osoa.org/download/attachments/35/SCA_AssemblyModel_V100.pdf?version=1" target="_blank" title="SCA Assembly Model"&gt;SCA Assembly Model V1.00&lt;/a&gt; (PDF)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.osoa.org/xmlns/sca/1.0/sca-core.xsd" target="_blank" title="SCA Core XML Schema"&gt;SCA Core XML Schema V1.0&lt;/a&gt; (XSD file)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Component implementation specifications&lt;/strong&gt;, these specifications define how a component is actually written in a particular programming language. Components are the main building blocks for an application build using SCA. A component is a running instance of an implementation that has been appropriately configured. The implementation provides the actual function of the component and can be defined with a Java class, BPEL process, Spring bean, and C++ or C code. Several containers implementing the SCA standard (meaning that they can run SCA components) support additional implementation types like .Net, OSGI bundles, etc. In theory a component can be implemented with any technology, as long as it relies on a common set of abstractions, e.g. services, references, properties, and bindings. I'll explain these abstractions in detail in the next section. 
&lt;/p&gt;
&lt;p&gt;
The following component implementation technologies are currently described:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.osoa.org/download/attachments/35/SCA_JavaComponentImplementation_V100.pdf?version=1" target="_blank" title="SCA Java Component Implementation"&gt;SCA Java Component Implementation V1.00&lt;/a&gt; (PDF), &lt;a href="http://www.osoa.org/xmlns/sca/1.0/sca-implementation-java.xsd" target="_blank" title="SCA Java Implementation XSD"&gt;XSD file&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.osoa.org/download/attachments/35/SCA_SpringComponentImplementationSpecification-V100.pdf?version=1" target="_blank" title="SCA Spring Component Implementation"&gt;SCA Spring Component Implementation V1.00&lt;/a&gt; (PDF)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.osoa.org/download/attachments/35/SCA_ClientAndImplementationModelforBPEL_V100.pdf?version=1" target="_blank" title="SCA BPEL Client and Implementation"&gt;SCA BPEL Client and Implementation V1.00&lt;/a&gt; (PDF)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.osoa.org/download/attachments/35/SCA_ClientAndImplementationModel_Cpp-V100.pdf?version=2" target="_blank" title="SCA C++ Client and Implementation"&gt;SCA C++ Client and Implementation V1.00&lt;/a&gt; (PDF), &lt;a href="http://www.osoa.org/xmlns/sca/1.0/sca-implementation-cpp.xsd" target="_blank" title="SCA C++ implementation XSD"&gt;XSD file&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.osoa.org/download/attachments/35/SCA_ClientAndImplementationModelforCOBOL_V1.00.pdf?version=2" target="_blank" title="SCA Cobol Client and Implementation"&gt;SCA COBOL Client and Implementation V1.00&lt;/a&gt; (PDF)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.osoa.org/download/attachments/35/SCA_ClientAndImplementationModelforC_V100.pdf?version=1" target="_blank" title="SCA C Client and Implementation"&gt;SCA C Client and Implementation V1.00&lt;/a&gt; (PDF)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Binding specifications&lt;/strong&gt;, these specifications define how the services published by a component can be accessed. Binding types can be configured for both external systems and internal wires between components. The current binding types described by OSOA are bindings using SOAP (web services binding), JMS, EJB, and JCA. Several containers implementing the SCA standard support additional binding types like RMI, Atom, JSON, etc. An SCA runtime should at least implement the SCA service and web service binding types. The SCA service binding type should only be used for communication between composites and components within an SCA domain. The way in which this binding type is implemented is not defined by the SCA specification and it can be implemented in different ways by different SCA runtimes. It is not intended to be interoperable. For interoperability the standardized binding types like web services have to be used.
&lt;/p&gt;
&lt;p&gt;
Officially described binding types:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.osoa.org/download/attachments/35/SCA_WebServiceBinding_V100.pdf?version=2" target="_blank" title="SCA Web Services Binding"&gt;SCA Web Services Binding V1.00&lt;/a&gt; (PDF), &lt;a href="http://www.osoa.org/xmlns/sca/1.0/sca-binding-webservice.xsd" target="_blank" title="SCA Web Services Binding XSD"&gt;XSD file&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.osoa.org/download/attachments/35/SCA_JMSBinding_V100.pdf?version=2" target="_blank" title="SCA JMS Binding"&gt;SCA JMS Binding V1.00&lt;/a&gt; (PDF), &lt;a href="http://www.osoa.org/xmlns/sca/1.0/sca-binding-jms.xsd" target="_blank" title="SCA JMS Binding XSD"&gt;XSD file&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.osoa.org/download/attachments/35/SCA_EJBSessionBeanBinding_V100.pdf?version=1" target="_blank" title="SCA EJB Session Bean Binding"&gt;SCA EJB Session Bean Binding V1.00&lt;/a&gt; (PDF), &lt;a href="http://www.osoa.org/xmlns/sca/1.0/sca-binding-ejb.xsd" target="_blank" title="SCA EJB Session Bean Binding XSD"&gt;XSD file&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.osoa.org/download/attachments/35/SCA_JCABindings_V1_00.pdf?version=2" target="_blank" title="SCA JCA Binding"&gt;SCA JCA Binding V1.00&lt;/a&gt; (PDF)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Policy framework specification&lt;/strong&gt;, describing how to add non-functional requirements to services. Two kinds of policies exist: interaction and implementation policies. Interaction policies affect the contract between a service requestor and a service provider.  Examples of such policies are message protection, authentication, and reliable messaging. Implementation policies affect the contract between a component and its container. Examples of such policies are authorization and transaction strategies.
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a target="_blank" href="http://www.osoa.org/download/attachments/35/SCA_Policy_Framework_V100.pdf?version=1" title="SCA Policy Framework"&gt;SCA Policy Framework V1.00&lt;/a&gt; (PDF), &lt;a href="http://www.osoa.org/xmlns/sca/1.0/sca-policy.xsd" target="_blank" title="SCA Policy Framework XSD"&gt;XSD file&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.osoa.org/download/attachments/35/SCA_TransactionPolicy_V1.0.pdf?version=1" target="_blank" title="SCA Transaction Policy"&gt;SCA Transaction Policy V1.00&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a name="scaconcepts" title="scaconcepts"&gt;&lt;/a&gt;Service Component Architecture concepts&lt;/h3&gt;
&lt;p&gt;
In the previous section we've seen the different SCA specifications and what they describe. Let's now look in more detail at the concepts of the SCA. 
&lt;/p&gt;
&lt;p&gt;
As stated before the main building block of a &lt;a href="http://www.theenterprisearchitect.eu/archive/2008/05/19/architecture-requirements-for-service-oriented-business-applications" target="_blank" title="SOBA Service Oriented Business Application"&gt;Service-Oriented Business Application&lt;/a&gt; is the component. Figure 1 exhibits the elements of a component. A component consists of a configured piece of implementation providing some business function. An implementation can be specified in any technology, including other SCA composites. The business function of a component is published as a service. The implementation can have dependencies on the services of other components, we call these dependencies references. Implementations can have properties which are set by the component (i.e. they are set in the XML configuration of a component).
&lt;/p&gt;
&lt;p align="center" style="text-align:center;"&gt;&lt;img src="http://www.theenterprisearchitect.eu/images/component.gif" style="border:0px solid" title="SCA Component diagram" alt="SCA Component diagram" class="pivot-image" /&gt;&lt;/p&gt;

&lt;p align="center"&gt;
&lt;em&gt;Figure 1 - SCA Component diagram&lt;/em&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Components can be combined into assemblies, thereby forming a business solution. The SCA calls these assemblies composites. As shown in figure 2 a composite consists of multiple components connected by wires. Wires connect a reference and a service and specify a binding type for this connection. Services of components can be promoted, i.e. they can be defined as a service of the composite. The same holds for references. So, in principle a composite is a component implemented with other components and wires. As stated before, components can in their turn be implemented with composites thereby providing a way for a hierarchical construction of a business solution, where high-level services (often indicated as composite services) are implemented internally by sets of lower-level services.&amp;nbsp;
&lt;/p&gt;
&lt;p align="center" style="text-align:center;"&gt;&lt;img src="http://www.theenterprisearchitect.eu/images/composite.gif" style="border:0px solid" title="SCA Composite diagram" alt="SCA Composite diagram" class="pivot-image" /&gt;&lt;/p&gt;

&lt;p align="center"&gt;
&lt;em&gt;Figure 2 - SCA Composite diagram&lt;/em&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
The service (or interface if you like) of a component can be specified with a Java interface or a WSDL PortType. Such a service description specifies what operations can called on the composite, including their parameters and return types. For each service the method of access can be defined. As seen before, the SCA calls this a binding type.&amp;nbsp;
&lt;/p&gt;
&lt;p align="center" style="text-align:center;"&gt;&lt;img src="http://www.theenterprisearchitect.eu/images/composite_xml.gif" style="border:0px solid" title="Example XML structure defining a composite" alt="Example XML structure defining a composite" class="pivot-image" /&gt;&lt;/p&gt;

&lt;p align="center"&gt;
&lt;em&gt;Figure 3 - Example XML structure defining a composite&lt;/em&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Figure 3 exhibits an example XML structure defining an SCA composite. It's not completely filled in, but it gives a rough idea what the configuration looks like. The implementation tag of a component can be configured based on the chosen implementation technology, e.g. Java, BPEL, etc. In case of  Java the implementation tag defines the Java class implementing the component.
&lt;/p&gt;
&lt;h3&gt;&lt;a name="scadeployment" title="scadeployment"&gt;&lt;/a&gt;Deployment and the Service Component Architecture&lt;/h3&gt;
&lt;p&gt;
SCA composites are deployed within an SCA domain. An SCA Domain (as shown in Figure 4) represents a set of services providing an area of business functionality that is controlled by a single organization. A single SCA domain defines the boundary of visibility for all SCA mechanisms. For example, SCA service bindings (recall the earlier explained SCA binding types) do only work within a single SCA domain. Connections to services outside the domain must use the standardized binding types like webservice technology. The SCA policy definitions do also only work within the context of a single domain. In general, external clients of a service that is developed and deployed using SCA should not be able to tell that SCA was used to implement the service, it is an implementation detail.
&lt;/p&gt;
&lt;p align="center" style="text-align:center;"&gt;&lt;img src="http://www.theenterprisearchitect.eu/images/domain.gif" style="border:0px solid" title="SCA Domain diagram" alt="SCA Domain diagram" class="pivot-image" /&gt;&lt;/p&gt;

&lt;p align="center"&gt;
&lt;em&gt;Figure 4 - SCA Domain diagram&lt;/em&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
An SCA domain is usually configured using XML files. However, an SCA runtime may also allow the dynamic modification of the configuration at runtime.
&lt;/p&gt;
&lt;p&gt;
An SCA domain may require a large number of different artifacts in order to work. In general, these artifacts consists of the XML configuration of the composites, components, wires, services, and references. We of course also need the implementations of the components specified in all kinds of technologies (e.g. Java, C++, BPEL, etc.). To bundle these artifacts the SCA defines an interoperable packaging format for contributions (ZIP). SCA runtimes may also support other packaging formats like JAR, EAR, WAR, OSGi bundles, etc. Each contribution at least complies to the following characteristics:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;It must be possible to present the artifacts of the packaging to SCA as a hierarchy of resources based off of a single root.&lt;/li&gt;
	&lt;li&gt;A directory resource should exist at the root of the hierarchy named META-INF.&lt;/li&gt;
	&lt;li&gt;A document should exist directly under the META-INF directory named &amp;lsquo;sca-contribution.xml' which lists the SCA Composites within the contribution that are runnable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
A goal of the SCA approach to deployment is that the contents of a contribution should not need to be modified in order to install and use the contents of the contribution in a domain.
&lt;/p&gt;
&lt;p&gt;
An SCA domain can be distributed over a series of interconnected runtime nodes, i.e. it is possible to define a distributed SCA domain. This enables the creation of a cloud consisting of different nodes each running a contribution within the same SCA domain. Nodes can run on separate physical systems. Composites running on nodes can dynamically connect to other composites based on the composite name instead of its location (no matter in which node the other composite lives), because they all run in the same domain. This also allows for dynamic scaling, load balancing, etc. Figure 5 shows an example distributed SCA domain, running on three different nodes. In reality you don't need different nodes (and even different components) for this example, but it makes the idea clear.
&lt;/p&gt;
&lt;p align="center" style="text-align:center;"&gt;&lt;img src="http://www.theenterprisearchitect.eu/images/domain_distributed.png" style="border:0px solid" title="A distributed SCA domain running on multiple nodes" alt="A distributed SCA domain running on multiple nodes" class="pivot-image" /&gt;&lt;/p&gt;

&lt;p align="center"&gt;
&lt;em&gt;Figure 5 - A distributed SCA domain running on multiple nodes&lt;/em&gt;&amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;&lt;a name="scaimplementations" title="scaimplementations"&gt;&lt;/a&gt;Implementations of the Service Component Architecture&lt;/h3&gt;
&lt;p&gt;
The SCA is broadly supported with both commercial and open source implementations. To give you an idea I'll list a few them below.
&lt;/p&gt;
&lt;p&gt;
Open source implementations:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://tuscany.apache.org/" target="_blank" title="Apache Tuscany"&gt;Apache Tuscany&lt;/a&gt; (official reference implementation). The current version is 1.4, released in January 2009. They are also working on a &lt;a href="http://apache-tuscany.blogspot.com/2009/02/apache-tuscany-sca-20-m1-released.html" target="_blank" title="Apache Tuscany 2.0"&gt;2.0 version&lt;/a&gt; which they aim to run in an &lt;a href="http://apache-tuscany.blogspot.com/2009/03/closer-look-osgi-enablement-for-tuscany.html" target="_blank" title="Apache Tuscany 2.0 OSGi enablement"&gt;OSGi enabled environment&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://newton.codecauldron.org/" target="_blank" title="The Newton Project"&gt;The Newton Project&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Commercial implementations:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.tibco.com/software/soa/activematrix_service_grid/default.jsp" target="_blank" title="ActiveMatrix Service Grid from TIBCO"&gt;ActiveMatrix Service Grid from TIBCO&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.oracle.com/technology/products/tuxedo/index.html" target="_blank" title="Oracle Tuxedo"&gt;Oracle Tuxedo&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;a href="https://www14.software.ibm.com/iwm/web/cc/earlyprograms/websphere/soawas61/" target="_blank" title="IBM WebSphere Application Server Feature Pack for SCA"&gt;IBM WebSphere Application Server Feature Pack for SCA&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
Do you have experience with one of these products? Do you use SCA in practice?
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
------------&lt;br /&gt;
Figure 1, 2, and 4 are taken from the &lt;a href="http://www.osoa.org/download/attachments/35/SCA_AssemblyModel_V100.pdf?version=1" target="_blank" title="SCA Assembly Model specification"&gt;SCA Assembly Model specification&lt;/a&gt;.&lt;br /&gt;
Figure 5 is taken from the &lt;a href="http://tuscany.apache.org/distributed-sca-domain.html" target="_blank" title="Tuscany documentation"&gt;Tuscany documentation&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=BaLgdlH0m6g:V9Izj5Qn8tk:2M-cTDv4Dz8"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?d=2M-cTDv4Dz8" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=BaLgdlH0m6g:V9Izj5Qn8tk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?i=BaLgdlH0m6g:V9Izj5Qn8tk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=BaLgdlH0m6g:V9Izj5Qn8tk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?i=BaLgdlH0m6g:V9Izj5Qn8tk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?a=BaLgdlH0m6g:V9Izj5Qn8tk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheEnterpriseArchitect?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheEnterpriseArchitect/~4/BaLgdlH0m6g" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">80@http://theenterprisearchitect.eu/pivot/</guid>
			<category>Software Engineering</category>
			<pubDate>Wed, 11 Mar 2009 11:52:00 +0200</pubDate>
		<feedburner:origLink>http://www.theenterprisearchitect.eu/archive/2009/03/11/what-every-architect-should-now-know-about-the-service-component-architecture-sca</feedburner:origLink></item>
		
		
		
		<item>
			<title>Model Driven Engineering tools compared on user activities</title>
			<link>http://feedproxy.google.com/~r/TheEnterpriseArchitect/~3/NfgtbnWRI6M/model-driven-engineering-tools-compared-on-user-activities</link>
			<comments>http://www.theenterprisearchitect.eu/archive/2009/02/18/model-driven-engineering-tools-compared-on-user-activities#comm</comments>
                        <description>&lt;p&gt;
In my previous post I gave you a quick overview of the &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/04/roles-in-model-driven-engineering" title="Roles in Model Driven Engineering MDE"&gt;roles involved in Model Driven Engineering&lt;/a&gt;. The question for today is how to support these roles with appropriate tooling?
&lt;/p&gt;
&lt;p&gt;
Tools for Model Driven Engineering are often seen as a single category of tools. I'll argue in this article that they can be separated in two categories: DSL (Domain Specific Language) tools and Model Driven Software Factories. Both types of tools have very different user activities. However, before going into details, let's first explain the basics: what is a language workbench and what workbenches do we actually need in MDE?&lt;/p&gt;&lt;h3&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3&gt;What is a Language workbench?&lt;br /&gt;
&lt;/h3&gt;
&lt;p&gt;
Martin Fowler introduced the term &lt;a target="_blank" href="http://www.martinfowler.com/articles/languageWorkbench.html" title="Language Workbench"&gt;Language Workbench&lt;/a&gt; a couple of years ago to refer to tooling supporting language-oriented programming. I see language-oriented programming as an important aspect of Model Driven Engineering, i.e. the meta level part of MDE. Martin Fowler defines a language workbench by naming the essential characteristics as follows:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Users can freely define new languages which are fully integrated with each other.&lt;/li&gt;
	&lt;li&gt;The primary source of information is a persistent &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/15/mde---model-driven-engineering----reference-guide#abstract-syntax" title="DSL abstract syntax"&gt;abstract representation&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;Language designers define a &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/15/mde---model-driven-engineering----reference-guide#dsl" title="DSL Domain Specific Language"&gt;Domain-Specific Language (DSL)&lt;/a&gt; in three main parts: schema, editor(s), and generator(s).&lt;/li&gt;
	&lt;li&gt;Language users manipulate a DSL through a projectional editor.&lt;/li&gt;
	&lt;li&gt;A language workbench can persist incomplete or contradictory information in its abstract representation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
If we compare these characteristics with the &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/04/roles-in-model-driven-engineering" title="roles invovled in model driven engineering mde"&gt;roles involved in MDE&lt;/a&gt;, we see that all roles need to use this language workbench for their own part of the job.
&lt;/p&gt;
&lt;h3&gt;Needed workbenches in Model-Driven Engineering&lt;/h3&gt;
&lt;p&gt;
Let's take a step back. A language workbench as defined by Martin Fowler in principle consists of a couple of workbenches. So, what workbenches are needed in MDE? Let's start with the MDE overview picture from my &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/02/04/roles-in-model-driven-engineering" title="roles in mde"&gt;previous post&lt;/a&gt; (see Figure 1).
&lt;/p&gt;
&lt;p align="center" style="text-align:center;"&gt;&lt;img src="http://www.theenterprisearchitect.eu/images/mde_overview1.gif" style="border:0px solid" title="MDE overview" alt="MDE overview" class="pivot-image" /&gt;&lt;/p&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;em&gt;Figure 1 -  Overview of Model Driven Engineering&lt;/em&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
In a model driven development process the dark grey artifacts exhibited in Figure 1 need to be specified somehow. Hence, we need at least three different workbenches. A domain expert and a language engineer together define a DSL in a DSL workbench with use of a meta language. A transformation specialist and an implementation expert together define the transformation rules in a transformation workbench with use of a transformation language. They define how models expressed in the defined DSL are executed. The last workbench is the solution workbench in which the business engineer and solution architect model an application with use of the defined DSL. An overview of the different workbenches and their users is given in Figure 2.
&lt;/p&gt;
&lt;p&gt;
In reality an model driven software development process isn't that straightforward. DSLs are meant to be domain-specific, i.e. they just model a system aspect. Hence, we need multiple DSLs to describe a software solution. That's why we also need the role of software factory architect (or method engineer). Someone needs to define what models and DSLs are needed in a development process and how they are connected. In principle this role defines what workbenches are combined in a single MDE tool.
&lt;/p&gt;
&lt;p align="center" style="text-align:center;"&gt;&lt;img src="http://www.theenterprisearchitect.eu/images/mde_overview_small.gif" style="border:0px solid" title="Workbenches in Model Driven Engineering" alt="Workbenches in Model Driven Engineering" class="pivot-image" /&gt;&lt;/p&gt;

&lt;p align="center"&gt;
&lt;em&gt;Figure 2 - Overview of workbenches in MDE&lt;/em&gt;&amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;Model Driven Engineering Tools&lt;/h3&gt;
&lt;p&gt;
Looking at the current market, we can distinguish between two main approaches in MDE tooling: DSL tools and Model Driven Software Factories. 
&lt;/p&gt;
&lt;p&gt;
Let's compare them on the following points:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;em&gt;Workbenches&lt;/em&gt;: what workbenches are included in the tool.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Input&lt;/em&gt;: what is the input of the tool.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Output&lt;/em&gt;: what is the output of the tool.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Tool vendor activities&lt;/em&gt;: what does a tool vendor need to specify /build in order to create the tool.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Tool user activities&lt;/em&gt;: what does the user of the tool need to specify in order to produce the output. This is of course related to the input, but it also includes the activities not guided by the tool.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Examples&lt;/em&gt;: existing tools in this category (just a few examples, not an exhaustive list).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
DSL tool:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;em&gt;Workbenches&lt;/em&gt;: DSL workbench and transformation workbench.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Input&lt;/em&gt;: DSL definitions and transformation rules.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Output&lt;/em&gt;: solution workbench and generator.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Tool vendor activities&lt;/em&gt;: meta language definition, transformation language definition, workbench implementations.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Tool user activities&lt;/em&gt;: DSL definitions, transformation rules, architecture definition, (domain) framework implementation.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Examples&lt;/em&gt;: &lt;a target="_blank" href="http://www.openarchitectureware.org/" title="oAW"&gt;openArchitectureWare&lt;/a&gt;, &lt;a target="_blank" href="http://www.metacase.com/products.html" title="MetaEdit+"&gt;MetaEdit+&lt;/a&gt;, &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/vsx/cc677256.aspx" title="Microsoft DSL tools"&gt;Microsoft DSL Tools&lt;/a&gt;, &lt;a target="_blank" href="http://www.jetbrains.com/mps/index.html" title="JetBrains MPS"&gt;JetBrains Meta Programming System&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Model Driven Software Factory:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;em&gt;Workbenches&lt;/em&gt;: solution workbench.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Input&lt;/em&gt;: functional specification.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Output&lt;/em&gt;: working application.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Tool vendor activities&lt;/em&gt;: DSL definitions, transformation rules, architecture definition, domain framework implementation, solution workbench implementation.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Tool user activities&lt;/em&gt;: application modeling.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Examples&lt;/em&gt;: &lt;a target="_blank" href="http://www.mendix.com/" title="Mendix"&gt;Mendix&lt;/a&gt; (domain: Service Oriented Business Applications).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Depending on how well the DSL tool supports the definition of multiple DSLs (referring to each other, change propagation, etc.) and transformations, you can say that a Model Driven Software Factory can be the output of a DSL tool.
&lt;/p&gt;
&lt;h3&gt;DSL tool or Model Driven Software Factory?&lt;/h3&gt;
&lt;p&gt;
What tool you'll need for your project depends on your specific wishes. A while ago Steven Kelly wrote an &lt;a target="_blank" href="http://www.metacase.com/blogs/stevek/blogView?showComments=true&amp;amp;entry=3396789364" title="DSLs: to buy, to build or to sell?"&gt;article&lt;/a&gt; on this subject from a financial perspective (in reaction on &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/08/20/dsl-in-the-context-of-uml-and-gpl" title="DSL UML GPL"&gt;this post&lt;/a&gt; of me). He concludes with: &amp;quot;&lt;em&gt;Building a DSL for your own use is a lot easier and cheaper, and gives greater benefits&lt;/em&gt;&amp;quot;. I don't agree with this conclusion.
&lt;/p&gt;
&lt;p&gt;
Building your own DSLs, i.e. using DSL tools, gives you all the flexibility you'll ever need. However, it also comes with a cost: DSL design isn't that easy. Designing a full set of DSLs for modeling all application aspects will cost a lot of effort (the DSLs will evolve along with the applications you build with them). And don't forget the training, language support, standardization, and maintenance of your languages.
&lt;/p&gt;
&lt;p&gt;
A Model Driven Software Factory, on the other hand, is only useful if it precisely targets the domain you're searching a solution for. You also need to commit you to the vendor of the factory. However, the domain of a Model Driven Software Factory can be quite broad and with current business process engines, workflow engines, and business rules engines, the used languages can be both applicable to multiple problem domains and easy to understand for business engineers. With a Model Driven Software Factory you can directly start using the DSLs for modeling your application and you don't need to have the expertise in-house to define the languages, transformations, and generators yourself.
&lt;/p&gt;
&lt;p&gt;
What type of tool you need depends on your situation. My advice: read and understand the characteristics of the different types of tools and make a choice for yourself.
&lt;/p&gt;
&lt;p&gt;
What is your preferred choice?&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/TheEnterpriseArchitect?a=pFeLAuUV"&gt;&lt;img src="http://feeds.feedburner.com/~f/TheEnterpriseArchitect?d=1557" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/TheEnterpriseArchitect?a=dGN9pBDL"&gt;&lt;img src="http://feeds.feedburner.com/~f/TheEnterpriseArchitect?i=dGN9pBDL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/TheEnterpriseArchitect?a=kCs0r1mL"&gt;&lt;img src="http://feeds.feedburner.com/~f/TheEnterpriseArchitect?i=kCs0r1mL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/TheEnterpriseArchitect?a=kGkYQ4D2"&gt;&lt;img src="http://feeds.feedburner.com/~f/TheEnterpriseArchitect?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheEnterpriseArchitect/~4/NfgtbnWRI6M" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">79@http://theenterprisearchitect.eu/pivot/</guid>
			<category>Software Engineering</category>
			<pubDate>Wed, 18 Feb 2009 21:48:00 +0200</pubDate>
		<feedburner:origLink>http://www.theenterprisearchitect.eu/archive/2009/02/18/model-driven-engineering-tools-compared-on-user-activities</feedburner:origLink></item>
		
		
		
		<item>
			<title>Roles in Model Driven Engineering</title>
			<link>http://feedproxy.google.com/~r/TheEnterpriseArchitect/~3/f-53zsCRVAY/roles-in-model-driven-engineering</link>
			<comments>http://www.theenterprisearchitect.eu/archive/2009/02/04/roles-in-model-driven-engineering#comm</comments>
                        <description>&lt;p&gt;
Model-Driven Engineering, or Model-Driven Development if you like, asks for other roles than we are used to in traditional software development. I think the most important change is the addition of a meta level. Instead of translating business wishes into source code, a software engineer has to define the Domain-Specific Language (DSL) and how to transform a Domain-Specific Model (DSM) specified in that DSL into working software. 
&lt;/p&gt;
&lt;p&gt;
Figure 1 exhibits an overview of the artifacts involved in &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/15/mde---model-driven-engineering----reference-guide" title="MDE Model Driven Engineering"&gt;Model Driven Engineering (MDE)&lt;/a&gt;. A functional specification is translated into application code by a generator. This application code uses a (domain) framework to execute. Both the application code and the framework conform to some architecture, for example a Service-Oriented Architecture (SOA). The models of the functional specification are specified in a DSL, which in its turn is specified in some meta language. The generator is configured with transformation rules, specified in a transformation language.
&lt;/p&gt;
&lt;p&gt;
The question for this article is: what roles do we distinguish in MDE and how are they different from traditional software development?&lt;/p&gt;&lt;div align="center"&gt;
&lt;br /&gt;
&lt;p style="text-align:center;"&gt;&lt;img src="http://www.theenterprisearchitect.eu/images/mde_overview1.gif" style="border:0px solid" title="Model Driven Engineering (MDE) overview" alt="Model Driven Engineering (MDE) overview" class="pivot-image" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div align="center"&gt;
&lt;em&gt;Figure 1 - Overview of Model Driven Engineering&lt;/em&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;
&lt;h3&gt;Meta level&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
The most important change in software development roles is the addition of a meta level. On this meta level we distinguish the following roles: domain expert, language engineer, transformation specialis, implementation / platform expert, and software factory architect.
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;Domain expert&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;img src="http://www.theenterprisearchitect.eu/images/domainexpert_small.jpg" style="float:right;margin-left:10px;margin-bottom:5px;border:0px solid" title="Domain expert" alt="Domain expert" class="pivot-image" /&gt;A domain expert is involved in defining a DSL. The goal of a DSL is to be domain-specific, so it should capture domain knowledge. If multiple different DSLs are used for modeling an application multiple domain experts are involved in the DSL design process. Although a domain expert is necessary for constructing a usable DSL, we need another role to specify the DSL in a formal meta language: the language engineer.
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;Language engineer&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
The language engineer uses a meta language to specify the &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/15/mde---model-driven-engineering----reference-guide#concrete-syntax" title="concrete syntax"&gt;concrete syntax&lt;/a&gt; and &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/15/mde---model-driven-engineering----reference-guide#abstract-syntax" title="abstract syntax"&gt;abstract syntax&lt;/a&gt; of a DSL. For more information on metamodels see one of my previous article on &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/04/15/combining-general-purpose-languages-and-domain-specific-languages-for-model-driven-engineering" title="defining DSLs with metamodels"&gt;defining DSLs with metamodels&lt;/a&gt;. Although DSL design can become quite complex, with appropriate tooling you don't have to be an experienced language engineer to define a DSL. See for example &lt;a target="_blank" href="http://www.openarchitectureware.org/" title="openArchitectureWare"&gt;openArchitectureWare&lt;/a&gt; and/or &lt;a target="_blank" href="http://www.metacase.com/products.html" title="MetaEdit+"&gt;MetaEdit+&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;Transformation specialist&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;img src="http://www.theenterprisearchitect.eu/images/transformationspecialist_sm.jpg" style="float:right;margin-left:10px;margin-bottom:5px;border:0px solid" title="Transformation specialist" alt="Transformation specialist" class="pivot-image" /&gt;Once the DSLs are defined, we need to define how models defined in these DSLs are executed or transformed into an executable model (called &amp;lsquo;application code' in Figure 1). This can be done with so-called &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/02/18/mda-and-model-transformation" title="model transformation"&gt;model transformation&lt;/a&gt;. A model transformation is configured using transformation rules, which are specified in a model transformation language (like &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/15/mde---model-driven-engineering----reference-guide#qvt" title="QVT"&gt;QVT&lt;/a&gt; defined by the OMG). We call the role defining these transformation rules a transformation specialist.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;Implementation / platform expert&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
While a transformation specialist knows how to use a transformation language and how to transform models into other model, an implementation (or platform) expert knows everything about executing / interpreting a model. A model is executed based on its &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2009/01/15/mde---model-driven-engineering----reference-guide#semantics" title="model language semantics"&gt;semantics&lt;/a&gt;. While a model only contains the variable elements of an application (the business logic), a framework is needed for the static elements (the infrastructure). A platform expert defines and implements such a framework and ensures that it conforms to a given architecture. &lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;Software factory architect&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
We've seen four roles involved with parts of the MDE process. I want to add one important role: the software factory architect. The situation shown in Figure 1 is a simplified version of an MDE process. In practice you'll have a lot of models specified in different DSL, together leading to a working software application. A software factory architect defines what models are needed, how they relate, in what order they have to be produced, and how changes are propagated. In short: he defines the methodology, hence we can also call him a &amp;lsquo;method engineer'. A software factory architect also defines the architecture the resulting applications should conform to. See &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/11/27/the-place-of-architecture-in-model-driven-engineering" title="architecture in model driven engineering"&gt;the place of architecture in Model Driven Engineering&lt;/a&gt; for more information.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h3&gt;Application Design&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
Besides the new meta level roles, the traditional roles in application development also change. Application design is still a challenging task. Complex real-world problems have to be expressed in a formal model. The good thing is that this model can be at a much higher level. You don't have to be a programmer to read and write such a model. On the application level we can distinguish the following roles: business engineer, application / solution architect, test engineer.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;Business engineer&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
Business engineer is a changed role in application development. The one translating a business problem into a formal application model. This role needs both an understanding of the problem domain and skills to express that understanding in a formal model. Because this model needs to be specified in a DSL a business engineer differs from a programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;Application / solution architect&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
Although an MDE software factory can guide business engineers a lot in how to specify an application model, they still have to decide on the application architecture. How to split functionality in components and services? That's not a trivial task. See for example &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/05/19/architecture-requirements-for-service-oriented-business-applications" title="SOBA Service Oriented Business Applications"&gt;the architecture requirements for Service-Oriented Business Applications&lt;/a&gt;. I think the role of solution architect will stay important. However, note the difference with traditional software engineering: the technical architecture is defined on the meta level. The transformations guide how models are transformed to or interpreted by technology.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;Test engineer&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;img src="http://www.theenterprisearchitect.eu/images/testengineer_small.jpg" style="float:right;margin-left:10px;margin-bottom:5px;border:0px solid" title="Test engineer" alt="Test engineer" class="pivot-image" /&gt;The testing role will change a bit. Technical testing is performed at the meta level. So, test engineers can focus on functional testing. Perhaps part of this work can also be transferred to the meta level with use of &lt;a target="_blank" href="http://www.theenterprisearchitect.eu/archive/2008/06/07/quality-in-model-driven-soba-development" title="model based testing"&gt;model-based testing&lt;/a&gt;, but I think it is not possible to fully automate all the testing (automation itself is also error-prone and adds complexity).&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
We've seen the roles involved in model driven software development. Different roles doesn't mean different people in every situation. One person can fulfill multiple roles. However, we see a substantial difference with the roles in &amp;lsquo;traditional' software development. In practice this lead to changes in the roles people have in their job.
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;
Do you recognize these roles? What are your experiences with people having to change to one of these roles?
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;
--------------&lt;br /&gt;
Figure 1 is created by me. Other pictures by (in order of appearance):  &lt;a target="_blank" href="http://www.flickr.com/photos/hikingartist/3010375012/" title="picture"&gt;HikingArtist.com&lt;/a&gt;, &lt;a target="_blank" href="http://www.flickr.com/photos/7167324@N06/405746762/" title="picture"&gt;aikwhye&lt;/a&gt;, &lt;a target="_blank" href="http://www.flickr.com/photos/jasewiththeface/2412997688/" title="picture"&gt;jasewiththeface&lt;/a&gt;.&lt;br /&gt;
&amp;nbsp;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/TheEnterpriseArchitect?a=jQ7UVkqL"&gt;&lt;img src="http://feeds.feedburner.com/~f/TheEnterpriseArchitect?d=1557" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/TheEnterpriseArchitect?a=39AloQ0s"&gt;&lt;img src="http://feeds.feedburner.com/~f/TheEnterpriseArchitect?i=39AloQ0s" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/TheEnterpriseArchitect?a=WDtFTXZx"&gt;&lt;img src="http://feeds.feedburner.com/~f/TheEnterpriseArchitect?i=WDtFTXZx" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/TheEnterpriseArchitect?a=hChqMy2N"&gt;&lt;img src="http://feeds.feedburner.com/~f/TheEnterpriseArchitect?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheEnterpriseArchitect/~4/f-53zsCRVAY" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">78@http://theenterprisearchitect.eu/pivot/</guid>
			<category>Software Engineering</category>
			<pubDate>Wed, 04 Feb 2009 12:45:00 +0200</pubDate>
		<feedburner:origLink>http://www.theenterprisearchitect.eu/archive/2009/02/04/roles-in-model-driven-engineering</feedburner:origLink></item>
		
		
		
	</channel>
</rss>
