Sunday, September 13, 2026

CDO 4.36: Safer Transactions, Faster Persistence, Stronger Foundations

EMF makes it remarkably easy to define structured models and work with them as Java object graphs. But what happens when those models become too important — or too large — to live only in memory or in local files? What if several users need to work on them concurrently, changes need to be transactional, history must be preserved, or different versions of a model need to evolve in parallel?

This is where CDO comes in.

CDO turns EMF models into shared, transactional, versioned data. Applications continue to work with familiar EObjects, while CDO provides repository persistence, transactions, change notifications, versioning, branching, merging, and scalable client/server access underneath.

With CDO 4.36, much of the work happened below the surface. Transactions have become safer and more flexible, large database commits can be considerably more efficient, PostgreSQL support has been thoroughly requalified, and the underlying Net4j communication layer received a substantial robustness and security overhaul.

But there is also a new API that is immediately visible to application developers.

Nested Transaction Scopes

Sometimes a larger operation consists of smaller operations that should succeed or fail independently, without immediately committing anything to the repository.

CDO 4.36 introduces nested transaction scopes for exactly this purpose:





Scopes can be nested arbitrarily. Committing an inner scope accepts its changes into the surrounding scope, but does not commit them to the repository. The enclosing scope can still roll everything back.

And because scopes implement AutoCloseable, leaving a scope without committing it automatically rolls back its changes. This makes them a natural fit for Java's try-with-resources pattern.

For existing APIs that expect a CDOTransaction, a scope can also provide a nested transaction facade. This makes it possible to introduce scoped behavior without having to redesign existing application code around a completely new abstraction.

Safer Transactions and Merges

The same release contains extensive work on transaction and merge correctness.

A failed merge or revert operation no longer risks leaving a transaction only partially modified. CDO now plans and validates these operations before applying them, and restores the previous transaction state if applying the result fails.

Merge handling for multi-valued model features has also become considerably more sophisticated. This is especially relevant when multiple users or branches modify the same collections in different ways. CDO can now reason more accurately about the actual changes rather than relying primarily on list positions.

For an application developer, the important result is simple: complex concurrent model changes can be combined more reliably, and unsuccessful operations leave the transaction in a well-defined state.

Faster Large Database Commits

A second major focus of CDO 4.36 is database performance.

Historically, even when CDO already knew about a complete large commit, many database operations were still executed individually. CDO can now group homogeneous work across a commit and send it to JDBC in much larger batches.

This benefits many large model changes: initial imports, large collections, append-heavy workloads, and transactions modifying many objects at once.

In one PostgreSQL benchmark with 100,000 list entries, two streams of 100,000 individual database operations were reduced to approximately 100 JDBC batch executions each. The measured initial commit time dropped from roughly 20 seconds to around 14–16 seconds.

CDO 4.36 goes further for repositories using branches. Many common large changes can now be persisted without first reading and rewriting the complete existing collection.

For example, if ten elements are appended to a list containing 1,000 elements, CDO can often write just those ten new elements. The same principle is also used for several other common update patterns.

In a synthetic H2 benchmark involving 100 such lists, 1,000 logical appends previously resulted in about 101,000 rows being processed. The optimized path wrote only the 1,000 actual additions. Commit time in that benchmark dropped from approximately 1.30 seconds to 0.10 seconds.

These numbers are workload-specific benchmarks, not a promise that every CDO application suddenly becomes ten times faster. But they illustrate an important architectural improvement: many large model changes now result in database work that is much closer to the size of the actual change.

PostgreSQL, Requalified

CDO's PostgreSQL support received another less visible but important investment.

The complete PostgreSQL database test suite was run against PostgreSQL 18.6 and pgJDBC 42.7.13. Along the way, a number of accumulated compatibility, database lifecycle, schema handling, data binding, and SQL portability issues were found and corrected.

The final qualification covered 5,318 tests, including normal, auditing and branching repositories, different transport configurations, and native models. The corresponding H2 test suite remained green as well.

For users considering CDO for a new server-side application, PostgreSQL therefore remains a thoroughly tested database choice.

A More Robust Communication Layer

CDO applications normally communicate through Net4j, and CDO 4.36 includes a concentrated round of work on this foundation as well.

The changes cover security, WebSocket validation, timeout handling, connector race conditions, resource leaks, channel management, and shutdown behavior. One particularly important security improvement restricts Java object deserialization when the sending peer has not yet been established as trusted.

Most applications should never notice these mechanisms directly — which is exactly the point. A communication framework is at its best when failure handling, cleanup, concurrency and security remain invisible to application code.

Digging Deeper

Existing CDO users who want the implementation details can find them in the corresponding GitHub issues:

The complete list of changes is available in the CDO 4.36 release notes.

CDO 4.36 does not try to reinvent what CDO is. Instead, it strengthens the properties that become increasingly important as an EMF application grows from a model editor into a collaborative, data-intensive system: safe transactions, efficient persistence, reliable concurrency, and robust communication.

If you already use CDO, this release should make demanding workloads safer and faster. If you use EMF but have never tried CDO, 4.36 may be a good reason to take another look: your application can keep working with the model objects it already knows, while CDO takes care of much of the difficult infrastructure required to turn those objects into shared, persistent, versioned data.

And with features such as nested transaction scopes, that infrastructure is becoming easier to use from ordinary Java code as well.

Tuesday, December 9, 2025

Model Evolution Support - Santa Came Early for CDO Users!

As the year draws to a close and the festive season approaches, the CDO team has delivered an early Christmas present to its community: the brand new Model Evolution Support feature! If you’ve ever wished for a smoother, safer way to evolve your EMF models in a CDO repository, your wish has just been granted.

Unwrapping the Gift: What Is Model Evolution Support?

 

Just like a carefully wrapped present under the tree, model evolution has long been a much-anticipated feature for CDO users. In the past, evolving your domain models—adding new features, refactoring classes, or updating enumerations—could be a daunting task, often requiring manual intervention, downtime, or even risky database migrations.

 

With the new Model Evolution Support, CDO introduces a phased, robust, and highly configurable process to handle model changes. This means you can now update your Ecore models and let CDO guide your repository through the necessary steps to keep your data and schema in sync—no more crossing your fingers and hoping for the best!


How Does It Work? A Phased Approach

 

Think of model evolution as a series of steps, much like unwrapping a present layer by layer. CDO’s approach is divided into clear phases: 

  1. Change Detection: CDO first checks for differences between the stored models and your newly registered EPackages. If nothing has changed, the process stops here—no unnecessary work!
  2. Repository Export (Optional): Before making any changes, CDO can export your repository data, providing a safety net in case you need to roll back.
  3. Schema Migration: This is the heart of the process. CDO updates the database schema, adjusts feature IDs, and ensures enums are consistent with your new model.
  4. Store Processing (Optional): Any additional post-processing on the database can be handled here.
  5. Repository Processing (Optional): Final touches and clean-up on the repository itself. 

Each phase is managed by a dedicated handler, and you can customize or extend these handlers to fit your project’s needs. Default implementations are provided for the most critical phases, so you’re ready to go out of the box.

Modes for Every Wish List

Santa knows that not everyone wants the same gift, and CDO’s Model Evolution Support is just as flexible. You can configure the evolution mode to: 

  • Migrate: Automatically evolve your models and database (the default and most magical option).
  • Prevent: Detect changes but stop the process if any are found—perfect for production environments where stability is key.
  • Disabled: Turn off model evolution entirely if you want to manage changes manually.

Peace of Mind: Logging, Recovery, and Transparency

 

No Christmas present is complete without instructions and a warranty! CDO logs every step of the evolution process, stores context and state in dedicated folders, and allows you to resume interrupted evolutions. This transparency means you can always see what’s happening and recover gracefully from any hiccups.

Conclusion: The Gift That Keeps on Giving

With Model Evolution Support, CDO users can look forward to a new year of painless model updates, safer migrations, and more time to focus on building great applications. It’s a feature that truly feels like Santa came early—delivering exactly what the community has been wishing for.


The feature is ready for use in this p2 repository.

More information can be found in the help center.

 

Happy holidays, and happy evolving!

Wednesday, June 11, 2025

CDO: New Release, New Homepage

CDO 4.31 is now available, as usual, together with the Eclipse Simultaneous Release 2025-06.

This CDO release contains no new features because most of my time was absorbed by working on the new build system and the new CDO Homepage:

It was quite a bit of a challenge to make it show dynamic content, particularly on the new, simplified Downloads and Documentation pages, after the Eclipse Foundation finally stopped supporting PHP on their web servers.

The beautiful new banner image and the entire main page text were my first experience with AI assistance 😎

Finally, with a new funding contract in the pocket, I can already promise new CDO features for the next release in 2025-09. Have fun and stay tuned...


Wednesday, September 15, 2021

Friday, October 21, 2016

Fancy Merge Support in CDO

CDO's merge support has recently been enhanced in several ways. Please enjoy this 7:00 minutes screen-cast that I've recorded for you:


If you'd like to learn more about CDO come to the EclipseCon Europe next week where I'll give a session on CDO for Application Programmers. I'd be happy to meet you there!

Tuesday, May 10, 2016

Come to the Eclipse Demo Camp in Berlin

On Thursday, May 12th, 2016 at 1:00 pm the Neon Demo Camp takes place in Berlin:


Of course there will be an interesting line-up of demo sessions and hopefully many other Eclipse users and makers to talk to.

I'll be showing how to install preconfigured Eclipse IDEs and how to quickly customize them to your specific needs with Oomph's Eclipse Installer.

If you happen to be in Berlin and have time, this would be a good opportunity to meet the directors of the Eclipse Foundation, Mike and Ralph,

In any case, please help us to make this a great event by spreading the word to your friends and colleagues in or near Berlin!

Wednesday, October 7, 2015

CDO 4.4.1 Is Available: New User Interface and Documentation

The new CDO Explorer with its new user interface was already released with Mars in June 2015 and I've already blogged about it: Collaborative Modeling with Papyrus and CDO (Reloaded)

Now with CDO 4.4.1 the documentation has been augmented with a beautiful User's Guide and an extensive Operator's Guide.

Please browse the release notes to see what else has changed.

Again, special thanks go to CEA for generously funding the following:
  • Branching and interactive merging
  • Support for offline checkouts
  • Interactive conflict resolution
  • Documentation
Download CDO 4.4.1 and enjoy the best CDO ever!

Thursday, July 23, 2015

A Good Thread Pool

The java.uti.concurrency package comes with a whole bunch of classes that can be extremely useful in concurrent Java applications. This article is about the ThreadPoolExecutor class, how it behaved unexpectedly for me and what I did to make it do what I want.

As the name suggests a thread pool is an Executor in Java. It's even an ExecutorService but that's irrelevant for the understanding of the fundamental behavior. The only important operational method of a thread pool is void execute(Runnable task). You pass in your task and the pool will eventually execute it on one of its worker threads. A thread pool is made up of the following components:


When you create a thread pool you must pass in a BlockingQueue instance that will become the work queue of the thread pool. You can optionally pass in a thread factory and a rejection handler. You cannot control the implementation class of the internal worker pool but you can influence it's behavior with the following important parameters:

  1. The corePoolSize defines kind of a minimum number of worker threads to keep in the internal worker pool. The reason it's not called minPoolSize is probably that directly after the creation of the thread pool the internal worker pool starts with zero worker threads. Initial workers are then created as needed but they're only ever removed from the worker pool if there are more of them than corePoolSize.
  2. The maxPoolSize defines a strict upper bound for the number of work threads in the internal worker pool.
  3. The keepAliveTime defines the time that an idle worker thread may stay in the internal worker pool if there are more than corePoolSize workers in the pool.

The Javadoc of the ThreadPoolExecutor class recommends to use the Executors.newCachedThreadPool() factory method to create a thread pool. The result is an unbounded thread pool with automatic thread reclamation. A look at the code of the factory method reveals that corePoolSize=0 and maxPoolSize=Integer.MAX_VALUE. The work queue is a SynchronousQueue, which has no internal capacity; it basically functions as a direct pipe to the next idle or newly created worker thread.

When you hammer this thread pool with lots of tasks the work queue will never grow; tasks will never be rejected because the worker pool is unbounded. Your JVM will soon become unresponsive because the pool will create thousands of worker threads!

What I really wanted is a thread pool with, let's say, maxPoolSize=100 and a work queue that temporarily keeps all the tasks that are scheduled while all of the 100 threads are busy. So I instantiated a ThreadPoolExecutor directly (without the recommended factory method), passed in corePoolSize=10, maxPoolSize=100, and a LinkedBlockingQueue to be used as the work queue. And here comes the big surprise: This thread pool never creates more than corePoolSize worker threads! Instead the work queue will grow and grow and grow. The tasks in it will always compete for the 10 core workers. Why is that?

To understand you need to know how the execute() method works. Of course it's all Javadoc'ed, but that doesn't mean it's expectation-compliant (well, I know that expectations can be subjective). The following flow diagram illustrates what the execute() method does:


There are only three different outcomes, the task can be enqueued in the work queue, a new worker thread can be created, or the task can be rejected. Three conditions are checked to determine the outcome at a specific point in time. The first condition is only relevant in the warm-up phase of the pool, but then it becomes interesting:

enqueue is always preferred over newWorker!

That means that, with an unbounded work queue, no more than corePoolSize workers will  ever be created; maxPoolSize becomes completely irrelevant. Now we have seen one pool configuration that only ever creates new workers (the default) and one that only ever enqueues tasks. Between these two evils is probably the a thread pool with both a bounded worker pool and a bounded work queue, but obviously such a thread pool will reject tasks when hammered enough.

That's all not what I wanted, but wait:

I control the work queue implementation!

Peeking again at the code of the execute() method shows that the only interaction between the thread pool and the work queue here is the call workQueue.offer(task) and per contract this method returns whether it accepted the offer or not. So, the simple solution to my problem is a BlockingQueue implementation with an offer() method overridden to accept the offered task only if the worker pool contains less than maxPoolSize threads.

Subclassing LinkedBlockingQueue would do that trick but there's a small problem remaining now: The three conditions (see above) are checked in the execute() method of the thread pool without any synchronization. That means, if my work queue does not accept a task because there are still less than maxPoolSize workers allocated the third condition is not necessarily true a nanosecond later. The task would be completely rejected from the pool rather than be enqueued. The solution to this problem is a custom rejection handler that takes the rejected task and puts it back at the beginning of the work queue. And now it becomes clear why subclassing LinkedBlockingDequeue is a better alternative: It provides the needed addFirst(Runnable task) method.

If you try to implement these ideas you'll likely discover a few technical complications, such as the LinkedBlockingDeque class not being available in Java 1.5. If you're interested in my concrete solution please have a look at the source code of my good thread pool. Enjoy...

Sunday, June 21, 2015

Oomph Workshop: Eclipse the Way You Want It

Our Oomph Workshop at EclipseCon France is next Wednesday morning and Ed and I hope to see you there. We'll not only show you how to use Oomph's Eclipse Installer to provision ready-to-use IDEs and workspaces, we'll also teach you how to create setups for your own projects:


By submitting a functional setup for an Eclipse project
every EclipseCon participant can



All you need is an Eclipse IDE with Oomph and our Author's Guide.

The challenge, of course, becomes easier if you attend our workshop. If you plan to do so, please download the following zip file and unzip it to an empty folder on your local disk:



The zip file is giant (2.5 GB) because we've designed it to allow you to exercise the tutorial without network access, i.e., it includes some mirrors of p2 and Git repositories, as well as preconfigured installer executables for all platforms. To bootstrap the tutorial IDE follow these simple steps:

  1. Go to the "installers" folder and launch the installer for your platform. If you are on Linux, please "chmod +x" your installer binary first!

  2. If you run the installer the first time ever it might come up in simple mode. In this case please switch it to advanced mode:

  3. In the advanced mode pick the "Eclipse IDE for Eclipse Committers" product and select the "Mars" version and click Next:


      
  4. On the second installer page double-click the "Oomph Tutorial" project and verify that it's been added to the table at the bottom:



  5. Confirm all following installer pages with Next or Finish. The tutorial IDE will be installed and started:

Now you're ready to participate. We're looking forward to meeting you in Toulouse!

Tuesday, April 28, 2015

Collaborative Modeling with Papyrus and CDO (Reloaded)

Since the beginning of this year I've been working on fundamental improvements to the user interface of CDO and its integration with Papyrus. In particular CEA has generously funded the following:
  • Branching and interactive merging
  • Support for offline checkouts
  • Interactive conflict resolution
Most of the new functionality has been implemented directly in CDO and is available for other modeling tools, too. Please enjoy a brief tour of what's in the pipe for the Mars release:


The following screencast shows how Papyrus will integrate with this new CDO user interface:


I hope you like the new concepts and workflows. Feedback is welcome, of course. And I'd like to thank CEA, Kenn Hussey and Christian Damus for their help to make this happen!

Friday, December 12, 2014

Oomph 1.0.0 is Available

I'm very happy and a little proud to announce the very first release of Eclipse Oomph. The new installers are now available for your platform:

You can also install Oomph into an existing IDE via the update site or the site archive. Our help center is still work in progress but you may already find answers to your questions there. Our wiki may provide additional information.

This 1.0.0 release includes:

I'd like to thank our committers, especially my friend Ed Merks, our contributors and early users for their great contributions, valuable feedback, and concise bug reports. Working with you has been and will continue to be an absolutely pleasant and rewarding experience for me.

Tuesday, December 9, 2014

When You Change a Method Return Type...

... strange effects can result under certain circumstances! Recently some Oomph users reported mysterious NoSuchMethodErrors at runtime and I spent quite some time to hunt down the problem. What I found is kind of scary. Consider the following, simple program:

  public class Util
  {
    public static void run()
    {
      // Run it...
    }
  }

  public class Main
  {
    public static void main(String[] args)
    {
      Util.run();
    }
  }

The bytecode of the compiled main() method is as simple as:

  invokestatic Util/run()V
  return

Notice the uppercase "V" at the end of the run() method call. It indicates that the return type of the called run() method is "void" and is part of the bytecode of the caller! Now change the declaration of the called run() method to return a boolean value:

  public class Util
  {
    public static boolean run()
    {
      // Run it...
      return true;
    }
  }

  public class Main
  {
    public static void main(String[] args)
    {
      Util.run();
    }
  }

Recompile both classes and look at the bytecode of the main() method again:

  invokestatic Util/run()Z
  pop
  return

Notice that the bytecode has changed even though the source code of the Main class has not changed the least bit. The old run() method with no return type would not be considered a valid call target anymore!

Interesting, but when can this become a real problem?

Well, in our case the calling and the called method are in different OSGi plugins and we use Maven/Tycho to build them and our Oomph users use p2 to install or update them. The following steps turned out to be tragic:

  • I changed the return type of the called method from void to boolean.
  • Maven/Tycho has built both the calling and the called plugin.
    • The called plugin got a new version (build qualifier) because it was really changed.
    • The calling plugin did not get a different version because its source code wasn't changed.
  • A user updated his Oomph installation to the new build.
    • The called plugin was updated because a new version was found.
    • The calling plugin was not updated because there was no new version available. To be clear, there was a plugin with different content in the new build, but it had the same version as in the previous build.
As a result this user was faced with an evil exception at runtime:

  java.lang.NoSuchMethodError: Util.run()V

Now that I know why this happened I can easily fix the nasty problem by applying a fake change to the calling plugin's source code to cause Tycho to assign a new version number to it; one that is consistent with the bytecode of the called plugin.

The fact that this can happen so easily leaves me kind of scared. After all, I'll probably never ever try to change a method return type again.

Monday, November 3, 2014

Better Late Than Never

I wanted to remind you about the Call for Papers for the EclipseCon North America 2015 earlier, but the EclipseCon Europe, which just ended, has kept me too busy.


For San Francisco in March 2015 I hope that we can put together an interesting and funny program, too. And we need your help to make that possible. There are still two weeks left to submit your proposal.

If you submit now your proposal has the chance to be among the early bird picks!

Wednesday, June 26, 2013

CDO 4.2 is Available

The CDO Model Repository 4.2 release is now available, aligning with the Eclipse Kepler Simultaneous Release. CDO is featured in the Eclipse Modeling package.

CDO 4.2 was officially released on June 26th, 2013. Thanks to everyone who helped to make this release the best CDO ever!

Wednesday, May 15, 2013

Thank You Google!


Yesterday I asked you to vote for the JRE that you're using in production to get an impression whether we need to keep support for Java 1.5. The participation was very good, there were 45 votes in the first two hours. The majority of the voters is using Java 1.7, a second majority is using Java 1.6, almost noone is using Java 1.5, noone is using Java 1.4 or 1.8.

Then, all of a sudden, I realized a decrease in total votes. First they dropped down to 19, now they're at 10. The problem of disappearing votes is known for almost a year. Thank you Google, a warning note on the poll gadget would have been nice!

Here's a replacement that hopefully works better:

What JRE Are You Using?
  

Tuesday, May 14, 2013

Still Using Java 1.5?

Traditionally most Eclipse plugins declare a Java 1.5 compatibility in their bundle manifests:

Bundle-RequiredExecutionEnvironment: J2SE-1.5

And so does CDO. Now it seems that newer versions of some JDBC drivers (e.g. HSQLDB) start to depend on Java 1.6 and, unfortunately, the JDBC API of Java 1.6 is not compatible with its 1.5 pendant.

We're currently discussing how to deal with this problem and we're very interested in your opinion. Please participate in this small poll to give us an impression on whether Java 1.5 support is still needed:

What JRE Are You Using?
  

Saturday, May 4, 2013

Copyright Headers from the Git History

The other day Vincent Zurczak has blogged about Updating Copyright Mentions with Eclipse and his way of maintaining legal headers in software artifacts is very similar to what we've always done in CDO. We had the exact same header in all artifacts and we used search and replace once per year to update them all. For us that has several disadvantages:
  1. Most importantly that means to modify files that have no other (real) changes in that year.
  2. It was hard to find the files with missing legal headers.
  3. It was hard (well, mostly because I wasn't smart enough) to have different copyright owners.
What I always envisioned was a tool that identifies files that could or should have legal headers, consults the Git history for these files and assembles a copyright line as follows:

Copyright (c) 2008, 2009, 2011-2013 Owner and others.

Yesterday I've finally finished this tool:



A simple Check Copyrights for missing copyrights ends with:

Copyrights missing: 0
Copyrights rewritten: 0
Files visited: 22722
Time needed: 5.73 seconds

If there are copyrights missing the tool produces a list of the paths and can optionally open them in editors. The Update Copyrights action takes approx. 35 minutes on the same working tree and results in files with beautiful legal headers that are totally in line with the Git history.

If you are interested in the code have a look at UpdateCopyrightsAction.java. There are just a few places that are CDO-specific and I would be happy to review your patches to make the tool more flexible.

Monday, April 22, 2013

Join the Eclipse Modeling Day at JAX 2013

Ed and I have organized and will moderate this year's Eclipse Modeling Day at the JAX conference in Mainz. We've put together a nice and broad program for you and we'd be happy to see you in the Gutenbergsaal 2 on

Friday, March 26, 2013 at 9:00 o'clock.


The program is a good mixture of technology talks from Eclipse project leads and experienced industrial users:



Slot I

Xcore

Ed Merks - itemis
Ecore's success stems from its power to describe deep semantic structure more concisely than Java. The downside are the tools. Certainly Ecore's structured editor is simple and effective and its graphical editor is rich and elegant but both are cumbersome compared to traditional text-based tools. The Xtext framework beckons with a solution: a textual syntax for Ecore. Going one step further, we leverage Xbase to define a concise textual notation for describing behavior and exploit it to implement constraints, derived features, operations, and data type conversion. We call this new language Xcore. This presentation will explore Xcore's capabilities and demonstrate its powerful tools in action.


Ed Merks leads the top-level Eclipse Modeling Project as well as the Eclipse Modeling Framework subproject. He holds a Ph.D. in Computing Science from Simon Fraser University and is a partner of itemis AG. 

EMF Data Binding

Tom Schindl - BestSolution.at EDV Systemhaus GmbH
Eclipse data binding provides developers with a framework to ease the development of user interfaces following the Model View Presenter (MVP) pattern. In this talk we will look at the EMF data binding extensions and how to exploit them to create rich and well-designed user interfaces, not necessarily involving SWT.


Tom Schindl is founder and owner of BestSolution.at, a company located in Western Austria that is specialized on Java and Eclipse consulting. Tom is committer on various Eclipse projects and member of the Eclipse Architecture Council.

Slot II

Now that I've Got a Model - Where's My Application?

Eike Stepper – ES-Computersysteme
Models are efficient for capturing enterprise knowledge at a high level of abstraction, independent of technical concerns. What about the background threads that are expected to cooperate nicely with my model? What if real data are magnitudes bigger than the data I've played with? How do I store this data and broadcast changes to the other users of my application? Can I prevent multiple users from accidentally modifying the same object? In this presentation I'll tell you how best to employ some runtime aspects of Eclipse Modeling to build a scalable, transactional and distributed application for your modeled data with little more than a mouse click.



Eike is an independent consultant in the areas of OSGi and modeling with over 25 years of experience in software development. With his consulting company ES-Computersysteme, founded back in 1991, he conducted dozens of successful customer projects. Eike is the leader of the CDO Model Repository and Net4j Signalling Platform projects at Eclipse and a member of the Eclipse Architecture Council. He is also committer on the EMF Client Platform, EMF DiffMerge and Mylyn projects and has won the Top Committer Eclipse Comunity Award 2010.

Building a tool based on EMF

Maximilian Koegel - EclipseSource Munich
EMF enables the automatic generation of the entity model for an application. Additional frameworks allow developers to create a running application including a UI to modify entities as well as a server to distribute the data. In this talk we demonstrate how the first version of your own application can be set up in less than one minute, just by providing your entity model with EMF. Based on the first version, we demonstrate how to iteratively adapt the first version and add additional, custom features. For the creation of the UI, we will use the EMF Client Platform and additional technologies such as databinding. This integrates also with the new Eclipse 4 Application Plattform. Furthermore, we demonstrate how to create a basic diagram editor with Graphiti. Finally, we show how to integrate different server solutions, such as CDO and EMFStore.


Maximilian Koegel is General Manager of EclipseSource Munich. He has many years of experience with Eclipse RCP and EMF and works as a consultant to customers in these areas. Also he is project lead of the projects EMFStore and EMF Client Platform and he is a committer in other EMF projects at Eclipse.org.

Slot III

Model-Driven SOA at Swiss Mobiliar

Christoph Gutmann, Michael Rauch – Schweizerische Mobiliar Versicherungsgesellschaft AG
This talk examines how Swiss Mobiliar successfully applied Eclipse Modeling technologies to create a lightweight, technical, design-time SOA infrastructure.  It presents our forward-engineering solution including the use of DSL engineering and repositories, as well as a review of the types of artifacts we generate.


Michael Rauch works as a Software Architect for Swiss Mobiliar where he is responsible for the Model-Driven SOA initiative. He works with the Eclipse Modeling Platform since 2010.

Christoph Gutmann is a Software Architect at Swiss Mobiliar. He is responsible for the SOA and JEE reference architectures, realizes code generation and manageability of SOA dependencies by model-driven architecture based on a forward engineering approach

Service Repository for Model-Driven SOA

Thomas Stahl, Stefan Zeug – b+m Informatik AG
SOA is a specialized domain to which MDD and domain-specific language technologies can be applied. This talk explores design principles for a service repository based on a generic model repository as well as common DSL and generator infrastructure. The Eclipse Modeling Project offers a rich set of base frameworks that serves our purpose, though there are challenges in ensuring that they integrate well in the context of our domain.  We will discuss conceptual and implementation aspects of such a model-based service repository for Swiss Mobiliar.


Dipl. Inform. Thomas Stahl is Chief Architect at b+m Informatik AG.One maior focus of his professional life is Model-Driven Software Development (MDSD). Parts of the Eclipse Modeling Project and the first book on MDSD are results of his pioneering efforts.  Furthermore he has substantial experience in Software- and Enterprise-Architecture,  modern IT-technologies and several vertical domains. He can be reached at t.stahl@bmiag.de

Dipl. Inform/Dipl. Kfm. Stefan Zeug works as an IT-Architect for 10 years. He is currently leading the Architecture Team at b+m Informatik AG and has special interests in MDD-based concept and technologies. He can be reached at stefan.zeug@bmiag.de.

Slot IV

Interface Management in a Large Enterprise

Robert Blust – UBS
Capturing and preserving knowledge of an IT supply chain as models provides a holistic view of a large and diverse system. UBS’ enterprise model repository plays a crucial role in our tooling strategy. The talk focuses on our Eclipse-based tool chain that helps to identify, specify, design, implement and govern the interfaces between parts of our system.

Robert Blust works as an IT Architect for UBS WM CH and is responsible for the strategic tool landscape supporting the software development lifecycle. Since 2009 he leads a growing team realizing the vision of an integrated tooling platform based on the Eclipse Modeling Framework with a strong focus on model based engineering, scalability and collaboration.

Code Generation with Xtend

Sven Efftinge - itemis
Xtend is the successor to the Xpand template language which has previously been an obvious choice for developing code generators. Although Xtend is not just a template language for code generation it is extremely well suited for that task. In this session you will learn about the advantages and cool features which make Xtend a great language for building fast running, extensible and maintainable code generators.


Sven Efftinge is a passionate software developer, kite surfer and father. He's the project lead of Eclipse Xtend, a statically-typed programming language for the JVM, and Xtext, a framework for developing programming languages and domain-specific languages. He leads a development and research office for itemis, a strategic member at Eclipse.