<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TechJava&#187; TechJava &#8211; Articles on mdsd</title>
	<atom:link href="http://www.techjava.de/topics/category/mdsd/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.techjava.de</link>
	<description>Journal on Java Technology</description>
	<lastBuildDate>Thu, 17 Jun 2010 10:41:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Extending Xtext Build Participants</title>
		<link>http://www.techjava.de/topics/2010/06/extending-xtext-build-participants/</link>
		<comments>http://www.techjava.de/topics/2010/06/extending-xtext-build-participants/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 10:41:21 +0000</pubDate>
		<dc:creator>Simon Zambrovski</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mdsd]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[builder]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[oaw]]></category>
		<category><![CDATA[xpand]]></category>
		<category><![CDATA[xtend]]></category>
		<category><![CDATA[xtext]]></category>

		<guid isPermaLink="false">http://www.techjava.de/?p=674</guid>
		<description><![CDATA[
You&#8217;ve definitely heard about 
Xtext, the famous text modeling framework, 
community award winner . We are all looking forward to the new project management wonder: the 
release of Helios, upcoming on June the 23rd, which will include Xtext 1.0.0. In this article, I want do describe some aspects of integration of Xtext-based languages into IDE.
Introduction
Creating [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.techjava.de/wp-content/uploads/builder_hands.jpg" alt="" title="builder_hands" width="150" height="99" style="margin:10px; float: right;" /><br />
You&#8217;ve definitely heard about 
<a  href="http://www.eclipse.org/Xtext/" onclick="javascript:pageTracker._trackPageview('/external/www.eclipse.org/Xtext/');" >Xtext</a>, the famous text modeling framework, 
<a  href="http://www.eclipse.org/org/press-release/20100322_awardswinners.php" onclick="javascript:pageTracker._trackPageview('/external/www.eclipse.org/org/press-release/20100322_awardswinners.php');" >community award winner </a>. We are all looking forward to the new project management wonder: the 
<a  href="http://www.eclipse.org/helios/" onclick="javascript:pageTracker._trackPageview('/external/www.eclipse.org/helios/');" >release of Helios</a>, upcoming on June the 23rd, which will include Xtext 1.0.0. In this article, I want do describe some aspects of integration of Xtext-based languages into IDE.<span id="more-674"></span></p>
<h3>Introduction</h3>
<p>Creating your own domain-specific textual languages in Xtext is really easy, and the authors in 
<a  href="http://xtext.itemis.com/" onclick="javascript:pageTracker._trackPageview('/external/xtext.itemis.com/');" >Northern Germany</a> are doing a good job to make it even easier. Once you have a language, you want to process it and this means usually to transform your model into another representation. The facility responsible for this transformation is called generator and consists of a bunch of transformation templates (e.G. XPand) and some code executing them. On some event, the model is read in and the transformations are applied to produce code. Currently, there are two ways of triggering the transformation: you can put the calling infrastructure in a Modeling Workflow Engine file, which is a kind of batch script or you can write a build-participant, which react on the changes in the model. In this article I want to describe my experiences with the builder approach.</p>
<h3>Examining initial builder</h3>
<p>The base idea behind the builder approach is the fact, that Xtext provides an project builder, which watches for all Xtext resource changes (Xtext-based DSL models) and notifies the so-called XtextBuilderParticipants. These are registered using Eclipse extension point <code>org.eclipse.xtext.builder.participant</code> and implement the <code>IXtextBuilderParticipant</code> interface:</p>
<pre class="brush: java;">
...
public interface IXtextBuilderParticipant {
    void build(IBuildContext context, IProgressMonitor monitor) throws CoreException;
}

public interface IBuildContext {
    IProject getBuiltProject();
    List&lt;IResourceDescription.Delta&gt; getDeltas();
    ResourceSet getResourceSet();
    void needRebuild();
}
</pre>
<p>In order not to start completely from scratch, let us examine the builder provided in the Domain-Model-Example, delivered with Xtext. In the build method the example builder processes as follows:</p>
<ul>
<li>checks that the project is a Java project</li>
<li>finds the generation folder</li>
<li>creates an Output</li>
<li>creates an Outlet and registers it in the Output</li>
<li>registers a post-processor managing Java imports on the outlet</li>
<li>creates the Xpand execution context</li>
<li>registers the Java Beans version of the metamodel</li>
<li>processes the changes and analyses if the files have to be deleted or not prior re-generation</li>
<li>for all changed model elements re-generates</li>
</ul>
<p>Quite a lot of tasks, so there is a good reason, why 
<a  href="http://wiki.eclipse.org/Modeling_Workflow_Engine_%28MWE%29" onclick="javascript:pageTracker._trackPageview('/external/wiki.eclipse.org/Modeling_Workflow_Engine_%28MWE%29');" >MWE</a> scripts are used for generation. </p>
<h3>Using Project natures</h3>
<p>The first improvement I created for the builder is the ability to distinguish DSLs. The problem of triggering <strong>all</strong> XtextBuildParticipants on the change of <strong>any</strong> Xtext-based resource is that the entire Workspace gets re-generated. In my scenario, we used three DSLs and a random change caused three builders to run, even if the change has been made in another project of workspace. In order to solve this problem I used the standard Eclipse way to distinguish projects: Project Natures. </p>
<p>The nature I created is used as a marker for the builder and is emtpy:</p>
<pre class="brush: java;">
public class UiNature implements IProjectNature {
	public static final String NATURE_ID = &quot;de.techjava.dsl.uiNature&quot;;
	private IProject project;

	public void configure() throws CoreException {
        }

	public void deconfigure() throws CoreException {
	}
	public IProject getProject() {
		return project;
	}
	public void setProject(IProject project) {
		this.project = project;
	}
}
</pre>
<p>Don&#8217;t forget to register it in the plugin.xml:</p>
<pre class="brush: xml;">
   &lt;extension point=&quot;org.eclipse.core.resources.natures&quot;
         id=&quot;de.techjava.dsl.uiNature&quot;
         name=&quot;User Interface DSL Project Nature&quot;&gt;
      &lt;runtime&gt;
         &lt;run class=&quot;de.techjava.dsl.userinterface.builder.UiNature&quot; /&gt;
      &lt;/runtime&gt;
   &lt;/extension&gt;
</pre>
<p>As the first line in my builder I check the presence of the nature in the current project and stop building if the nature is not present:</p>
<pre class="brush: java;">
if (!context.getBuiltProject().hasNature(UiNature.NATURE_ID)) {
	// skip projects without UI DSL nature
	return;
}
</pre>
<p>Now, what is missing is the ability to add and remove the nature to/from the project. I liked the way how Xpand/Xtend Natures are configured (using toggle action in configure menu of the project pop-up menu). What you need is a ToggleAction that can be switched on, if the nature is not present and switched off, if the nature is installed. </p>
<pre class="brush: java;">
public class ToggleNatureAction implements IObjectActionDelegate {
	private ISelection selection;
	@SuppressWarnings(&quot;unchecked&quot;)
	public void run(IAction action) {
		if (selection instanceof IStructuredSelection) {
			for (Iterator it = ((IStructuredSelection) selection).iterator(); it.hasNext();) {
				Object element = it.next();
				IProject project = null;
				if (element instanceof IProject) {
					project = (IProject) element;
				} else if (element instanceof IAdaptable) {
					project = (IProject) ((IAdaptable) element).getAdapter(IProject.class);
				}
				if (project != null) {
					toggleNature(project);
				}
			}
		}
	}

	public void selectionChanged(IAction action, ISelection selection) {
		this.selection = selection;
	}

	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
	}

	/**
	 * Toggles sample nature on a project
	 * @param project to have sample nature added or removed
	 */
	private void toggleNature(IProject project) {
	// implemetation of toggle nature ...
	}
}
</pre>
<p>In order to make an action to a toggle-action the 
<a  href="http://wiki.eclipse.org/index.php/Platform_Command_Framework" onclick="javascript:pageTracker._trackPageview('/external/wiki.eclipse.org/index.php/Platform_Command_Framework');" >Eclipse Command Framework</a>, 
<a  href="http://wiki.eclipse.org/Menu_Contributions" onclick="javascript:pageTracker._trackPageview('/external/wiki.eclipse.org/Menu_Contributions');" >Object Contributions</a> and the 
<a  href="http://wiki.eclipse.org/Command_Core_Expressions" onclick="javascript:pageTracker._trackPageview('/external/wiki.eclipse.org/Command_Core_Expressions');" >Command Core Expressions</a> are needed. The idea is to register two actions as object contributions on the IProject using the <code>org.eclipse.ui.popupMenus</code> extension point and define visibility of those to be complement to each other (if one is visible the other is not) based on the object state, which is the presence of a project nature. The actions used point to the same implementation class but have different labels. The menu path to pop-up menu <strong>Project &gt; Configure</strong> is <strong>org.eclipse.ui.projectConfigure/additions</strong>. The visibility is defined based on the objectState:</p>
<pre class="brush: xml;">
  &lt;extension point=&quot;org.eclipse.ui.popupMenus&quot;&gt;
      &lt;objectContribution adaptable=&quot;true&quot;
            id=&quot;de.techjava.dsl.userinterface.ui.addNature&quot;
            objectClass=&quot;org.eclipse.core.resources.IProject&quot;&gt;
         &lt;action
               class=&quot;de.techjava.dsl.userinterface.ui.action.ToggleNatureAction&quot;
               id=&quot;de.techjava.dsl.userinterface.ui.AddNatureAction&quot;
               label=&quot;Add User Interface DSL Nature&quot;
               menubarPath=&quot;org.eclipse.ui.projectConfigure/additions&quot;&gt;
         &lt;/action&gt;
         &lt;visibility&gt;
            &lt;not&gt;&lt;objectState name=&quot;nature&quot; value=&quot;de.techjava.dsl.uiNature&quot; /&gt;&lt;/not&gt;
         &lt;/visibility&gt;
      &lt;/objectContribution&gt;
      &lt;objectContribution adaptable=&quot;true&quot;
            id=&quot;de.techjava.dsl.userinterface.ui.removeNature&quot;
            objectClass=&quot;org.eclipse.core.resources.IProject&quot;&gt;
         &lt;action
               class=&quot;de.techjava.dsl.userinterface.ui.action.ToggleNatureAction&quot;
               id=&quot;de.techjava.dsl.userinterface.ui.AddNatureAction&quot;
               label=&quot;Remove User Interface DSL Nature&quot;
               menubarPath=&quot;org.eclipse.ui.projectConfigure/additions&quot;&gt;
         &lt;/action&gt;
         &lt;visibility&gt;
            &lt;objectState name=&quot;nature&quot; value=&quot;de.techjava.dsl.uiNature&quot; /&gt;
         &lt;/visibility&gt;
      &lt;/objectContribution&gt;
   &lt;/extension&gt;
</pre>
<p>Please note, that the nature is implemented and registered inside of the generator project and the toggle action is implemented in the UI project. Finally, the code of the toggleNature method, which is the standard code for the project nature installation and removal:</p>
<pre class="brush: java;">
...
	IProjectDescription description = project.getDescription();
	String[] natures = description.getNatureIds();

	// remove the nature
	for (int i = 0; i &lt; natures.length; ++i) {
		// if nature exists
		if (NATURE_ID.equals(natures[i])) {
			// Remove the nature
			String[] newNatures = new String[natures.length - 1];
			System.arraycopy(natures, 0, newNatures, 0, i);
			System.arraycopy(natures, i + 1, newNatures, i, natures.length - i - 1);
			description.setNatureIds(newNatures);
			project.setDescription(description, null);
			return;
		}
	}

	// Add the nature
	String[] newNatures = new String[natures.length + 1];
	System.arraycopy(natures, 0, newNatures, 0, natures.length);
	newNatures[natures.length] = NATURE_ID;
	description.setNatureIds(newNatures);
	project.setDescription(description, null);
...
</pre>
<p>That&#8217;s it, run and right-click on the Project and then go to the Configure Menu (pretty low in the pop-up) and you will see the result:<br />
<img src="http://www.techjava.de/wp-content/uploads/both-features.png" alt="" title="both-features" width="507" height="145" style="margin:10px; float:left" /></p>
<h3>Parameterizing generator</h3>
<p>Domain-specific languages should cover only the real requirements and incorporate the specific decision made in the project. So far the theory, but in fact it is a trade-off and a compromise, what is a part of the language and what is too specific to be covered. The same holds for the generator: on the one hand you want the generator to solve exactly your problem, on the other hand you want to make it generic enough to cover a class of similar problems. </p>
<p>I faced the problem of using the generator for two teams in a big project, where the langage could be reused, but the generation infrastructure need to be slightly modified. For example, the information about the generation target folder, package prefix and the fact which artifact should be generated differred between the teams. In the same time the teams were able to agree on the same language. In order not to develop two generators, I decided to parameterize the generator and the templates. </p>
<p>The Xpand2/Xtend developers provided a way of parameterization of the templates using the so-called Global Variables, using the GLOBALVAR keyword. My favorite way of using it is to create a cached extension for reading the variable:</p>
<pre class="brush: bash;">
/*
 * Retrieves the boolean value of the global variable set from outside of the template
 */
cached Boolean generateService() :
    GLOBALVAR generateService == &quot;true&quot;
;
</pre>
<p>In order to set global variables from the build participant the XPand execution context constructor takes a <code>Map&lt;String, Variable&gt;</code> argument. The nice story about the global variables, that you can provide any objects as values. So the advantage over the usage of MWE workflow with property files read-in during processing is the big flexibility in providing the object-graphs or even statefull objects as global variable values. A good example of usage of global variable is provided in Domain-Example with Java Import Tool:</p>
<pre class="brush: java; highlight: [4,5];">
JavaImportsTool importsTool = new JavaImportsTool();
...
ctx = new XpandExecutionContextImpl(output, null,
    Collections.singletonMap(JavaImportsTool.VAR_NAME,
    new Variable(JavaImportsTool.VAR_NAME,importsTool)),
    null, null);
...
</pre>
<p>In the same time it is important to be able to load simple properties from file in the generation project. For example you could implement your own ModelProperties container, which reads properties from the file located in the generation project. For example:</p>
<pre class="brush: java;">
public class ModelProperties extends Properties {
	/**
	 * Indicates that no timestamp is available
	 */
	private static final long NO_TIMESTAMP = -1;

	private long lastModified = NO_TIMESTAMP;
	private final IFile propertyFile;
	private final HashMap&lt;String, Variable&gt; globalVars;

	/**
	 * Creates a valid model properties instance
	 *
	 * @param aProject reference to the current project
	 * @param name of the property file
	 * @throws CoreException on errors
	 */
	public ModelProperties(final IProject aProject, String filename) throws CoreException {
		if (aProject == null) {
			ErrorHelper.throwCoreException(&quot;project must be not null&quot;);
		}
		if (filename == null) {
			ErrorHelper.throwCoreException(&quot;filename must be not null&quot;);
		}
		this.globalVars = new HashMap&lt;String, Variable&gt;();
		this.propertyFile = (IFile) aProject.findMember(filename);
	}

	public IFile getPropertyFile() {
		return propertyFile;
	}

	/**
	 * Returns the global variables.
	 * @return global variables.
	 */
	public Map&lt;String, Variable&gt; getGlobalVars() {
		updateProperties();
		return globalVars;
	}

	@Override
	public String getProperty(String key) {
		updateProperties();
		return super.getProperty(key);
	}

	/**
	 * Updates the properties and the global variables if the property file has
	 * been modified.
	 */
	public void updateProperties() {
		if (this.propertyFile != null &amp;&amp; lastModified != this.propertyFile.getModificationStamp()) {
			loadProperties();
			globalVars.clear();
			for (Map.Entry&lt;Object, Object&gt; entry : entrySet()) {
				final String propertyName = (String) entry.getKey();
				globalVars.put(propertyName, new Variable(propertyName, entry.getValue()));
			}
		}
	}

	/**
	 * Loads the properties from the model file
	 */
	private void loadProperties() {

		try {
			if (propertyFile != null &amp;&amp; propertyFile.exists()) {
				super.load(propertyFile.getContents());
				this.lastModified = propertyFile.getModificationStamp();
				handleSpecialProperties();
			}
		} catch (CoreException e) {
			// no model property file isn't a problem but clear the properties:
			super.clear();
			this.lastModified = NO_TIMESTAMP;
		} catch (IOException e) {
			super.clear();
			this.lastModified = NO_TIMESTAMP;
		}
	}

	protected void handleSpecialProperties() {

	}
}
</pre>
<p>Using this class you can simple initialize the XPandExecutionContext with properties read from the file system. So in build-Method of your Generator put something like:</p>
<pre class="brush: java;">
         ModelProperties structureProperties = new ModelProperties(context.getBuiltProject(), &quot;structure.properties&quot;);
         XpandExecutionContextImpl ctx = new XpandExecutionContextImpl(output, null, structureProperties null, null);
</pre>
<p>Now you can resolve the values from the property files directly from the Templates and Extensions using the built-in GLOBAL VAR feature.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techjava.de/topics/2010/06/extending-xtext-build-participants/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2nd Workshop on MDSD Today 2008</title>
		<link>http://www.techjava.de/topics/2008/11/2nd-workshop-on-mdsd-today-2008/</link>
		<comments>http://www.techjava.de/topics/2008/11/2nd-workshop-on-mdsd-today-2008/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 21:11:27 +0000</pubDate>
		<dc:creator>HeSoK</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[mdsd]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[emf]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[gmf]]></category>
		<category><![CDATA[Hamburg]]></category>
		<category><![CDATA[itemis]]></category>
		<category><![CDATA[MDSD Today]]></category>
		<category><![CDATA[NAK]]></category>
		<category><![CDATA[tuhh]]></category>

		<guid isPermaLink="false">http://www.techjava.de/?p=174</guid>
		<description><![CDATA[On October 15th to 17th the Workshop on MDSD Today 2008 took place in the Nordakademie Elmshorn near Hamburg. This workshop was actually the sequel to two different workshops which were led by Frank Zimmermann (Nordakademie) and 
Simon Zambrovski (TUHH) the year before. For this years event, 
Peter Friese (Itemis) from Itemis joined the two [...]]]></description>
			<content:encoded><![CDATA[<p>On October 15th to 17th the Workshop on MDSD Today 2008 took place in the Nordakademie Elmshorn near Hamburg. This workshop was actually the sequel to two different workshops which were led by Frank Zimmermann (Nordakademie) and 
<a  href="http://simon.zambrovski.org/" onclick="javascript:pageTracker._trackPageview('/external/simon.zambrovski.org/');" >Simon Zambrovski</a> (TUHH) the year before. For this years event, 
<a  href="http://www.peterfriese.de/mdsd-today-2008-recap/" onclick="javascript:pageTracker._trackPageview('/external/www.peterfriese.de/mdsd-today-2008-recap/');" >Peter Friese (</a>Itemis) from Itemis joined the two for organizing the Workshop.</p>
<p><img style="border: 1px solid black; margin: 5px;" title="MDSDToday" src="http://farm4.static.flickr.com/3047/2946774374_44c950687c.jpg" alt="MDSDToday" width="500" height="333" /></p>
<p>The workshop was divided into three parts: Day 1: Management Day, Day 2: Professional Day (Modeling Projects and Tutorials) and Day 3: Professional Day (Generator Tutorials). (See also 
<a title="MDSD08"  href="http://mdsd08.techjava.de/program.php?lang=en" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/mdsd08.techjava.de/program.php');" >MDSD08</a>).</p>
<p><img style="border: 1px solid black; margin: 5px;" title="Ed Merks" src="http://farm4.static.flickr.com/3180/2945914789_f4c1b3cfe0_m.jpg" alt="Ed Merks" width="120" height="180" /><img style="border: 1px solid black; margin: 5px;" title="Axel Uhl" src="http://farm4.static.flickr.com/3067/2946786656_9c0d399ec6_m.jpg" alt="Axel Uhl" width="120" height="180" /><img style="border: 1px solid black; margin: 5px;" title="Ralf Mueller" src="http://farm4.static.flickr.com/3066/2948353783_8908f3abda_m.jpg" alt="Ralf Mueller" width="120" height="180" /></p>
<p>The first day was dominated by excellent key-note speeches given by the EMF lead 
<a  href="http://ed-merks.blogspot.com/2008/10/whirlwind-trip-to-germany.html" onclick="javascript:pageTracker._trackPageview('/external/ed-merks.blogspot.com/2008/10/whirlwind-trip-to-germany.html');" >Ed Merks</a> Ph.D. and SAPs Dr. Axel Uhl. Ed was talking about misconceptions in understanding and applying model driven techniques. Axel on the other hand talked about the challenges that still lay on our way and need to be overcome. He discussed for example the different benefits and drawbacks of using different sorts of DSL (e.g. non-textual / textual) with respect to storing them in repositories, merging and refactoring (i.e. general tool-support). Birger Garbe and Stefan Reichert (both Lufthansa Systems consultants) talked about their experiences in applying MDSD in the field. Chances and riscs were explained and how they managed to overcome those riscs. Thomas Stahl of b+m Informatik gave a talk about how MDSD, BPM and SOA fit together, unfortunately he couldn&#8217;t give is planned speech &#8220;Experiences of 10 years of MDSD&#8221;. As one of the authors of the model-driven software development book and with the experience background he has, this would be have been clearly very interesting. The speech he gave instead was also interesting but took little different directions.</p>
<p>The second day was filled with two different tracks one could attend. One covered contributions coming from the fields of research and the industry. And in the other one 
<a  href="http://ed-merks.blogspot.com/2008/10/whirlwind-trip-to-germany.html" onclick="javascript:pageTracker._trackPageview('/external/ed-merks.blogspot.com/2008/10/whirlwind-trip-to-germany.html');" >Ed Merks</a> gave an intro to the Eclipse Modeling Framework (EMF). After that, Ralf Möller of the Eclipse Foundation talked about innovation networks. The afternoon was filled with a tutorial on how to generate graphical editors using the GMF. The tutorial was given by Robert Wloch who jumped in for 
<a  href="http://koehnlein.blogspot.com/" onclick="javascript:pageTracker._trackPageview('/external/koehnlein.blogspot.com/');" >Jan Köhnlein</a> (both itemis) who unfortunately got sick.</p>
<p>The third and last day was filled with a tutorial on xText, which was given by 
<a  href="http://www.peterfriese.de/mdsd-today-2008-recap/" onclick="javascript:pageTracker._trackPageview('/external/www.peterfriese.de/mdsd-today-2008-recap/');" >Peter Friese</a> and 
<a  href="http://blog.efftinge.de/" onclick="javascript:pageTracker._trackPageview('/external/blog.efftinge.de/');" >Sven Efftinge </a>(both itemis). Later Arno Haase (independant consultant) tought the audience how to do model-to-model and model-to-code transformations.</p>
<p><img style="border: 1px solid black; margin: 5px;" title="Nordakademie" src="http://farm4.static.flickr.com/3135/2965932855_a2d3ffd879.jpg" alt="Nordakademie" width="500" height="333" /></p>
<p>Summing up this was a very, very interesting event where the cremé dé la cremé of MDSD gathered and where people had the chance to ask, learn and get to know each other. Not only the speeches and tutorials were very interesting, funny but the overall event had socially a nice friendly touch. Some further pictures can be found in the 
<a  href="http://www.flickr.com/photos/sza/sets/72157608070983644/" onclick="javascript:pageTracker._trackPageview('/external/www.flickr.com/photos/sza/sets/72157608070983644/');" >FlickR gallaery</a>.</p>
<p>The <strong>Workshop Proceedings</strong> can be obtained at amazon:<br />
<a title="Proceedings of the Second Workshop on MDSD Today 2008 " href="http://www.amazon.de/Proceedings-Second-Workshop-MDSD-Today/dp/3832276270/ref=sr_1_3?ie=UTF8&amp;s=books&amp;qid=1226001718&amp;sr=8-3" target="_blank">Proceedings of the Second Workshop on MDSD Today 2008 (engl.)<br />
</a></p>
<p>Ed Merks new book will be published sometime in the beginning of 2009, here is a link to the &#8220;old&#8221; (but still good) one:</p>
<p><a title="EMF. Eclipse Modeling Framework" href="http://www.amazon.de/EMF-Eclipse-Modeling-Framework-Revised/dp/0321331885/ref=sr_1_1?ie=UTF8&amp;s=books-intl-de&amp;qid=1226001948&amp;sr=8-1" target="_blank">Eclipse Modeling Framework (engl.)<br />
</a></p>
<p>Also I would like to mention the book by Arno Haase, Markus Völter, Thomas Stahl, Sven Efftinge:</p>
<p>
<a title="Modellgetriebene Softwareentwicklung: Techniken, Engineering, Management"  href="http://www.amazon.de/Modellgetriebene-Softwareentwicklung-Techniken-Engineering-Management/dp/3898644480/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1226002098&amp;sr=1-1" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.amazon.de/Modellgetriebene-Softwareentwicklung-Techniken-Engineering-Management/dp/3898644480/ref=pd_bbs_sr_1');" >Modellgetriebene Softwareentwicklung</a> (
<a title="Model-Driven Software Development: Technology, Engineering, Management"  href="http://www.amazon.com/Model-Driven-Software-Development-Technology-Engineering/dp/0470025700/ref=sr_1_7?ie=UTF8&amp;s=books&amp;qid=1226001051&amp;sr=8-7" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.amazon.com/Model-Driven-Software-Development-Technology-Engineering/dp/0470025700/ref=sr_1_7');" >english version</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techjava.de/topics/2008/11/2nd-workshop-on-mdsd-today-2008/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Productive Java EE 6</title>
		<link>http://www.techjava.de/topics/2008/09/productive-java-ee-6/</link>
		<comments>http://www.techjava.de/topics/2008/09/productive-java-ee-6/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 22:16:53 +0000</pubDate>
		<dc:creator>Simon Zambrovski</dc:creator>
				<category><![CDATA[announce]]></category>
		<category><![CDATA[enterprise systems]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mdsd]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[adam bien]]></category>
		<category><![CDATA[ejb]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Hamburg]]></category>
		<category><![CDATA[jee 6]]></category>
		<category><![CDATA[lehmanns]]></category>

		<guid isPermaLink="false">http://www.techjava.de/?p=129</guid>
		<description><![CDATA[The holiday season is over and we can enjoy an event every week. After 
Maven 2, 
Eclipse Stammtisch and 
reasoning on modularity an event on enterprise systems can be visited. It seems that after the 
last visit on Java EE 5 Hacking Adam want to tell something on Java EE 6 Hacking&#8230;
This session will be [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" style="border: 1px solid black; margin-right: 5px; margin-left: 5px;" src="http://www.techjava.de/wp-content/uploads/javausergrouphh.png" alt="JUGHH" width="132" height="123" />The holiday season is over and we can enjoy an event every week. After 
<a  href="http://www.techjava.de/topics/2008/09/maven-2-a-first-glance/">Maven 2</a>, 
<a  href="http://www.techjava.de/topics/2008/08/upcoming-eclipse-stammtisch-hamburg-v200809/">Eclipse Stammtisch</a> and 
<a  href="http://www.techjava.de/topics/2008/09/osgi-why-modularity-is-important/">reasoning on modularity</a> an event on enterprise systems can be visited. It seems that after the 
<a  href="http://www.techjava.de/topics/2008/05/progmatic-java-ee-5-hacking/">last visit on Java EE 5 Hacking</a> Adam want to tell something on Java EE 6 Hacking&#8230;</p>
<p>This session will be interactive / openspace like. He will walk through the new EJB 3.1 APIs and explain some interesting stuff as well. It is the logical conduction of the first 
<a  href="http://www.techjava.de/topics/2008/05/from-theory-to-practice/">JUG HH session in May 2008.</a></p>
<p><strong>Location:</strong>
<a  href="http://www.lob.de/cgi-bin/work/pages?id=U7HYixW1yHEijwvY&amp;frame=yes&amp;flag=google&amp;menupic=no&amp;page=lfb_hambg_2a" onclick="javascript:pageTracker._trackPageview('/external/www.lob.de/cgi-bin/work/pages');" >Lehmanns Fachbuchhandlung (Hamburg Hauptbahnhof)</a>, Kurze Mühren 6, 20095 Hamburg</p>
<p><strong>Date and Time:</strong> 16.09.2008, 20:00<br />
<strong>Topic:</strong> Productive Java EE 6 &#8211; Rethinking Best Practices And Bashing On Patterns, Cluster One</p>
<p><strong>Abstract: </strong>Java EE 6 is great, but many questions like:</p>
<ul>
<li>Are DAOs dead?</li>
<li>Do JSF really suck?</li>
<li>Are anemic JPA-entities a best practice?</li>
<li>Are XML deployment descriptors legacy?</li>
<li>Are EJBs lightweight?</li>
<li>How to test EJBs?</li>
<li>Is layering an antipattern?</li>
<li>Do we need factories?</li>
<li>How to integrate with RESTFul services?</li>
<li>Is it possible to deploy EJBs into a &#8230;WAR?</li>
<li>Are &#8220;plain old web containers&#8221; dead?</li>
<li>Services or Objects &#8211; what is the way to go?</li>
</ul>
<p>still remain open. These and many other questions will be discussed interactively with &#8230;code.</p>
<p><strong>Speaker:</strong> 
<a  href="http://www.adam-bien.com/" onclick="javascript:pageTracker._trackPageview('/external/www.adam-bien.com/');" ></a>Adam Bien<a></a></p>
<p><strong>About the speaker: </strong> Java Champion 
<a  href="http://www.adam-bien.com/" onclick="javascript:pageTracker._trackPageview('/external/www.adam-bien.com/');" >Adam Bien</a> is a self-employed consultant, lecturer, software architect, developer, and author in the enterprise Java sector in Germany who implements Java technology on a large scale. He is also the author of several books and articles on Java and J2EE technology, as well as distributed Java programming. His books include J2EE Patterns, J2EE HotSpots, Java EE 5 Architectures, Enterprise Architectures, Enterprise Java Frameworks, SOA Expert Knowledge, and Struts, all published in German.</p>
<p>As BEA technical director, Bien is also a member of the NetBeans Dream Team; an Expert Group member of the Java Community Process for EJB 3.1, JPA 2.0, and Java EE 6; and involved in embedded Java, Grid, and P2P technology. He currently works as an architect and developer in several J2EE-Java EE Model-Driven Architecture (MDA) and EAI component architecture projects for the Java EE platform and .NET.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techjava.de/topics/2008/09/productive-java-ee-6/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Eclipse DemoCamp Hamburg 2007 &#8211; Content</title>
		<link>http://www.techjava.de/topics/2007/12/eclipse-democamp-hamburg-07-content/</link>
		<comments>http://www.techjava.de/topics/2007/12/eclipse-democamp-hamburg-07-content/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 10:18:20 +0000</pubDate>
		<dc:creator>HeSoK</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mdsd]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[DemoCamp]]></category>
		<category><![CDATA[emf]]></category>
		<category><![CDATA[gmf]]></category>
		<category><![CDATA[repository]]></category>

		<guid isPermaLink="false">http://www.techjava.de/topics/2007/12/eclipse-democamp-hamburg-07-content/</guid>
		<description><![CDATA[
At the Eclipse DemoCamp we had the opportunity to present certain aspects of our work. Our talk concentrated on building a repository  for GMF based diagram editor models. The problem there is, that GMF makes assumptions about the underlaying model which had to be worked around. In the following slides the essence of the [...]]]></description>
			<content:encoded><![CDATA[<p>
<a  href="http://www.techjava.de/wp-content/uploads/EclipseDemoCampHamburg2007_78FD/EclipseDemoCamp.gif" onclick="javascript:pageTracker._trackPageview('/downloads/wp-content/uploads/EclipseDemoCampHamburg2007_78FD/EclipseDemoCamp.gif');" ><img src="http://www.techjava.de/wp-content/uploads/EclipseDemoCampHamburg2007_78FD/EclipseDemoCamp_thumb.gif" width="90" height="76" border="0" alt="EclipseDemoCamp" style="float:right; margin:5px;" /></a><br />At the Eclipse DemoCamp we had the opportunity to present certain aspects of our work. Our talk concentrated on building a repository  for GMF based diagram editor models. The problem there is, that GMF makes assumptions about the underlaying model which had to be worked around. In the following slides the essence of the steps necessary are explained.</p>
<p>
<a  href="http://www.techjava.de/wp-content/uploads/EclipseDemoCampHamburg2007_78FD/EclipseDemoCampFacades.pdf" title="Presentation Slides" onclick="javascript:pageTracker._trackPageview('/downloads/wp-content/uploads/EclipseDemoCampHamburg2007_78FD/EclipseDemoCampFacades.pdf');" >Presentation Slides</a></p>
<p> Thanks to 
<a  href="http://www.loroma.com/" onclick="javascript:pageTracker._trackPageview('/external/www.loroma.com/');" >http://www.loroma.com/</a> for creating and cutting the <strong>
<a  href="http://www.loroma.com/loroma/movie.faces?movie=19#EMF-GMF-Model-Repository" onclick="javascript:pageTracker._trackPageview('/external/www.loroma.com/loroma/movie.faces');" >video</a></strong>. It is dark, but you can hear our voices, even though the presentation is in German.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techjava.de/topics/2007/12/eclipse-democamp-hamburg-07-content/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse DemoCamp Hamburg 2007</title>
		<link>http://www.techjava.de/topics/2007/12/eclipse-democamp-hamburg-2007/</link>
		<comments>http://www.techjava.de/topics/2007/12/eclipse-democamp-hamburg-2007/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 07:36:11 +0000</pubDate>
		<dc:creator>Simon Zambrovski</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mdsd]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[DemoCamp]]></category>

		<guid isPermaLink="false">http://www.techjava.de/topics/2007/12/eclipse-democamp-hamburg-2007/</guid>
		<description><![CDATA[

Yesterday, the first Hamburger Eclipse DemoCamp took place. About fifty participants and eight speakers met in the nice Spanish restaurant Aqui in Schanzen-District, just a step away from the Headquaters of Gentleware AG. The event was, what it should be &#8211; a local exchange of experience and know-how in the area of Eclipse. Because of [...]]]></description>
			<content:encoded><![CDATA[<p>
<a  href="http://www.techjava.de/wp-content/uploads/EclipseDemoCampHamburg2007_78FD/EclipseDemoCamp.gif" onclick="javascript:pageTracker._trackPageview('/downloads/wp-content/uploads/EclipseDemoCampHamburg2007_78FD/EclipseDemoCamp.gif');" ><img src="http://www.techjava.de/wp-content/uploads/EclipseDemoCampHamburg2007_78FD/EclipseDemoCamp_thumb.gif" alt="EclipseDemoCamp" border="0" height="76" width="90" /></a></p>
<p>Yesterday, the first Hamburger Eclipse DemoCamp took place. About fifty participants and eight speakers met in the nice Spanish restaurant Aqui in Schanzen-District, just a step away from the Headquaters of Gentleware AG. The event was, what it should be &#8211; a local exchange of experience and know-how in the area of Eclipse. Because of the interests of Gentleware, b+m Informatik AG and itermis AG, the session was not just Eclipse-generic, but focused on MDSD topics. I liked the fact that the participants quickly build a homogenous group &#8211; all of them had some experience in PDE, EMF, etc. Amazing demo has been shown by Frank Zimmerman, who used some MDSD techniques to program the Lego Robot. A very nice start event, hopefully it can become a tradition. The photos are available in a 
<a  href="http://www.flickr.com/photos/sza/sets/72157603486024952/" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.flickr.com/photos/sza/sets/72157603486024952/');" >FlickR&#8217;s Photo Set</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techjava.de/topics/2007/12/eclipse-democamp-hamburg-2007/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
