<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-824652428103224164</id><updated>2012-01-05T15:54:48.157+01:00</updated><category term='CDO'/><category term='emf tips tweak genmodel properties'/><category term='3D'/><category term='emf tips generate editor'/><category term='eclipse modeling emf cdo top committer award webinar'/><category term='Eclipse'/><category term='EMF'/><category term='eclipse modeling emf cdo'/><category term='eclipse modeling emf cdo p2 repository listing'/><category term='Modeling'/><category term='eclipse modeling emf cdo thread safety'/><category term='modeling open source gource cdo'/><category term='eclipse foundation project funding'/><category term='eclipse modeling emf cdo eclipsecon'/><category term='emf tips generate model'/><category term='eclipse modeling stammtisch berlin'/><category term='EclipseCon'/><category term='eclipse modeling emf cdo ese summit'/><title type='text'>The Gordian</title><subtitle type='html'>If then such praise the Macedonian got&lt;br&gt;
For having rudely cut the Gordian Knot...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>34</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-5304326442569514617</id><published>2011-12-12T18:01:00.009+01:00</published><updated>2011-12-12T19:18:46.201+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='modeling open source gource cdo'/><title type='text'>One Month of Open Source Development in 60 Seconds</title><content type='html'>In October &lt;a href="https://twitter.com/#%21/waynebeaton"&gt;Wayne&lt;/a&gt; twittered that I'm ruling the &lt;a href="http://eclipse.org/dash"&gt;Dash&lt;/a&gt; statistics for 2011 in terms of number of commits and that I was #4 in 2010. Looking at my usual schedule as a full time committer and lead of the &lt;a href="http://www.eclipse.org/cdo/"&gt;CDO&lt;/a&gt; project I'm not too surprised.&lt;br /&gt;&lt;br /&gt;Of course I recognize and appreciate that a pretty large team has gathered around the CDO project and is making it increasingly successful. Following our &lt;a href="http://thegordian.blogspot.com/2011/03/cdo-enters-3rd-dimension.html"&gt;tradition&lt;/a&gt; to make even complex systems comprehensible I invite you to follow one month in the open source life of our swarm of little busy bumble bees:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;iframe src="http://www.youtube.com/embed/JMOEz0QUVmI?rel=0&amp;amp;hd=1" allowfullscreen="" frameborder="0" height="233" width="400"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;a style="font-weight: bold;" href="http://www.youtube.com/watch?v=JMOEz0QUVmI"&gt;YouTube&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center; font-weight: bold;"&gt;Thank you, team, for making CDO!&lt;br /&gt;&lt;br /&gt;Thank you, community, for using CDO!&lt;br /&gt;&lt;br /&gt;Thank you, &lt;a href="http://code.google.com/p/gource/"&gt;gource&lt;/a&gt;, for this nice visualization!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-5304326442569514617?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/5304326442569514617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2011/12/one-month-of-open-source-development-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/5304326442569514617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/5304326442569514617'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2011/12/one-month-of-open-source-development-in.html' title='One Month of Open Source Development in 60 Seconds'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/JMOEz0QUVmI/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-5146951290043013944</id><published>2011-09-30T20:26:00.004+02:00</published><updated>2011-09-30T20:46:08.974+02:00</updated><title type='text'>CDO 4.0 SR1 and 4.1 M2 are available</title><content type='html'>The CDO Model Repository has a new &lt;a href="http://www.eclipse.org/cdo/downloads"&gt;Downloads&lt;/a&gt; page that we're quite proud of:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-IFYMaAjS1Xs/ToYK2A0oK-I/AAAAAAAAAW4/BIR1a10wQXs/s1600/downloads.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 323px;" src="http://1.bp.blogspot.com/-IFYMaAjS1Xs/ToYK2A0oK-I/AAAAAAAAAW4/BIR1a10wQXs/s400/downloads.PNG" alt="" id="BLOGGER_PHOTO_ID_5658221904887557090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It offers all kinds of nifty features like composite p2 repositories, repository contents pages, automatic release notes and, last but not least, our new help center (available for 4.1 all drops):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-BXKxfOpziqY/ToYMP-X3q8I/AAAAAAAAAXA/7AJ4Z1GGwFM/s1600/helpcenter.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 268px;" src="http://3.bp.blogspot.com/-BXKxfOpziqY/ToYMP-X3q8I/AAAAAAAAAXA/7AJ4Z1GGwFM/s400/helpcenter.PNG" alt="" id="BLOGGER_PHOTO_ID_5658223450418293698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The &lt;a href="http://www.eclipse.org/cdo/documentation"&gt;help center&lt;/a&gt; contains the full reference documentation  and will be augmented with programmer's guide like articles step by step now.&lt;br /&gt;&lt;br /&gt;For those who would like to play with CDO to get a first impression how it feels we're now offering example server and client products, ready to be installed on different platforms (see the first screenshot above).&lt;br /&gt;&lt;br /&gt;We hope that these new services are convenient for you and we'd appreciate your feedback to make it even better. Happy modeling...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-5146951290043013944?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/5146951290043013944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2011/09/cdo-40-sr1-and-41-m2-are-available.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/5146951290043013944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/5146951290043013944'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2011/09/cdo-40-sr1-and-41-m2-are-available.html' title='CDO 4.0 SR1 and 4.1 M2 are available'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-IFYMaAjS1Xs/ToYK2A0oK-I/AAAAAAAAAW4/BIR1a10wQXs/s72-c/downloads.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-63938232976320915</id><published>2011-07-07T08:27:00.037+02:00</published><updated>2011-07-07T19:03:54.388+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse modeling emf cdo thread safety'/><title type='text'>Concurrent Access to Models</title><content type='html'>Most people know that &lt;a href="http://www.eclipse.org/modeling/emf"&gt;EMF&lt;/a&gt; models are inherently unsafe to access concurrently from multiple threads. It's immediately obvious when you look at the following &lt;a href="http://dev.eclipse.org/svnroot/modeling/org.eclipse.emf.cdo/trunk/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/legacy/model1/impl/CompanyImpl.java"&gt;code&lt;/a&gt; that has been generated with the standard &lt;a href="http://www.eclipse.org/articles/Article-JET/jet_tutorial1.html"&gt;JET&lt;/a&gt; templates.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-ZKDWnZNJ-pU/ThVWfkys0xI/AAAAAAAAAVg/AkP2zr201p8/s1600/emf-not-threadsafe.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 186px;" src="http://2.bp.blogspot.com/-ZKDWnZNJ-pU/ThVWfkys0xI/AAAAAAAAAVg/AkP2zr201p8/s400/emf-not-threadsafe.png" alt="" id="BLOGGER_PHOTO_ID_5626498409921565458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ed-merks.blogspot.com/"&gt;Ed&lt;/a&gt; usually argues that it's the application's responsibility to control concurrent access to the model if it knows that multiple threads are involved. The application knows best how to do it efficiently for specific access patterns and ideally how to avoid deadlocks. Note that adding synchronized modifiers everywhere is counter productive. It wouldn't make the model completely &lt;a href="http://thegordian.blogspot.com/2008/11/how-safe-is-thread-safe-data-structure_02.html"&gt;thread safe&lt;/a&gt; and in addition unordered access would likely end up in deadlocks that are hard or impossible to resolve.&lt;br /&gt;&lt;br /&gt;A model is basically nothing more than an object graph and how a particular thread navigates through such an object graph is highly specific to the particular application. As a result the most commonly implemented locking scope is the entire model. Only one thread at a time can access the model, all other threads must block on a single &lt;a href="http://en.wikipedia.org/wiki/Mutual_exclusion"&gt;mutex&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-3CSHxGRUViI/ThVdGUQ6QSI/AAAAAAAAAVo/QiKlCVEVrbk/s1600/emf-single-lock.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 234px;" src="http://3.bp.blogspot.com/-3CSHxGRUViI/ThVdGUQ6QSI/AAAAAAAAAVo/QiKlCVEVrbk/s400/emf-single-lock.png" alt="" id="BLOGGER_PHOTO_ID_5626505672569536802" border="0" /&gt;&lt;/a&gt;The &lt;a href="http://www.eclipse.org/modeling/emf/?project=transaction"&gt;EMF Transaction&lt;/a&gt; project supports a protocol for clients to read and write EMF models on multiple threads but it has two major drawbacks:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It is very &lt;span style="font-weight: bold;"&gt;coarse grained&lt;/span&gt; because the locking scope is the entire model.&lt;/li&gt;&lt;li&gt;It is &lt;span style="font-weight: bold;"&gt;intrusive&lt;/span&gt; because each single access to the model must be wrapped.&lt;/li&gt;&lt;/ul&gt;A one-way road! What if we, instead of letting threads compete for the ability to access the model, hand a separate model copy to each thread. This is neither coarse grained nor intrusive because each thread can access all model elements at all times with normal application code; no wrapper commands are needed.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-HSUMGux8GBc/ThV74O052oI/AAAAAAAAAVw/1geaaSclXeA/s1600/cdo-model-copies.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 150px;" src="http://1.bp.blogspot.com/-HSUMGux8GBc/ThV74O052oI/AAAAAAAAAVw/1geaaSclXeA/s400/cdo-model-copies.png" alt="" id="BLOGGER_PHOTO_ID_5626539515452185218" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This approach obviously enables concurrent threads to access the (their) model at any time, but hey, isn't it extremely expensive to instanitate the entire model multiple times? Of course it is! So let's go further down this road and see what can be done to solve the foot print issues.&lt;br /&gt;&lt;br /&gt;Let's assume that in the most common scenarios the models can be pretty big but a single transaction, i.e., the number of objects changed between two consecutive commits, is rather small. Then we could refactor our model classes to delegate all model state access to a new kind of entity that can now be shared among the model objects of all open transactions. Let's call these shared entities &lt;span style="font-style: italic;"&gt;revisions&lt;/span&gt; and their managing container a &lt;span style="font-style: italic;"&gt;session&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-qYNqvq3qO3k/ThWBPmfwM5I/AAAAAAAAAV4/BfgiFgAXlLc/s1600/cdo-revision-sharing.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 241px;" src="http://2.bp.blogspot.com/-qYNqvq3qO3k/ThWBPmfwM5I/AAAAAAAAAV4/BfgiFgAXlLc/s400/cdo-revision-sharing.png" alt="" id="BLOGGER_PHOTO_ID_5626545414501053330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The model objects are now very cheap in terms of foot print because they only store a pointer to their current revision in addition to some general EMF infra structure such as the list of &lt;a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.4.2/org/eclipse/emf/common/notify/Adapter.html"&gt;adapters&lt;/a&gt;. The revisions contain all the modeled state plus a version number (which is explained below).&lt;br /&gt;&lt;br /&gt;Nice, now the model can be &lt;span style="font-weight: bold;"&gt;read&lt;/span&gt; by multiple threads without main memory being blown up. But with this design the original problem of concurrent &lt;span style="font-weight: bold;"&gt;write&lt;/span&gt; access is not addressed! The modifications that one thread applies to a model object end up in a shared revision, possibly overwriting changes made by other threads.&lt;br /&gt;&lt;br /&gt;It's obvious that transaction scoped writes must not alter the shared state. So we refactor our model classes again so that the setters automatically create and link copies of the used shared revisions. Let's call them &lt;span style="font-style: italic;"&gt;transactional&lt;/span&gt; revisions.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-cAy3TPGf84I/ThWGXFiBWUI/AAAAAAAAAWA/eEGpRMyD0Y8/s1600/cdo-tx-revision.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 345px;" src="http://1.bp.blogspot.com/-cAy3TPGf84I/ThWGXFiBWUI/AAAAAAAAAWA/eEGpRMyD0Y8/s400/cdo-tx-revision.png" alt="" id="BLOGGER_PHOTO_ID_5626551040649288002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A simple implementation of a commit operation would execute these steps:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The versions of all transactional revisions are checked against the versions of the current shared revisions to detect conflicting commits of other transactions.&lt;/li&gt;&lt;li&gt;Move the transactional revisions into the session.&lt;/li&gt;&lt;li&gt;Notify other transactions so that they can eventually adjust their revision pointers to the new shared revisions. Note that conflict potential in these other transactions can be detected early at this point in time!&lt;/li&gt;&lt;/ol&gt;&lt;a href="http://2.bp.blogspot.com/-_3ksZatpo3M/ThWK0Bnm2ZI/AAAAAAAAAWI/cAXF3EBbvAc/s1600/cdo-tx-committed.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 281px;" src="http://2.bp.blogspot.com/-_3ksZatpo3M/ThWK0Bnm2ZI/AAAAAAAAAWI/cAXF3EBbvAc/s400/cdo-tx-committed.png" alt="" id="BLOGGER_PHOTO_ID_5626555935861692818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;That's it! Too simple?&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;It probably isn't that simple in many ways. But there's already a mature Eclipse technology available that cares for all of the aforementioned aspects and more.&lt;br /&gt;&lt;br /&gt;Surprise, surprise, it's the &lt;a href="http://www.eclipse.org/cdo"&gt;CDO Model Repository&lt;/a&gt;, a highly efficient and scalable runtime platform for your models. The following code snippet illustrates how to use CDO to let 100 threads modify the same model:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-xJhnOnBUbm4/ThWZs2e5axI/AAAAAAAAAWg/WasOa_GyXu4/s1600/cdo-demo.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 393px; height: 400px;" src="http://4.bp.blogspot.com/-xJhnOnBUbm4/ThWZs2e5axI/AAAAAAAAAWg/WasOa_GyXu4/s400/cdo-demo.png" alt="" id="BLOGGER_PHOTO_ID_5626572305287703314" border="0" /&gt;&lt;/a&gt;You may have noticed that in the above example code the commit operation of a background thread can fail because the company object has just been modified by a different thread. With CDO you can easily implement a pessimistic locking strategy by acquiring a single explicit write lock on the company object. Alternatively you can register shipped or custom conflict resolvers with your transactions if you prefer to stay optimistic as long as possible.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Happy multi threading!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-63938232976320915?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/63938232976320915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2011/07/concurrent-access-to-models.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/63938232976320915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/63938232976320915'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2011/07/concurrent-access-to-models.html' title='Concurrent Access to Models'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-ZKDWnZNJ-pU/ThVWfkys0xI/AAAAAAAAAVg/AkP2zr201p8/s72-c/emf-not-threadsafe.png' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-2854090093167098628</id><published>2011-06-22T13:25:00.013+02:00</published><updated>2011-06-22T14:46:30.750+02:00</updated><title type='text'>Bringing It All Together</title><content type='html'>&lt;span style="font-size:small;"&gt;&lt;span lang="EN-US"&gt;A header that makes sense these days in several regards.&lt;/span&gt;&lt;/span&gt;&lt;h2&gt;&lt;span style=" font-weight: normal;font-size:small;" &gt;&lt;span  lang="EN-US" style="font-family:inherit;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;The Annual Release&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;The committers of dozens of Eclipse &lt;a href="http://www.eclipse.org/indigo/projects.php"&gt;projects&lt;/a&gt; have worked hard to fix bugs and integrate new features. And today is, once more, the magic day when all this work becomes available to the public in a single combined effort, called &lt;a href="http://www.eclipse.org/indigo"&gt;Indigo&lt;/a&gt; &lt;/span&gt;&lt;span lang="EN-US"&gt;this time&lt;/span&gt;&lt;span lang="EN-US"&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://3.bp.blogspot.com/-1K__LLYJ1Vg/TgHW_DAHIKI/AAAAAAAAAUY/Ujco7100hkA/s1600/indigo.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 217px;" src="http://3.bp.blogspot.com/-1K__LLYJ1Vg/TgHW_DAHIKI/AAAAAAAAAUY/Ujco7100hkA/s400/indigo.PNG" alt="" id="BLOGGER_PHOTO_ID_5621010188560965794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;Traditionally the weeks immediately preceeding the annual release are dedicated to fixing bugs, augmenting the documentation or enhancing the homepage. So much fun!&lt;/span&gt;&lt;/div&gt;&lt;h2&gt;&lt;span lang="EN-US"&gt;Release Engineering Tools&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;It’s my belief that the only project better than a project with a process is a project with a process that is tool supported. This year I’ve taken the chance to invest into the release engineering tools of my project, the &lt;a href="http://www.eclipse.org/cdo"&gt;CDO Model Repository&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://3.bp.blogspot.com/-U-o4SfUQD3Q/TgHbVzdonrI/AAAAAAAAAUw/I7lHRf-sW7M/s1600/Logo-CDO-opaque.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 200px;" src="http://3.bp.blogspot.com/-U-o4SfUQD3Q/TgHbVzdonrI/AAAAAAAAAUw/I7lHRf-sW7M/s400/Logo-CDO-opaque.png" alt="" id="BLOGGER_PHOTO_ID_5621014977573330610" border="0" /&gt;&lt;/a&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span lang="EN-US"&gt;An incremental project &lt;a href="http://dev.eclipse.org/svnroot/modeling/org.eclipse.emf.cdo/trunk/releng/org.eclipse.emf.cdo.releng.version/"&gt;builder&lt;/a&gt; validates the third version segment of OSGi bundles against a baseline of implementation &lt;a href="http://dev.eclipse.org/svnroot/modeling/org.eclipse.emf.cdo/trunk/releng/org.eclipse.emf.cdo.releng.version.digest/"&gt;digests&lt;/a&gt;, similar to what PDE’s &lt;a href="http://www.eclipse.org/pde/pde-api-tools/"&gt;API Tools&lt;/a&gt; achieve for the major and minor version numbers:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://1.bp.blogspot.com/-2mqXPOcsOlc/TgHYzxyWmoI/AAAAAAAAAUg/kuneQRFtg_8/s1600/version.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 272px;" src="http://1.bp.blogspot.com/-2mqXPOcsOlc/TgHYzxyWmoI/AAAAAAAAAUg/kuneQRFtg_8/s400/version.png" alt="" id="BLOGGER_PHOTO_ID_5621012193984551554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span lang="EN-US"&gt;A generator for modular help plugins combines the JavaDocs of multiple source plugins and enables cross-references between them&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-b1r24MEoa5E/TgHajQKYpZI/AAAAAAAAAUo/uUEsTIfMKiQ/s1600/help.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 246px;" src="http://1.bp.blogspot.com/-b1r24MEoa5E/TgHajQKYpZI/AAAAAAAAAUo/uUEsTIfMKiQ/s400/help.PNG" alt="" id="BLOGGER_PHOTO_ID_5621014109103891858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span lang="EN-US"&gt;An automatic promotion service recognizes new builds from the &lt;a href="https://hudson.eclipse.org/hudson/job/emf-cdo-integration"&gt;continuous integration&lt;/a&gt;, copies them to downloads.eclipse.org, composes them into a number of p2 repositories and generates web pages.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://2.bp.blogspot.com/-jHV19LD8hMI/TgHhzBv2fDI/AAAAAAAAAVQ/E25RlI317B4/s1600/promoter.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 374px;" src="http://2.bp.blogspot.com/-jHV19LD8hMI/TgHhzBv2fDI/AAAAAAAAAVQ/E25RlI317B4/s400/promoter.PNG" alt="" id="BLOGGER_PHOTO_ID_5621022076693806130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;Of course we also deliver a large number of &lt;a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_severity=enhancement;resolution=FIXED;classification=Modeling;query_format=advanced;bug_status=RESOLVED;version=4.0;component=cdo.core;component=cdo.dawn;component=cdo.db;component=cdo.docs;component=cdo.hibernate;component=cdo.net4j;component=cdo.net4j.db;component=cdo.net4j.ui;component=cdo.objy;component=cdo.releng;component=cdo.ui;product=EMF"&gt;new features&lt;/a&gt; with today’s CDO 4.0 release but I plan to write a separate article about those.&lt;/span&gt;&lt;/div&gt;&lt;h2&gt;&lt;span lang="EN-US"&gt;Eclipse Demo Camps&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;Yesterday I’ve been attending the &lt;a href="http://wiki.eclipse.org/Eclipse_DemoCamps_Indigo_2011/Braunschweig"&gt;Eclipse demo camp in Braunschweig&lt;/a&gt;. Alex has taken a nice photo of my &lt;a href="http://thegordian.blogspot.com/2011/03/cdo-enters-3rd-dimension.html"&gt;CDO 3D&lt;/a&gt; show:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;a href="http://4.bp.blogspot.com/-N6blehfs7XI/TgHVmwYdQrI/AAAAAAAAAUQ/5NjSn82ZuO0/s1600/327185595.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 371px;" src="http://4.bp.blogspot.com/-N6blehfs7XI/TgHVmwYdQrI/AAAAAAAAAUQ/5NjSn82ZuO0/s400/327185595.jpg" alt="" id="BLOGGER_PHOTO_ID_5621008671734317746" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;The camp started early, all the presenters managed to keep the schedule and many of us could round up this interesting evening at a local bar, enjoying food and drinks. Next Tuesday I’ll have the pleasure to do the same demo in &lt;a href="http://wiki.eclipse.org/Eclipse_DemoCamps_Indigo_2011/Hamburg"&gt;Hamburg&lt;/a&gt; again. I'm going to bridge that time with some decent gardening.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://2.bp.blogspot.com/-G5nX-B8sWqY/TgHdfJb6K6I/AAAAAAAAAVA/nyHBUrgFh9M/s1600/Balkon2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 111px;" src="http://2.bp.blogspot.com/-G5nX-B8sWqY/TgHdfJb6K6I/AAAAAAAAAVA/nyHBUrgFh9M/s400/Balkon2.jpg" alt="" id="BLOGGER_PHOTO_ID_5621017337113750434" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;Next Wednesday Martin and I will organize our first &lt;a href="http://wiki.eclipse.org/Eclipse_DemoCamps_Indigo_2011/Berlin"&gt;demo camp in Berlin&lt;/a&gt;. The idea was born at the end of the last EclipseCon in Santa Clara when &lt;a href="http://mmilinkov.wordpress.com/"&gt;Mike Milinkovich&lt;/a&gt; told me that he’d like to come to Berlin and give an &lt;a href="http://wiki.eclipse.org/Orion"&gt;Orion&lt;/a&gt; demo. So there we go.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;a href="http://1.bp.blogspot.com/-HjEV6KOLFG4/TgHcEX0orfI/AAAAAAAAAU4/-Vkr2GRbzy4/s1600/mike.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 388px; height: 400px;" src="http://1.bp.blogspot.com/-HjEV6KOLFG4/TgHcEX0orfI/AAAAAAAAAU4/-Vkr2GRbzy4/s400/mike.jpg" alt="" id="BLOGGER_PHOTO_ID_5621015777607462386" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;The &lt;a href="http://wiki.eclipse.org/Eclipse_DemoCamps_Indigo_2011/Berlin#Who_Is_Attending"&gt;registrations&lt;/a&gt; have already exceeded our minimum expectation of 50 but personally I hope that Berlin and Brandenburg can do better! &lt;span style="font-weight: bold;"&gt;Please take a minute and invite your friends, colleagues and partners to this event.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://1.bp.blogspot.com/-CamVHnaVfLs/TgHfgk9nxnI/AAAAAAAAAVI/YYtKMMXqE3E/s1600/Eclipse_DemoCamp_New.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 350px; height: 284px;" src="http://1.bp.blogspot.com/-CamVHnaVfLs/TgHfgk9nxnI/AAAAAAAAAVI/YYtKMMXqE3E/s400/Eclipse_DemoCamp_New.jpg" alt="" id="BLOGGER_PHOTO_ID_5621019560706033266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span lang="EN-US"&gt;The chance to talk to the director of the Eclipse Foundation will not come back any time soon for most of us. The other &lt;a href="http://wiki.eclipse.org/Eclipse_DemoCamps_Indigo_2011/Berlin#Presenters"&gt;presenters&lt;/a&gt; will contribute to a cool line up, too, of course. I’m looking forward to meeting you next Wednesday evening.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-2854090093167098628?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/2854090093167098628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2011/06/bringing-it-all-together.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/2854090093167098628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/2854090093167098628'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2011/06/bringing-it-all-together.html' title='Bringing It All Together'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-1K__LLYJ1Vg/TgHW_DAHIKI/AAAAAAAAAUY/Ujco7100hkA/s72-c/indigo.PNG' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-8928485996254779485</id><published>2011-03-21T09:40:00.000+01:00</published><updated>2011-03-21T17:38:22.914+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3D'/><category scheme='http://www.blogger.com/atom/ns#' term='CDO'/><category scheme='http://www.blogger.com/atom/ns#' term='EMF'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='EclipseCon'/><category scheme='http://www.blogger.com/atom/ns#' term='Modeling'/><title type='text'>CDO Enters the 3rd Dimension</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;b&gt;Update: The new room is&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;i&gt;&lt;b&gt;Ballroom B+C&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;b&gt;(not D, as in the printed schedule!) &lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.eclipsecon.org/2011"&gt;EclipseCon&lt;/a&gt; is near and I'd like to invite you to attend Martin's and my talk &lt;a href="http://www.eclipsecon.org/2011/sessions/?page=sessions&amp;amp;id=2161"&gt;CDO 3D&lt;/a&gt; on Monday shortly after lunch time.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-Qhx9pK1X7nE/TX_H728CwpI/AAAAAAAAAT0/Zw_6t2I2-ro/s1600/cdo3d_0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="https://lh5.googleusercontent.com/-Qhx9pK1X7nE/TX_H728CwpI/AAAAAAAAAT0/Zw_6t2I2-ro/s320/cdo3d_0.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;As you may know or not, &lt;a href="http://www.eclipse.org/cdo"&gt;CDO&lt;/a&gt; is a runtime environment for distributed     shared EMF models. Especially for organizations with huge models     (e.g. the NASA, banks like the UBS AG, etc.) CDO is indispensible     and has become sort of modeling mainstream in the past years.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-GUTABZ3_MVs/TX_H9diFyxI/AAAAAAAAAT4/TwEomLNrGRo/s1600/cdo3d_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="257" src="https://lh6.googleusercontent.com/-GUTABZ3_MVs/TX_H9diFyxI/AAAAAAAAAT4/TwEomLNrGRo/s320/cdo3d_1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Although I've always invested a lot into cool animated Powerpoint     slides and although CDO comes with really new functionality each     year, we've recognized a slight tendency of the conference audience     to decide for parallel talks about completely new modeling     technology, if they were forced to choose one. This fact (and the guy     who shouted "next year we get Pixar Studios" after my last     EclipseCon talk) has made me think about new ways of presenting     a complex distributed technology. That's why this year's talk is     titled "CDO 3D".&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-wkbZJjNgq2w/TX_H_FGBQKI/AAAAAAAAAT8/pzvqhV5zvAQ/s1600/cdo3d_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="307" src="https://lh5.googleusercontent.com/-wkbZJjNgq2w/TX_H_FGBQKI/AAAAAAAAAT8/pzvqhV5zvAQ/s320/cdo3d_2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;We will have no Powerpoint slides anymore but fully focus on     real-time demos of a distributed system with a CDO model repository     server and two CDO client applications. The client applications have     RCP user interfaces, as well as a self-made scripting console that     we will use to demo the API usage of CDO and the immediate influence     of local CDO calls on the entire system.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-veu2VJDJEF0/TX_ICSC2yoI/AAAAAAAAAUA/793alJBridY/s1600/cdo3d_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="https://lh3.googleusercontent.com/-veu2VJDJEF0/TX_ICSC2yoI/AAAAAAAAAUA/793alJBridY/s320/cdo3d_3.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In addition we've developed a 3D visualization     frontend, that renders the contents and activities in multiple Java     virtual machines into a 3D canvas in real-time. We've instrumented     these VMs so that the frontend can even visualize the method calls     between the Java objects and the network traffic between the VMs.     This diagram outlines the basic architecture of our presentation system:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-9IzeyaZsVzg/TX_Cu2k1eMI/AAAAAAAAATw/GKQNuEAVp2Y/s1600/architecture.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="https://lh4.googleusercontent.com/-9IzeyaZsVzg/TX_Cu2k1eMI/AAAAAAAAATw/GKQNuEAVp2Y/s400/architecture.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;If you're still asking yourself "What the hell is he talking about?" watch this short video:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/Cn5-Rg4nf0Y/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Cn5-Rg4nf0Y?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/Cn5-Rg4nf0Y?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: x-small;"&gt;(click &lt;a href="http://www.youtube.com/watch?v=Cn5-Rg4nf0Y"&gt;here&lt;/a&gt; for watching a larger video)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;Of course we'll also talk about some of the cool new features in CDO 4.0 like OCL queries, Blobs and Clobs, cross referencing and referential integrity checks, fail-over cluster and the brand new backend integration with MongoDB. I'm looking forward to see you in Santa Clara!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-8928485996254779485?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/8928485996254779485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2011/03/cdo-enters-3rd-dimension.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/8928485996254779485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/8928485996254779485'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2011/03/cdo-enters-3rd-dimension.html' title='CDO Enters the 3rd Dimension'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-Qhx9pK1X7nE/TX_H728CwpI/AAAAAAAAAT0/Zw_6t2I2-ro/s72-c/cdo3d_0.png' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-7352623508988376595</id><published>2010-05-19T19:05:00.006+02:00</published><updated>2010-05-19T19:34:05.384+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse modeling emf cdo p2 repository listing'/><title type='text'>What exactly is inside that p2 repository?</title><content type='html'>Wasn't it nice when we were able to point our web browser to an Eclipse update site and instantly see what's in it? Like with &lt;a href="http://net4j.sourceforge.net/update/"&gt;this&lt;/a&gt; one.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/S_QgnqHTrLI/AAAAAAAAAS4/MhQhFnE90Zk/s1600/IMG_0623.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 291px; height: 320px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/S_QgnqHTrLI/AAAAAAAAAS4/MhQhFnE90Zk/s320/IMG_0623.JPG" alt="" id="BLOGGER_PHOTO_ID_5473035312853920946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Has it ever bugged you since that this is not possible anymore with p2 repositories? Like with &lt;a href="http://download.eclipse.org/releases/helios/"&gt;this&lt;/a&gt; one.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/S_Qgn92s1rI/AAAAAAAAATA/3cW44tfCFpY/s1600/IMG_0632.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/S_Qgn92s1rI/AAAAAAAAATA/3cW44tfCFpY/s320/IMG_0632.JPG" alt="" id="BLOGGER_PHOTO_ID_5473035318152976050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I've spent some time (with the help of &lt;a href="http://intellectualcramps.blogspot.com/"&gt;Dave&lt;/a&gt;) to add the generation of a similar HTML outline to the new CDO build system. See our resulting p2 &lt;a href="http://download.eclipse.org/modeling/emf/cdo/updates/3.0/"&gt;repository&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/S_Qcx0320jI/AAAAAAAAASo/L0pD250HJbQ/s1600/p2Listing.PNG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 324px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/S_Qcx0320jI/AAAAAAAAASo/L0pD250HJbQ/s400/p2Listing.PNG" alt="" id="BLOGGER_PHOTO_ID_5473031089494086194" border="0" /&gt;&lt;/a&gt;I'd like to encourage you to provide something similar for your public p2 repository. I just added this Ant markup after the site.p2 generation:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/S_Qd6KvZxoI/AAAAAAAAASw/45ka9lxeJ0s/s1600/p2Listing-Ant.PNG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 80px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/S_Qd6KvZxoI/AAAAAAAAASw/45ka9lxeJ0s/s400/p2Listing-Ant.PNG" alt="" id="BLOGGER_PHOTO_ID_5473032332314789506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The P2Content.xsl file can be found &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.emf/org.eclipse.emf.cdo/releng/org.eclipse.emf.cdo.releng/web/P2Content.xsl?root=Modeling_Project&amp;amp;view=markup"&gt;here&lt;/a&gt;. If you apply a nicer HTML rendering than I was able to I'd appreciate some hints or snippets.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-7352623508988376595?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/7352623508988376595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2010/05/what-exactly-is-inside-that-p2.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/7352623508988376595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/7352623508988376595'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2010/05/what-exactly-is-inside-that-p2.html' title='What exactly is inside that p2 repository?'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6Y29iRV9ZvA/S_QgnqHTrLI/AAAAAAAAAS4/MhQhFnE90Zk/s72-c/IMG_0623.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-5519402505713425039</id><published>2010-04-06T19:50:00.000+02:00</published><updated>2010-04-06T19:50:38.155+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse modeling emf cdo top committer award webinar'/><title type='text'>Honor, Slides, Webinar, ...</title><content type='html'>First I'd like to thank you, the community, for electing me as this year's &lt;a href="http://www.eclipse.org/org/foundation/eclipseawards/winners10.php"&gt;top committer&lt;/a&gt;. This is a tremendous honor for me and a real motivation to keep my &lt;a href="http://dash.eclipse.org/dash/commits/web-app/active-committers.cgi?project=modeling.emf.cdo"&gt;effort&lt;/a&gt; at the same level as the last six years that I have been working with and for the community. Thank you!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.eclipse.org/images/awards/winner10.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 144px; height: 144px;" src="http://www.eclipse.org/images/awards/winner10.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;During Jeff Norris' &lt;a href="http://www.eclipsecon.org/2010/sessions/?page=sessions&amp;amp;id=1600"&gt;keynote&lt;/a&gt; at the EclipseCon it was also nice to see &lt;a href="http://wiki.eclipse.org/CDO"&gt;CDO&lt;/a&gt; being used for the distributed mission planning and control application of the NASA. In general it was an awesome presentation, almost impossible to top.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/S7oky-ruCWI/AAAAAAAAASY/UqgLE3Jb9nM/s1600/cdoatnasa.PNG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 242px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/S7oky-ruCWI/AAAAAAAAASY/UqgLE3Jb9nM/s320/cdoatnasa.PNG" alt="" id="BLOGGER_PHOTO_ID_5456714356751206754" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Taken from previous year's slides.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;My own &lt;a href="http://www.eclipsecon.org/2010/sessions/?page=sessions&amp;amp;id=1373"&gt;talk&lt;/a&gt; about CDO was not nearly as cool but the room was full and I got some nice compliments. Some asked for the download location of the slides I used. They are available &lt;a href="http://www.eclipse.org/cdo/documentation/presentations/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/S7omVYuUxtI/AAAAAAAAASg/B5OW9Lv3Gx8/s1600/whoiswho.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 269px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/S7omVYuUxtI/AAAAAAAAASg/B5OW9Lv3Gx8/s400/whoiswho.jpg" alt="" id="BLOGGER_PHOTO_ID_5456716047368636114" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt; Who is who?&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;As my slides do not provide much explanation by themselves we will offer an online &lt;a href="http://live.eclipse.org/node/884"&gt;webinar &lt;/a&gt;again. If you're interested, come and learn about the CDO Model Repository and its new 3.0 features on&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;Thursday April, 29th, 16:00 CET&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The above picture from the Enterprise bridge shows you the moderators of the webinar. Whoever is able to tell who they are can take part in a raffle and win an Eclipse polo shirt (sizes small and medium available)!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-5519402505713425039?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/5519402505713425039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2010/03/honor-slides-webinar.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/5519402505713425039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/5519402505713425039'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2010/03/honor-slides-webinar.html' title='Honor, Slides, Webinar, ...'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_6Y29iRV9ZvA/S7oky-ruCWI/AAAAAAAAASY/UqgLE3Jb9nM/s72-c/cdoatnasa.PNG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-3868686954480474625</id><published>2010-03-19T19:30:00.010+01:00</published><updated>2010-03-19T20:40:09.527+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse modeling emf cdo eclipsecon'/><title type='text'>CDO goes Offline</title><content type='html'>If you followed the catchy title because you were fearing that the &lt;a href="http://www.eclipse.org/cdo/"&gt;CDO Model Repository&lt;/a&gt; project could be discontinued, well, then I've chosen the right title. Let me elaborate by starting with a little anecdote:&lt;br /&gt;&lt;br /&gt;During a previous conference I talked about how CDO can transparently turn your file based, isolated &lt;a href="http://www.eclipse.org/modeling/emf/"&gt;EMF&lt;/a&gt; applications into a distributed cloud of nodes, all collaborating on a central shared model, immediately seeing all the changes that are committed to the repository by other clients.&lt;br /&gt;&lt;br /&gt;I was asked what would happen when, due to network failure, a client gets disconnected from the server. Would it be able to continue working in a &lt;span style="font-style: italic;"&gt;disconnected &lt;/span&gt;mode? At that time I answered that the &lt;span style="font-style: italic;"&gt;C&lt;/span&gt; in CDO is for &lt;span style="font-style: italic;"&gt;Connected&lt;/span&gt; (Data Objects) and that we, for this reason, do not offer an offline mode.&lt;br /&gt;&lt;br /&gt;Well, while that caused a grin here and there it was kind of polemical and I must say that I've always understood the industrial relevance of being able to work offline. The real reason for not having this mode in CDO has always been the tremendous cost to develop it properly. As an individual full-time committer I just couldn't afford this investment on my own.&lt;br /&gt;&lt;br /&gt;But exactly this has changed since and my new main sponsor has given me the opportunity to develop the cool new &lt;span style="font-weight: bold;"&gt;offline mode&lt;/span&gt; for CDO. In fact it is not only a &lt;span style="font-style: italic;"&gt;mode&lt;/span&gt;, optionally provided on the client side. More exactly it's a new type of a &lt;span style="font-style: italic;"&gt;cloned&lt;/span&gt; repository. This clone is continously being synchronized with a &lt;span style="font-style: italic;"&gt;master&lt;/span&gt; repository and can almost be used like a normal repository. Clients are almost not impacted, normally they do not even realize whether the clone is online or offline.&lt;br /&gt;&lt;br /&gt;The major challenge wasn't so much the background synchronization of the clone or write-through commits of clients while the clone is online. It turned out that committing to the clone during offline periods and pushing these changes to the master later is even more complex. I'm tempted to slip into the details of the technical solution that I implemented, but the whole purpose of this article is to allure you to my exciting &lt;a href="http://www.eclipsecon.org/2010/"&gt;EclipseCon&lt;/a&gt; talk:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.eclipsecon.org/2010/sessions/?page=sessions&amp;amp;id=1373"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Scale, Share and Store your Models with CDO&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The talk is on &lt;span style="font-weight: bold;"&gt;Wednesday, starting at 14:30&lt;/span&gt; and I'm going to augment the beginners' overview of the technology with a preview of all the new and the cool stuff that we'll be delivering with the upcoming CDO 3.0 in Helios. And I'm also going to explain why the new offline mode has coincidentally lead to the introduction of branching and merging support in CDO, as well.&lt;br /&gt;&lt;br /&gt;I'm looking forward to meet you all (again) in Santa Clara!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-3868686954480474625?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/3868686954480474625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2010/03/cdo-goes-offline.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/3868686954480474625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/3868686954480474625'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2010/03/cdo-goes-offline.html' title='CDO goes Offline'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-2052892461559586349</id><published>2009-11-02T12:50:00.008+01:00</published><updated>2009-11-02T20:52:43.408+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse modeling emf cdo ese summit'/><title type='text'>Less EMF!</title><content type='html'>This year's Eclipse summit was a great success, again. Before I start to chatter about the modeling technologies that I found most interesting, I'd like to point out that there also seems to be some sort of anti modeling coalition. It's clear that the public statement that "Modeling sucks!", without further reasoning, is more likely to create common hilarity than constructive engagement in the challenges and opportunities. A pity that I missed the Foundation 2.0 talk!&lt;br /&gt;&lt;br /&gt;I noticed that others took the war against modeling and EMF in particular more seriously. There seems to be a whole industry concerned with devices that shield against EMF and the like. They are sold with the slogan "Less EMF", go figure:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold; font-family: arial;font-size:130%;" &gt;&lt;a href="http://www.lessemf.com/"&gt;http://www.lessemf.com&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Of course these attempts to discredit the value of modeling are doomed to failure, as the overwhelming interest in Eclipse modeling technologies at the past summit demonstrated. The tutorial about &lt;a href="http://www.eclipsecon.org/summiteurope2009/sessions?id=1015"&gt;Advanced Programming Techniques with EMF and CDO&lt;/a&gt; was so overly crowded that the organizers had to take all tables out of the room and make place for almost 100 attendees.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/Su8rUobRqAI/AAAAAAAAARY/lKC18efgUQA/s1600-h/PA270001.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/Su8rUobRqAI/AAAAAAAAARY/lKC18efgUQA/s320/PA270001.JPG" alt="" id="BLOGGER_PHOTO_ID_5399582111689713666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;At least the same amount of interested persons stayed in that room to participate in the discussions of the following modeling symposium. All the other talks (&lt;a href="http://www.eclipsecon.org/summiteurope2009/sessions?category=Modeling"&gt;24&lt;/a&gt; total) and BOFs about modeling had been extremely well attended, too. Some of them were of particular interest for me and the CDO Model Repository project:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The new EMF Model Query provides an SQL-like query language, cool (Xtext-based?) tooling and an extensible query orchestration and interpretation framework. The SAP team announced that an integration with the CDO server side is very interesting.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Frederic Jouault and Hugo Bruneliere compared Eclipse modeling and Microsoft Oslo technologies and had some ideas how to bridge the two worlds and transform artifacts between both. They mentioned that Oslo misses a model repository.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Cedric Brun demonstrated the Acceleo generator tooling and gave insights to the process of bringing this project into Eclipse.org. The tooling looked so comfortable that I thought I should give generative approaches a new chance in the CDO code itself.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Kenn Hussey and Raphael Faudougave a BOF and a talk on Papyrus, the new integrated modeling environment at Eclipse.org. These ones were really interesting because some large companies announced that they want to participate in a general initiative with the goal of providing a commercial quality modeling tool with various diagramming support, queries, refectorings and a lot more. CDO was seen in the center of this new architecture to provide client-side scalability, model storage and collaboration.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Markus Herrmannsdoerfer gave a talk that I awaited for a long time already. It was about the COPE framework that seems to do a great job to assist with model evolution (they call it adaptation) and the subsequent instance data migration. Very interesting stuff! Many CDO users have asked for more support in this area and it's clear that we need to provide solutions in a world of changing businesses.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Hajo Eichler demonstrated his ideas on executable models. And he did that very well. Last not least because he copied major parts of my own slides. Sure, he asked for my permission, but because he also changed the copyright to his own's Ed announced that we might send the police after him. Two minutes later we could hear their alarms from outside and he got really worried. Poor Hajo!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Goulwen Le Fur gave an introduction to the new Extended Editing Framework project which is about generating "sexy" properties sheets and possibly object data entry forms. I really hope that they add support for reflective models soon, so that we can use this cool technology in our CDO Explorer UI.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/Su80eSrKUlI/AAAAAAAAARg/xw7Q06QgqdI/s1600-h/IMG_0323.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 202px; height: 320px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/Su80eSrKUlI/AAAAAAAAARg/xw7Q06QgqdI/s320/IMG_0323.JPG" alt="" id="BLOGGER_PHOTO_ID_5399592173254103634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Today it's exactly one year ago that I startet blogging and since that time I was allowed to realize how much positive impact a little marketing can have on a technology like CDO. Some of my friends startet a private competition in finding modeling talks at the summit with no mention of CDO. Not an easy task ;-)&lt;br /&gt;&lt;br /&gt;I realize that these days more and more modelers are interested in a model repository, either for using it as a runtime platform for their own products or for storing their design time models. I'm glad that we, the CDO team, have forseen this interest and for the future I hope that we can have even more collaboration and consolidation with other efforts in this area:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;Please work with us&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;on adding the cool features to CDO that you need!&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-2052892461559586349?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/2052892461559586349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/11/less-emf.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/2052892461559586349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/2052892461559586349'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/11/less-emf.html' title='Less EMF!'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6Y29iRV9ZvA/Su8rUobRqAI/AAAAAAAAARY/lKC18efgUQA/s72-c/PA270001.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-3290513143832209623</id><published>2009-09-30T13:54:00.001+02:00</published><updated>2009-09-30T13:55:09.673+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='emf tips generate editor'/><title type='text'>EMF Tips #3: Why should I want to generate editors?</title><content type='html'>I thought about treating you with more of those beautiful flowers in &lt;a href="http://ed-merks.blogspot.com/2007/07/community-is-garden.html"&gt;Ed's garden&lt;/a&gt; but there's still material from our trip to Toronto. Thanks to Dave (Dave, the &lt;a href="http://www.informit.com/store/product.aspx?isbn=9780321331885&amp;amp;rll=1"&gt;book&lt;/a&gt;, not the &lt;a href="profile/11565680209300627909"&gt;Google Bear&lt;/a&gt;!) and Kevin for organizing cool downtown and clubbing tours. And for demonstrating how dynamic IBM really is. Thanks also to &lt;a href="http://leftylynn.blogspot.com/"&gt;Lynn&lt;/a&gt; and &lt;a href="http://kenn-hussey.blogspot.com/"&gt;Kenn&lt;/a&gt; for showing us Ottawa. Damn, from getting almost one finger between Toronto and Ottawa on the map I deduced that it might be an hour's trip. It is not! Canada is sooo big.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SsM0_at7tKI/AAAAAAAAAQo/A83FYng4k8M/s1600-h/Canada+673.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 233px; height: 320px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SsM0_at7tKI/AAAAAAAAAQo/A83FYng4k8M/s320/Canada+673.jpg" alt="" id="BLOGGER_PHOTO_ID_5387207843373626530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So, why should I want to generate editors for my models? Have you ever thought about this? Or are you politely generating these editor plug-ins, just because it's possible? Or fun?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SsM1AaoSF0I/AAAAAAAAAQ4/sabqxHqest8/s1600-h/Canada+698.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 238px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SsM1AaoSF0I/AAAAAAAAAQ4/sabqxHqest8/s320/Canada+698.jpg" alt="" id="BLOGGER_PHOTO_ID_5387207860529796930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;You might &lt;a href="http://thegordian.blogspot.com/2009/08/emf-tips-1-how-hell-do-i-generate-my-28.html"&gt;remember&lt;/a&gt; that I have 28 models in my workspace. Let's, for a moment, assume I generated 28 additional editor plug-ins into my workspace. A lot of code to maintain and we should be absolutely sure that this is (a) necessary and (b) appropriate!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SsM0_-OsKwI/AAAAAAAAAQw/mqZ5qpW38xQ/s1600-h/Canada+536.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SsM0_-OsKwI/AAAAAAAAAQw/mqZ5qpW38xQ/s320/Canada+536.jpg" alt="" id="BLOGGER_PHOTO_ID_5387207852906261250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;To judge if it's necessary to generate editors on a per-model basis we need to compare the generated code of two such editor plu-ins. Interestingly, it boils down to a single difference in the &lt;span style="font-family: courier new;"&gt;initializeEditingDomain()&lt;/span&gt; method where the &lt;span style="font-family: courier new;"&gt;ItemProviderAdapterFactory&lt;/span&gt; for the model is added to the &lt;span style="font-family: courier new;"&gt;ComposedAdapterFactory&lt;/span&gt;. More interestingly, the editor will continue to function properly even if you remove this model-specific line! The reason is that the &lt;span style="font-family: courier new;"&gt;ComposedAdapterFactory&lt;/span&gt; delegates to a registry of descriptors which are contributed to the extension registry by the edit plug-ins. You see, it's clearly &lt;span style="font-weight: bold;"&gt;not necessary&lt;/span&gt; to have a generated editor per model.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SsM1BZR_ndI/AAAAAAAAARI/F6G_jESmxb4/s1600-h/Canada+785.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 262px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SsM1BZR_ndI/AAAAAAAAARI/F6G_jESmxb4/s320/Canada+785.jpg" alt="" id="BLOGGER_PHOTO_ID_5387207877347745234" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And usually it's also &lt;span style="font-weight: bold;"&gt;not appropriate&lt;/span&gt; to have vast numbers of editors that are all alike. Model editors are a means to implement functionality that is orthogonal to the models. Things like ordering of nodes and properties, changing colors, fonts and so on are achieved by customizing the editor. I really don't want to duplicate all these UI-related, i.e. model-independent, aspects over 28 editors! And don't forget, your model can be used in other generated editors (other than the one that has been generated for this particular model).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SsM1A-nAOaI/AAAAAAAAARA/IAXr-IRcEEw/s1600-h/Canada+775.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 286px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SsM1A-nAOaI/AAAAAAAAARA/IAXr-IRcEEw/s320/Canada+775.jpg" alt="" id="BLOGGER_PHOTO_ID_5387207870188108194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;All we need is a single generated editor for all our models.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SsM1sF9iA1I/AAAAAAAAARQ/tc8dJgGYzNA/s1600-h/Canada+888.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 262px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SsM1sF9iA1I/AAAAAAAAARQ/tc8dJgGYzNA/s320/Canada+888.jpg" alt="" id="BLOGGER_PHOTO_ID_5387208610896020306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Eventually we'll need additional editors for additional UI-related requirements, but not for additional models. The same arguments are certainly valid for the generated wizards. One difference between the generated editor plug-ins that I did not talk about, yet, is the editor and wizard markup in the plugin.xml. Our reusable editor would at least have to be prepared that it can be associated with different file extensions, depending on the set of deployed model or edit plug-ins.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-3290513143832209623?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/3290513143832209623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/09/emf-tips-3-why-should-i-want-to.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/3290513143832209623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/3290513143832209623'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/09/emf-tips-3-why-should-i-want-to.html' title='EMF Tips #3: Why should I want to generate editors?'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_6Y29iRV9ZvA/SsM0_at7tKI/AAAAAAAAAQo/A83FYng4k8M/s72-c/Canada+673.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-724438295211396862</id><published>2009-09-29T09:11:00.001+02:00</published><updated>2009-09-30T13:58:29.519+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='emf tips tweak genmodel properties'/><title type='text'>EMF Tips #2: Tweaking my Genmodel</title><content type='html'>The major part of this month I've been on vacation in Toronto and spent a wonderful time with René, &lt;a href="http://ed-merks.blogspot.com/"&gt;Ed&lt;/a&gt; and Frank. Ed's garden is as beautiful as one might expect and I was busy collecting evidence of that.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SsGq89AyHcI/AAAAAAAAAQA/zGZHNxQlS1w/s1600-h/Canada+308.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SsGq89AyHcI/AAAAAAAAAQA/zGZHNxQlS1w/s400/Canada+308.jpg" alt="" id="BLOGGER_PHOTO_ID_5386774593458544066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Too busy to keep up with my EMF Tips blog series. In &lt;a href="http://thegordian.blogspot.com/2009/08/emf-tips-1-how-hell-do-i-generate-my-28.html"&gt;part #1&lt;/a&gt; we discussed ways to easily generate multiple models. Thanks for all the helpful comments.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SsGq8cCYR0I/AAAAAAAAAP4/ycsFHh5EHpk/s1600-h/Canada+220.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SsGq8cCYR0I/AAAAAAAAAP4/ycsFHh5EHpk/s400/Canada+220.jpg" alt="" id="BLOGGER_PHOTO_ID_5386774584606869314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This part focusses on tayloring and tweaking the outputs of a single generator model. The default Genmodel properties lead to generation of four plug-ins: model, edit, editor and tests.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SsGq7nLt8YI/AAAAAAAAAPw/Ut0PZGBP25U/s1600-h/Canada+110.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SsGq7nLt8YI/AAAAAAAAAPw/Ut0PZGBP25U/s400/Canada+110.jpg" alt="" id="BLOGGER_PHOTO_ID_5386774570418958722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;We will always need the model plug-in itself but often we don't need all of the other three outputs, so how do we exclude particular plug-ins from generation?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SsGq9ux4grI/AAAAAAAAAQI/b0H5AJPOW64/s1600-h/Canada+352.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 245px; height: 400px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SsGq9ux4grI/AAAAAAAAAQI/b0H5AJPOW64/s400/Canada+352.jpg" alt="" id="BLOGGER_PHOTO_ID_5386774606817821362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The Genmodel has a properties category for each of the output plug-ins: Edit, Editor and Tests. Completely switching off the generation of any of these is as simple as deleting the respective Directory property.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SsGq-D6HedI/AAAAAAAAAQQ/HpIVnnffyXg/s1600-h/Canada+365.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SsGq-D6HedI/AAAAAAAAAQQ/HpIVnnffyXg/s400/Canada+365.jpg" alt="" id="BLOGGER_PHOTO_ID_5386774612489501138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The generator UI will immediately reflect this by disabling the respective Generate menu item. Even the Shift+Alt+G dialog from &lt;a href="http://thegordian.blogspot.com/2009/08/emf-tips-1-how-hell-do-i-generate-my-28.html"&gt;tip #1&lt;/a&gt; will adjust accordingly.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SsGrsZe__RI/AAAAAAAAAQY/WwdEF1rBV1w/s1600-h/Canada+409.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SsGrsZe__RI/AAAAAAAAAQY/WwdEF1rBV1w/s400/Canada+409.jpg" alt="" id="BLOGGER_PHOTO_ID_5386775408555326738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The &lt;a href="http://thegordian.blogspot.com/2009/09/emf-tips-3-why-should-i-want-to.html"&gt;next part&lt;/a&gt; of this series will focus on the interesting question "Why should I want to generate editors?". For now, you'd know how to avoid it. Stay tuned.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SsGrs_-mT-I/AAAAAAAAAQg/PlMhQafqrLs/s1600-h/Canada+926.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SsGrs_-mT-I/AAAAAAAAAQg/PlMhQafqrLs/s400/Canada+926.jpg" alt="" id="BLOGGER_PHOTO_ID_5386775418888409058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I was just told that there are still three seats available for the &lt;a href="http://entwickler-akademie.de/ak/codecamps/eclipse-cc-modeling-en"&gt;Eclipse Modeling Code Camp&lt;/a&gt; training that Ed and I will be giving next month (starting October, 12th) in Munich. Don't miss this great opportunity to spend &lt;span style="font-weight: bold;"&gt;four days&lt;/span&gt; with us and become&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;the world's greatest modeler&lt;/span&gt;!&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-724438295211396862?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/724438295211396862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/08/emf-tips-2-tweaking-my-genmodel.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/724438295211396862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/724438295211396862'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/08/emf-tips-2-tweaking-my-genmodel.html' title='EMF Tips #2: Tweaking my Genmodel'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6Y29iRV9ZvA/SsGq89AyHcI/AAAAAAAAAQA/zGZHNxQlS1w/s72-c/Canada+308.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-8417825487252353849</id><published>2009-08-22T08:53:00.004+02:00</published><updated>2009-08-22T09:38:14.394+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse modeling emf cdo'/><title type='text'>EMF is Awesome!</title><content type='html'>This is one of the conclusions in the first part of an article series I wrote for the german &lt;a href="http://it-republik.de/jaxenter/eclipse-magazin"&gt;Eclipse Magazin&lt;/a&gt;. I already &lt;a href="http://thegordian.blogspot.com/2009/04/modeling-goes-enterprise.html"&gt;blogged&lt;/a&gt; about the included example application eDine. Now the article has been promoted to the &lt;a href="http://it-republik.de/jaxenter/artikel/Modeling-goes-Enterprise-2505.html"&gt;JAXenter&lt;/a&gt; portal, where it can be read by everybody who's able to read German:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;&lt;a href="http://it-republik.de/jaxenter/artikel/Modeling-goes-Enterprise-2503.html"&gt;Modeling goes Enterprise I&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In this article I elaborate on some internal details of &lt;a href="http://www.eclipse.org/modeling/emf"&gt;EMF&lt;/a&gt; regarding scalability (see also my blog &lt;a href="http://thegordian.blogspot.com/2008/11/how-scalable-are-my-models.html"&gt;How Scalable are my Models?&lt;/a&gt;) before I dive into a detailed explanation of the &lt;a href="http://www.eclipse.org/cdo"&gt;CDO Model Repository&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/So-c-6795fI/AAAAAAAAAPg/UBYcL6QROgI/s1600-h/stepper_cdo_model_repository_II__1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 216px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/So-c-6795fI/AAAAAAAAAPg/UBYcL6QROgI/s400/stepper_cdo_model_repository_II__1.png" alt="" id="BLOGGER_PHOTO_ID_5372685485262890482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The second part of this series will show you how to use EMF and CDO to build distributed, scalable and model-based application systems. The comprehensive example that will be included in that article is already available in the &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.emf/org.eclipse.emf.cdo/examples/?root=Modeling_Project"&gt;Eclipse CVS&lt;/a&gt;. I'll leave a note here when the second part is publicly available on JAXenter.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/So-eh-d-rhI/AAAAAAAAAPo/_cJI1r76qYw/s1600-h/stepper_cdo_model_repository_II__4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 291px;" src="http://3.bp.blogspot.com/_6Y29iRV9ZvA/So-eh-d-rhI/AAAAAAAAAPo/_cJI1r76qYw/s320/stepper_cdo_model_repository_II__4.png" alt="" id="BLOGGER_PHOTO_ID_5372687187017903634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In case there's a translation geek out there, willing to help me translate these articles into English for a broader audience, please drop me a note. A seat in the CDO hall of fame is guaranteed :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-8417825487252353849?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/8417825487252353849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/08/emf-is-awesome.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/8417825487252353849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/8417825487252353849'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/08/emf-is-awesome.html' title='EMF is Awesome!'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_6Y29iRV9ZvA/So-c-6795fI/AAAAAAAAAPg/UBYcL6QROgI/s72-c/stepper_cdo_model_repository_II__1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-7091110069991785207</id><published>2009-08-17T16:04:00.006+02:00</published><updated>2009-08-19T09:21:09.069+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse modeling stammtisch berlin'/><title type='text'>Modeling Stammtisch Details</title><content type='html'>Our &lt;a href="http://www.doodle.com/qwpp6p8wtcq78t2i"&gt;poll&lt;/a&gt; for the upcoming Eclipse Modeling Stammtisch in Berlin was successful enough to arrange for a nice location and time. Jens v. Pilgrim sent me a proposal which I liked, too:&lt;br /&gt;&lt;br /&gt;&lt;h3 style="text-align: center;"&gt;&lt;a href="http://www.pratergarten.de/d/biergarten.php4"&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="color:black;"&gt;Prater Garten&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div style="text-align: center;"&gt;Kastanienallee 7 – 9&lt;br /&gt;10435 Berlin&lt;br /&gt;(Prenzlauer Berg)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Begin: 18:30&lt;br /&gt;End: Open&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;For the outside area it's not possible to reserve tables but they promised me that at this early time it'll be next to sure that we don't end up without a table for 25 persons. The rush hour there is only around 20:00.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.pratergarten.de/data/bilder/biergarten/02.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 315px; height: 250px;" src="http://www.pratergarten.de/data/bilder/biergarten/02.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Thank you, Jens, for the suggestion. We hope to meet you all there in two days...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-7091110069991785207?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/7091110069991785207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/08/modeling-stammtisch-details.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/7091110069991785207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/7091110069991785207'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/08/modeling-stammtisch-details.html' title='Modeling Stammtisch Details'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-6498310235650843579</id><published>2009-08-14T08:11:00.007+02:00</published><updated>2009-08-14T09:25:14.555+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse foundation project funding'/><title type='text'>Eclipse Foundation funds my Project</title><content type='html'>Some discussion has been going on about revenue models for open source projects and their committers.  Many good ideas, some whining, and also some misconceptions. One of those was brought to my attention several times just recently by users of CDO and by some of my customers. They seem to believe that&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;The Eclipse Foundation funds my Project&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This is simply not true, neither for my projects, &lt;a href="http://wiki.eclipse.org/CDO"&gt;CDO&lt;/a&gt; and &lt;a href="http://wiki.eclipse.org/Net4j"&gt;Net4j&lt;/a&gt;, nor for any other Eclipse project. The Foundation's revenue, as well as the donations to the Foundation, are spent in a way that more or less suits all projects equally. Staff must be paid, servers operated, marketing be done, and so on.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SoUPRfb5D1I/AAAAAAAAAPY/ocxEPkua9I0/s1600-h/SonyCenter.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SoUPRfb5D1I/AAAAAAAAAPY/ocxEPkua9I0/s320/SonyCenter.JPG" alt="" id="BLOGGER_PHOTO_ID_5369714923879862098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;All projects are responsible for their own funding. In particular the committers are either employees and paid by their employer (who'd better have a good business model for being able to continue to fund open source development) or so called individual committers, in which case they have to look after themselves for their funding or just do the work for their own gratification.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SoUNqnwyrQI/AAAAAAAAAPQ/jCQNz54lphg/s1600-h/skyscraper.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SoUNqnwyrQI/AAAAAAAAAPQ/jCQNz54lphg/s320/skyscraper.JPG" alt="" id="BLOGGER_PHOTO_ID_5369713156588481794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;To make a project successful a great deal of marketing has to be done which often incurs additional costs such as conference fees and travel expenses. I tend to think that the community benefits from these marketing efforts in a similar way as from the usage of open source product itself. The more people are using a product the quicker it will mature to something really great. And the needed funding can be distributed among even more shoulders.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SoUNqKqPcaI/AAAAAAAAAPI/8UmRk33rxWY/s1600-h/pond.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SoUNqKqPcaI/AAAAAAAAAPI/8UmRk33rxWY/s320/pond.JPG" alt="" id="BLOGGER_PHOTO_ID_5369713148776378786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I'm clearly an individual committer and I'm usually working full-time on my two Eclipse projects, for more than five years now. This can and will only continue to work if enough users of the project results realize that nothing is really free:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Open source software is free.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Free like in freedom&lt;br /&gt;but not gratis!&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I hope this does not sound too much like whining. It's not intended to be like that. In fact I appreciate that more and more companies that reap benefit and revenue from using open source technologies realize the subtle but essential economic mechanisms that guarantee continuation of their business model. I'd like to take this as a chance to thank my own customers: It has always been fun to spend time with you being incredibly creative and productive to our mutual benefit!&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SoUNqKqPcaI/AAAAAAAAAPI/8UmRk33rxWY/s1600-h/pond.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-6498310235650843579?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/6498310235650843579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/08/eclipse-foundation-funds-my-project.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/6498310235650843579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/6498310235650843579'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/08/eclipse-foundation-funds-my-project.html' title='Eclipse Foundation funds my Project'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_6Y29iRV9ZvA/SoUPRfb5D1I/AAAAAAAAAPY/ocxEPkua9I0/s72-c/SonyCenter.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-5054542966129451292</id><published>2009-08-13T08:31:00.008+02:00</published><updated>2009-08-13T09:15:00.362+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='emf tips generate model'/><title type='text'>EMF Tips #1: How the hell do I generate my 28 models?</title><content type='html'>Recently &lt;a href="http://ed-merks.blogspot.com/"&gt;Ed&lt;/a&gt; pointed me to a "hidden" feature in EMF which I always thought I was missing. I take this as an opportunity to launch a series of EMF blogs with hints around EMF, starting with:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;How the hell do I generate my 28 models?&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In &lt;a href="http://wiki.eclipse.org/CDO"&gt;CDO&lt;/a&gt; and &lt;a href="http://wiki.eclipse.org/Net4j"&gt;Net4j&lt;/a&gt; together we have 28 models, many of them being test or example models. It has always been a hazzle to regenerate them for new versions of EMF having been published. The best approach I was aware of is a manual loop like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SoO7PXBtnrI/AAAAAAAAAPA/c81x_OpL7qc/s1600-h/NewGem0.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 228px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SoO7PXBtnrI/AAAAAAAAAPA/c81x_OpL7qc/s320/NewGem0.png" alt="" id="BLOGGER_PHOTO_ID_5369341053309394610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I always wished there was a view with all genmodels so that I could select multiple genmodels and regenerate them with a single click. I had such a view in &lt;a href="http://genfw.berlios.de/screenshots/index.html"&gt;GenFw&lt;/a&gt; and even an incremental genmodel generator.&lt;br /&gt;&lt;br /&gt;I bet you didn't know the default key binding Shift+Alt+G (M2+M3+G)? I didn't! Go figure:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SoO3DXQ2kFI/AAAAAAAAAOw/fBJsvB8qdRE/s1600-h/NewGem.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 235px; height: 320px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SoO3DXQ2kFI/AAAAAAAAAOw/fBJsvB8qdRE/s320/NewGem.png" alt="" id="BLOGGER_PHOTO_ID_5369336449167954002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A dialog opens that lists all genmodels in the workspace. The next page lets you select the sub models to be regenerated:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SoO3DyAxKFI/AAAAAAAAAO4/BA1PNb5ufTE/s1600-h/NewGem2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 307px; height: 320px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SoO3DyAxKFI/AAAAAAAAAO4/BA1PNb5ufTE/s320/NewGem2.png" alt="" id="BLOGGER_PHOTO_ID_5369336456348248146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Before you switch to the second page be sure that all the genmodels selectedin page one can be opened with the genmodel editor without errors. Otherwise the wizard could indefinitely block the UI. Apart from this little lesson it works great and will spare me a lot of dumb effort in the future. Kudos to &lt;a href="http://lmap.blogspot.com/"&gt;Marcelo&lt;/a&gt; for this neat (but somehow hidden) feature!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-5054542966129451292?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/5054542966129451292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/08/emf-tips-1-how-hell-do-i-generate-my-28.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/5054542966129451292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/5054542966129451292'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/08/emf-tips-1-how-hell-do-i-generate-my-28.html' title='EMF Tips #1: How the hell do I generate my 28 models?'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6Y29iRV9ZvA/SoO7PXBtnrI/AAAAAAAAAPA/c81x_OpL7qc/s72-c/NewGem0.png' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-8080765462542766676</id><published>2009-08-12T05:16:00.005+02:00</published><updated>2009-08-12T08:07:38.929+02:00</updated><title type='text'>Eclipse Modeling Stammtisch</title><content type='html'>On Wednesday August 19th &lt;a href="http://ed-merks.blogspot.com/"&gt;Ed&lt;/a&gt; and &lt;a href="http://ralph-at-eclipse.blog.de/"&gt;Ralph&lt;/a&gt; will be in &lt;a href="http://maps.google.de/maps?f=q&amp;amp;source=s_q&amp;amp;hl=de&amp;amp;geocode=&amp;amp;q=Berlin&amp;amp;sll=51.151786,10.415039&amp;amp;sspn=24.702247,67.631836&amp;amp;ie=UTF8&amp;amp;ll=52.536273,13.40332&amp;amp;spn=23.975826,67.631836&amp;amp;t=p&amp;amp;z=5&amp;amp;iwloc=A"&gt;Berlin&lt;/a&gt; and we thought it'd be cool to have an Eclipse Modeling Stammtisch together with you. Here's the invitation:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SoJN3trOd5I/AAAAAAAAAOo/EY6rBmakTa0/s1600-h/stammtisch.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 308px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SoJN3trOd5I/AAAAAAAAAOo/EY6rBmakTa0/s400/stammtisch.png" alt="" id="BLOGGER_PHOTO_ID_5368939325328095122" border="0" /&gt;&lt;/a&gt;If you are a modeling newbie and don't understand this &lt;a href="http://en.wikipedia.org/wiki/Domain-specific_language"&gt;abstract syntax&lt;/a&gt; just drop me a note so that I can come up with an invitation in a &lt;a href="http://en.wikipedia.org/wiki/Java_%28programming_language%29"&gt;general purpose language&lt;/a&gt;. Of course I'd use &lt;a href="http://www.eclipse.org/articles/Article-JET/jet_tutorial1.html"&gt;JET&lt;/a&gt; for this purpose :P&lt;br /&gt;&lt;br /&gt;Don't forget to add yourself to our &lt;a href="http://www.doodle.com/qwpp6p8wtcq78t2i"&gt;poll&lt;/a&gt; in order to help us finding an appropriate location!&lt;br /&gt;&lt;br /&gt;Hoping to see you in a week...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-8080765462542766676?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/8080765462542766676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/08/eclipse-modeling-stammtisch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/8080765462542766676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/8080765462542766676'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/08/eclipse-modeling-stammtisch.html' title='Eclipse Modeling Stammtisch'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6Y29iRV9ZvA/SoJN3trOd5I/AAAAAAAAAOo/EY6rBmakTa0/s72-c/stammtisch.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-2600016304595091335</id><published>2009-07-15T10:57:00.001+02:00</published><updated>2009-07-16T06:38:13.023+02:00</updated><title type='text'>Eclipse Code Camp – Modeling</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://entwickler-akademie.de/ak/show.php3?id=44&amp;ccid=9"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/Sl2ZoySVvvI/AAAAAAAAAOg/tF-IQx1Fcy4/s200/ECLIPSE_Code_Camp_Modeling.jpg" alt="" id="BLOGGER_PHOTO_ID_5358608057613270770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;You are interested to learn about Eclipse Modeling? You would like to optimize your EMF usage or learn about amazing add-on technologies like CDO or EMF data binding?&lt;br /&gt;&lt;br /&gt;Then come to Munich in October and have a thrilling time with Ed and me! We're looking forward to meet you at the&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center; font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;&lt;a href="http://entwickler-akademie.de/ak/show.php3?id=44&amp;amp;ccid=9"&gt;Eclipse Code Camp - Modeling&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-2600016304595091335?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/2600016304595091335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/07/eclipse-code-camp-modeling.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/2600016304595091335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/2600016304595091335'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/07/eclipse-code-camp-modeling.html' title='Eclipse Code Camp – Modeling'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Sl2ZoySVvvI/AAAAAAAAAOg/tF-IQx1Fcy4/s72-c/ECLIPSE_Code_Camp_Modeling.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-3998782762963969686</id><published>2009-06-10T16:02:00.004+02:00</published><updated>2009-06-10T16:17:02.631+02:00</updated><title type='text'>Meet the Eclipse Directors in Berlin</title><content type='html'>I was asked to arrange for a community "Stammtisch" while the Eclipse board of directors is meeting in Berlin next week. It is the first time that the Eclipse board has ever met outside of the USA.&lt;br /&gt;&lt;br /&gt;Everybody is invited to join us:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;Date&lt;/span&gt;: Tuesday, 2009-06-16&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Time&lt;/span&gt;: 7:00 p.m.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Restaurant&lt;/span&gt;:  &lt;a href="http://doodle.com/r?url=http%3A%2F%2Fwww.bavarium-berlin.de%2F"&gt;Bavarium&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Location&lt;/span&gt;: &lt;a href="http://maps.google.de/maps?source=ig&amp;amp;hl=de&amp;amp;rlz=1G1GGLQ_DEDE270&amp;amp;lr=&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;q=Europa+Center+1,+Berlin&amp;amp;fb=1&amp;amp;split=1&amp;amp;gl=de&amp;amp;cid=0,0,10315402550055331302&amp;amp;ei=OL4vSvexMs6osgb9uby6CQ&amp;amp;sa=X&amp;amp;oi=local_result&amp;amp;ct=image&amp;amp;resnum=1"&gt;Europa Center&lt;/a&gt;, Berlin&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Registration&lt;/span&gt;: &lt;a href="http://www3.doodle.com/xsfdcb8rugnzpe4d"&gt;Doodle poll&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The Eclipse Foundation will pay for the drinks and the room has capacity for 50 persons. There are no technical sessions planned!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-3998782762963969686?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/3998782762963969686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/06/meet-eclipse-directors-in-berlin.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/3998782762963969686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/3998782762963969686'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/06/meet-eclipse-directors-in-berlin.html' title='Meet the Eclipse Directors in Berlin'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-520773278317021264</id><published>2009-06-04T09:55:00.012+02:00</published><updated>2009-06-04T11:01:44.903+02:00</updated><title type='text'>When the Whole is Less than the Sum of its Parts</title><content type='html'>I did not know that this scenario is called &lt;a href="http://en.wikipedia.org/wiki/Reductionism"&gt;Reductionism&lt;/a&gt; in ancient literature! I only stumbled on it now when I tried to track down why my daily backups started failing recently. Hold your breath:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SieGSjqgGzI/AAAAAAAAAN4/a6P64GUDyi4/s1600-h/P6040165.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 150px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SieGSjqgGzI/AAAAAAAAAN4/a6P64GUDyi4/s200/P6040165.JPG" alt="" id="BLOGGER_PHOTO_ID_5343387136267655986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The other week I installed a new &lt;a href="http://antivirus.comodo.com/"&gt;anti virus&lt;/a&gt; tool because it better integrates with my &lt;a href="http://personalfirewall.comodo.com/"&gt;software firewall&lt;/a&gt; and the rest of that security suite. In fact it found some new potential infections but I did not care too much because detection is heuristics-based. To be safe I kept all those files in the quarantine folder. I even activated the auto-quarantine feature. Anti virus now looked like a good part of my system.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SieGS9CRzUI/AAAAAAAAAOA/ZnwN9dr1ZO4/s1600-h/P6040168.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 150px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SieGS9CRzUI/AAAAAAAAAOA/ZnwN9dr1ZO4/s200/P6040168.JPG" alt="" id="BLOGGER_PHOTO_ID_5343387143078268226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now my daily backups: For a long time they also were a good part of my system but since last week they did not complete successfully anymore. The same meaningless error message every time. Not cool!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SieGTI6xmDI/AAAAAAAAAOI/i4Vjzdw_Ofs/s1600-h/P6040169.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SieGTI6xmDI/AAAAAAAAAOI/i4Vjzdw_Ofs/s200/P6040169.JPG" alt="" id="BLOGGER_PHOTO_ID_5343387146268022834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I found out the reason (well, Google helped a lot): The backup by default copies all changed files to a temporary folder. Including my quarantine folder! The new anti virus tool eagerly detects a new infection and moves the file back to the normal qurantine folder, while the backup process is trying to work with it. Bang!&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.computerhistory.org/VisibleStorage/images/102636967_lg.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 344px; height: 500px;" src="http://www.computerhistory.org/VisibleStorage/images/102636967_lg.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:78%;"&gt;I saw this thing in the computer history museum in Palo Alto ;-)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Amazing how complex and interrelated the problems of modern computer systems can be. My mother used to be kind of a luddite but nowadays she claims to have fun with the computer and the net. I wonder how she would cope with such stuff?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SieHnsOXweI/AAAAAAAAAOQ/mtj1OoXdeeI/s1600-h/P5220154.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SieHnsOXweI/AAAAAAAAAOQ/mtj1OoXdeeI/s320/P5220154.JPG" alt="" id="BLOGGER_PHOTO_ID_5343388598854468066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;All this reminds me to the recent discussions about technological complexity and simplicity of the real world:&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;h3 class="post-title entry-title"&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://michaelscharf.blogspot.com/2009/04/how-to-explain-emf.html"&gt;How to explain EMF?&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 class="post-title entry-title"&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://michaelscharf.blogspot.com/2009/05/why-is-rcp-emf-p2-databinding-so-hard.html"&gt;Why is RCP, EMF, p2, databinding... so hard to learn?&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 class="post-title entry-title"&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://ed-merks.blogspot.com/2009/04/if-only-it-were-that-simple.html"&gt;If Only it Were That Simple&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-520773278317021264?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/520773278317021264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/06/when-whole-is-less-than-sum-of-its.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/520773278317021264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/520773278317021264'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/06/when-whole-is-less-than-sum-of-its.html' title='When the Whole is Less than the Sum of its Parts'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6Y29iRV9ZvA/SieGSjqgGzI/AAAAAAAAAN4/a6P64GUDyi4/s72-c/P6040165.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-872716960947952918</id><published>2009-05-29T06:45:00.004+02:00</published><updated>2009-05-29T07:58:05.181+02:00</updated><title type='text'>Target Platform Provisioning</title><content type='html'>For CDO and Net4j we used to have a special &lt;a href="http://wiki.eclipse.org/CDO_Source_Installation"&gt;Ant script&lt;/a&gt; that downloads a well-defined set of dependencies and installs them into a target platform that is contained by the metadata section of the wokspace. The same script also cares to setup a well-defined API baseline. While this was handy in the absence of other mechanisms it always suffered from some issues:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Maintenance burden to keep the &lt;a href="http://wiki.eclipse.org/images/c/c6/Bootstrap3.png"&gt;versions&lt;/a&gt; up to date. Since the automated build is designed differently this was redundant and prone of errors.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;3rd party bundles were taken from SpringSource which is not a p2 repository. The SpringSource bundles make heavy use of the "uses" manifest header attribute, often resulting in broken configurations.&lt;/li&gt;&lt;/ul&gt;Some time after reading &lt;a href="http://eclipsesource.com/blogs/2009/04/29/target-platform-provisioning/"&gt;Chris's blog&lt;/a&gt; about the new target platform provisioning I started to play with it and it really was easy. I came up with a simple &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.emf/org.eclipse.emf.cdo/develop/setup/cdo.target?root=Modeling_Project&amp;amp;view=co"&gt;target definition&lt;/a&gt; for CDO:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/Sh90a3ozY9I/AAAAAAAAANw/7xCF0yip6Ko/s1600-h/TargetDefinition.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 307px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/Sh90a3ozY9I/AAAAAAAAANw/7xCF0yip6Ko/s320/TargetDefinition.png" alt="" id="BLOGGER_PHOTO_ID_5341115688045208530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Initially I started with a "Directory" provisioner for the SpringSource bundles but then I decided to create an own p2 repository at SourceForge.net: &lt;a href="http://net4j.sourceforge.net/update"&gt;Net4j and CDO Plus Updates&lt;/a&gt;. This can now be used to provision your IDE as well as parts of the CDO target platform. Pressing "Set as Target Platform" did its job without problems: In the end all bundles compiled without errors.&lt;br /&gt;&lt;br /&gt;So, in the future I'd really like to use this great mechanism for provisioning my target platform but unfortunately there's a show stopper: The target definition carries &lt;span style="font-weight: bold;"&gt;explicit versions&lt;/span&gt; for all the configured features and there's currently no way to update them automatically. I'd really wish it was as easy as my IDE updates are nowadays but it turns out that, once the repositories offer newer versions, not only these are not picked up but the target definition editor even refuses to list the old features. I had to start from scratch and this is certainly no better than what we had before.&lt;br /&gt;&lt;br /&gt;There's a &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=274212"&gt;bugzilla&lt;/a&gt; to track the addition of an update button in the target provisioner. I guess that would finally give me what I need to make use of the whole new target platform provisioning. Anyway, this is great stuff and I appreciate very much all the effort that has been spent so far. Thank you guys!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-872716960947952918?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/872716960947952918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/05/target-platform-provisioning.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/872716960947952918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/872716960947952918'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/05/target-platform-provisioning.html' title='Target Platform Provisioning'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Sh90a3ozY9I/AAAAAAAAANw/7xCF0yip6Ko/s72-c/TargetDefinition.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-213686195755117100</id><published>2009-04-28T10:37:00.006+02:00</published><updated>2009-04-28T10:51:46.173+02:00</updated><title type='text'>New Project Artwork</title><content type='html'>Yesterday I sat down, installed &lt;a href="http://www.inkscape.org/"&gt;InkScape&lt;/a&gt; and worked on the new project logos for CDO and Net4j. Darn it: designing software and designing logos are two different things! Personally I liked this one:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SfbCHj8_dqI/AAAAAAAAANo/vP791MgA0C4/s1600-h/CDO-Logo-01.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 194px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SfbCHj8_dqI/AAAAAAAAANo/vP791MgA0C4/s400/CDO-Logo-01.png" alt="" id="BLOGGER_PHOTO_ID_5329660644205491874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;But all my friends complained: "Too childish!!!"&lt;br /&gt;I sat down again and tried something more honest.&lt;br /&gt;Here is the new CDO project logo:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SfbB-YfYhjI/AAAAAAAAANY/o5ZVORjDUuI/s1600-h/Logo-CDO.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SfbB-YfYhjI/AAAAAAAAANY/o5ZVORjDUuI/s320/Logo-CDO.png" alt="" id="BLOGGER_PHOTO_ID_5329660486509692466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And here is the new Net4j project logo:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SfbB-fSJDLI/AAAAAAAAANg/kciZovZgcoE/s1600-h/Logo-Net4j.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 153px;" src="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SfbB-fSJDLI/AAAAAAAAANg/kciZovZgcoE/s320/Logo-Net4j.png" alt="" id="BLOGGER_PHOTO_ID_5329660488333200562" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-213686195755117100?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/213686195755117100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/04/new-project-artwork.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/213686195755117100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/213686195755117100'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/04/new-project-artwork.html' title='New Project Artwork'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_6Y29iRV9ZvA/SfbCHj8_dqI/AAAAAAAAANo/vP791MgA0C4/s72-c/CDO-Logo-01.png' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-2850874478638458411</id><published>2009-04-26T19:26:00.013+02:00</published><updated>2009-04-26T20:32:50.704+02:00</updated><title type='text'>Modeling goes Enterprise</title><content type='html'>I just finished the second part of my article "Modeling goes Enterprise - About EMF and CDO". It will be published in the &lt;a href="http://www.eclipse-magazin.de/"&gt;Eclipse Magazin&lt;/a&gt; next month. Thanks to Sebastian Meyen and Hartmut Schlosser I'm allowed to make the example application, discussed in the article, available in the Eclipse CVS!&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SfSa-53CgYI/AAAAAAAAAMg/mk2IuLYuIRM/s1600-h/splash.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 395px; height: 300px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SfSa-53CgYI/AAAAAAAAAMg/mk2IuLYuIRM/s400/splash.bmp" alt="" id="BLOGGER_PHOTO_ID_5329054664560378242" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;The splash picture was taken in my kitchen&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The example is a set of applications (IDE, headless, 3x RCP, Servlet) used to support the business of the electronic restaurant "eDine", where they have touch computers at all the tables and at the bar and in the kitchen. Special RCP applications operate on a distributed shared EMF model which is provided by a headless CDO repository server.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Running the Example&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;1) Install the example &lt;ul&gt;&lt;li&gt;Checkout the "org.gastro.*" plugins via &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.emf/org.eclipse.emf.cdo/develop/setup/psf/pserver/cdo-gastro-example.psf?root=Modeling_Project&amp;amp;view=log"&gt;Team Project Set&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;2) Start the server process&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Start the "GastroServer" launch config. It creates a Derby database at "/gastro".&lt;/li&gt;&lt;li&gt;Watch the console output. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;3) Populate the repository&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Start the "GastroTestClient1" launch config. It opens a runtime IDE with generic CDO support.&lt;/li&gt;&lt;li&gt;Open the "CDO Sessions" view.&lt;/li&gt;&lt;li&gt;Add a new session (green plus button). Enter "tcp://localhost" and "gastro".&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SfSd0_tS0UI/AAAAAAAAAMo/t2k8ZEkmZYs/s1600-h/_old_stepper_cdo_model_repository_II__4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 339px; height: 263px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SfSd0_tS0UI/AAAAAAAAAMo/t2k8ZEkmZYs/s400/_old_stepper_cdo_model_repository_II__4.png" alt="" id="BLOGGER_PHOTO_ID_5329057792866308418" border="0" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;Open a new transaction (right-click on the session).&lt;/li&gt;&lt;li&gt;Import the /org.gastro.testclient/inventory.xml resource into "/eDine/inventory".&lt;/li&gt;&lt;li&gt;Commit the transaction (right-click on the transaction or just save the editor).&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SfSeYne_viI/AAAAAAAAAMw/ajpbws9QxoM/s1600-h/_old_stepper_cdo_model_repository_II__5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 236px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SfSeYne_viI/AAAAAAAAAMw/ajpbws9QxoM/s400/_old_stepper_cdo_model_repository_II__5.png" alt="" id="BLOGGER_PHOTO_ID_5329058404839177762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4) Start the RCP application for table 1 (and optionally for table 2)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Start the "GastroTable1" launch config. It opens an RCP application.&lt;/li&gt;&lt;li&gt;Browse through the menu card and select some offerings here and there.&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SfSevrJrUPI/AAAAAAAAAM4/tIdIA-WQo2M/s1600-h/_old_stepper_cdo_model_repository_II__6.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 329px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SfSevrJrUPI/AAAAAAAAAM4/tIdIA-WQo2M/s400/_old_stepper_cdo_model_repository_II__6.png" alt="" id="BLOGGER_PHOTO_ID_5329058800960491762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5) Start the RCP application for the bar&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Start the "GastroDepartment1" launch config. It opens an RCP application for the barkeeper.&lt;/li&gt;&lt;li&gt;Watch orders coming in.&lt;/li&gt;&lt;li&gt;Eventually click on order details to mark them SERVED and watch the order disappearing when completed.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;6) Start the RCP application for the kitchen&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Start the "GastroDepartment2" launch config. It opens an RCP application for the cook.&lt;/li&gt;&lt;li&gt;Eventually click on order details to mark them SERVED and watch the order disappearing when completed.&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SfSewAlOVNI/AAAAAAAAANI/NYGDWQuZ1Xk/s1600-h/_old_stepper_cdo_model_repository_II__8.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 171px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SfSewAlOVNI/AAAAAAAAANI/NYGDWQuZ1Xk/s400/_old_stepper_cdo_model_repository_II__8.png" alt="" id="BLOGGER_PHOTO_ID_5329058806713177298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;7) Send an order (if the RCP applications are all started, see steps 4-6)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;In the table application open the second shelf pane and send the order.&lt;/li&gt;&lt;li&gt;Watch how the relevant order details "arrive" in the bar and kitchen applications...&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SfSewM_rlpI/AAAAAAAAANA/phkn7A_vyQk/s1600-h/_old_stepper_cdo_model_repository_II__7.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 286px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SfSewM_rlpI/AAAAAAAAANA/phkn7A_vyQk/s400/_old_stepper_cdo_model_repository_II__7.png" alt="" id="BLOGGER_PHOTO_ID_5329058810045372050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;8) Browse the menu card via Web&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Start a web browser and point it to "http://localhost:9090/gastro"&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SfSf70YdmCI/AAAAAAAAANQ/dcZXMVvoygY/s1600-h/_old_stepper_cdo_model_repository_II__9.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 263px;" src="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SfSf70YdmCI/AAAAAAAAANQ/dcZXMVvoygY/s400/_old_stepper_cdo_model_repository_II__9.png" alt="" id="BLOGGER_PHOTO_ID_5329060109108484130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;Enjoy your meal! ;-)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-2850874478638458411?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/2850874478638458411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/04/modeling-goes-enterprise.html#comment-form' title='31 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/2850874478638458411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/2850874478638458411'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/04/modeling-goes-enterprise.html' title='Modeling goes Enterprise'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6Y29iRV9ZvA/SfSa-53CgYI/AAAAAAAAAMg/mk2IuLYuIRM/s72-c/splash.bmp' height='72' width='72'/><thr:total>31</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-1786925462322043314</id><published>2009-04-16T10:05:00.004+02:00</published><updated>2009-04-16T10:09:12.386+02:00</updated><title type='text'>Brandenburger Tor at JAX 2009</title><content type='html'>I'm just preparing the slides for my &lt;a href="http://it-republik.de/konferenzen/ext_scripts/v2/php/sessions-popup.php?module=jax&amp;amp;id=10248"&gt;talk&lt;/a&gt; at the &lt;a href="http://it-republik.de/jaxenter/jax"&gt;JAX 2009&lt;/a&gt; conference next week in Mainz, Germany:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Scale, Share and Store your Models with CDO 2.0&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Wednesday, Apr. 22th, 2009&lt;br /&gt;08:45 - 09:45&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.eclipse.org/cdo/documentation/presentations/JAX_2009/BrandenburgerTor.gif" border="0" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-1786925462322043314?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/1786925462322043314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/04/brandenburger-tor-at-jax-2009_16.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/1786925462322043314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/1786925462322043314'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/04/brandenburger-tor-at-jax-2009_16.html' title='Brandenburger Tor at JAX 2009'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-3573667001428665737</id><published>2009-03-23T22:21:00.009+01:00</published><updated>2009-03-23T23:04:09.430+01:00</updated><title type='text'>LongTalk[ ] cdo;</title><content type='html'>Only by accident I realized that my EclipseCon talk about the CDO Model Repository is allocated in two different rooms at the same time! I'm not yet sure how to manage this new challenge. The conference web schedule lists the CDO talk on Tuesday 11:10 am in room 206 and the printed programme allocates it in room 207. Fortunately both rooms are located side by side...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/ScgGnKRa76I/AAAAAAAAAMQ/W4utvqcIj_E/s1600-h/cdo-slides.ec09.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 280px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/ScgGnKRa76I/AAAAAAAAAMQ/W4utvqcIj_E/s400/cdo-slides.ec09.png" alt="" id="BLOGGER_PHOTO_ID_5316506629952958370" border="0" /&gt;&lt;/a&gt;Those of you who attended my talks previously might notice that I recreated all the slides from scratch. I'm pretty confident that we'll manage to go on an interesting and diverting trip touching all the concepts and features that make CDO a great runtime platform for scalable and distributed models.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/ScgEEqLpGLI/AAAAAAAAAMI/anyeBcJqSzU/s1600-h/cdo-concerns.ec09.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 259px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/ScgEEqLpGLI/AAAAAAAAAMI/anyeBcJqSzU/s320/cdo-concerns.ec09.png" alt="" id="BLOGGER_PHOTO_ID_5316503838199978162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;With CDO models go enterprise!&lt;/span&gt;&lt;br /&gt;You can go there, too...&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-3573667001428665737?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/3573667001428665737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/03/longtalk-cdo.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/3573667001428665737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/3573667001428665737'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/03/longtalk-cdo.html' title='LongTalk[ ] cdo;'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6Y29iRV9ZvA/ScgGnKRa76I/AAAAAAAAAMQ/W4utvqcIj_E/s72-c/cdo-slides.ec09.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-4842265243996892321</id><published>2009-03-11T09:28:00.009+01:00</published><updated>2009-03-11T10:35:59.014+01:00</updated><title type='text'>EMF on Server</title><content type='html'>I've been quiet for a while, mostly because of the mega refactoring that CDO is currently undergoing. Did you know that until now a CDO server did not have any dependencies on EMF? The following diagram summarizes what had been the status quo in this context for over two years:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/Sbd6AUzmmBI/AAAAAAAAALw/7yGBN0-ZfuI/s1600-h/emf-on-server-old.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 230px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/Sbd6AUzmmBI/AAAAAAAAALw/7yGBN0-ZfuI/s400/emf-on-server-old.png" alt="" id="BLOGGER_PHOTO_ID_5311848431510525970" border="0" /&gt;&lt;/a&gt;As you can see, all EMF concepts had been converted to CDO concepts directly under the visible surface. It turned out that this approach had several drawbacks:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No generated EOperation logic on the server&lt;/li&gt;&lt;li&gt;No generated EDataType serialization&lt;/li&gt;&lt;li&gt;No EMF tools on the server (Compare, OCL, ...)&lt;/li&gt;&lt;li&gt;Backend integrators can not use EObject&lt;/li&gt;&lt;li&gt;Server extenders can not use EModelElement&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;So we decided to eliminate these restrictions by applying a two-step refactoring. The first step was to abandon CDOPackage completely and replace it with EPackage everywhere. This included replacements of CDOClass, CDOAttrbute and CDOReference as well. And CDOPackageManager was replaced by a new, very sophisticated version of CDOPackageRegistry. After one month of refactoring and testing the new status quo looks as follows:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/Sbd6AaUdV7I/AAAAAAAAALo/YHEsFTE0Ytk/s1600-h/emf-on-server-new.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 232px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/Sbd6AaUdV7I/AAAAAAAAALo/YHEsFTE0Ytk/s400/emf-on-server-new.png" alt="" id="BLOGGER_PHOTO_ID_5311848432990508978" border="0" /&gt;&lt;/a&gt;In fact this was the biggest and most impacting refactoring since the complete re-write of version 0.7. Here are some numbers:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;69378 changed lines of code&lt;br /&gt;&lt;/li&gt;&lt;li&gt;1736 changed files&lt;/li&gt;&lt;li&gt;2.8 MB patch file size&lt;/li&gt;&lt;li&gt;13% performance increase&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The deployment of the new design will require re-creation of the backends, i.e. export data, re-create database, import data! Most clients will not be affected if they are properly coded against EMF APIs. The HibernateStore will be excluded from the builds for some time and then re-appear as a separate download to compensate p2 issues with missing, non-EPL dependencies.&lt;br /&gt;&lt;br /&gt;Kudos go to Simon, who took over when I fell asleep, to Vik, who adjusted the UI and to Martin, who will adjust the HibernateStore. And apologies for the maintenance congestion that was caused by a locked HEAD.&lt;br /&gt;&lt;br /&gt;After the merge to HEAD we'll be able to face the second step of the refactoring and make CDO-controlled EObjects available on the server:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/Sbd6AhSuKbI/AAAAAAAAAL4/7MHGvNVH7VQ/s1600-h/emf-on-server-soon.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 296px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/Sbd6AhSuKbI/AAAAAAAAAL4/7MHGvNVH7VQ/s400/emf-on-server-soon.png" alt="" id="BLOGGER_PHOTO_ID_5311848434862270898" border="0" /&gt;&lt;/a&gt;This will open the door to some exciting new functionality on the server like:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Commit validation based on OCL&lt;/li&gt;&lt;li&gt;Common query based on OCL&lt;/li&gt;&lt;li&gt;Annotation-driven model mappings&lt;/li&gt;&lt;li&gt;Easier embedding into clients&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Don't forget to block an hour for my &lt;a href="https://www.eclipsecon.org/submissions/2009/view_talk.php?id=396"&gt;CDO talk&lt;/a&gt; at the EclipseCon!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-4842265243996892321?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/4842265243996892321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/03/emf-on-server.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/4842265243996892321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/4842265243996892321'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/03/emf-on-server.html' title='EMF on Server'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6Y29iRV9ZvA/Sbd6AUzmmBI/AAAAAAAAALw/7yGBN0-ZfuI/s72-c/emf-on-server-old.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-2534554623236120079</id><published>2009-01-30T15:33:00.002+01:00</published><updated>2011-07-13T07:00:31.965+02:00</updated><title type='text'>Can the fish in Ed´s aquarium bark?</title><content type='html'>Wow, our &lt;a href="http://thegordian.blogspot.com/2009/01/hightech-webinar.html"&gt;Hightech Webinar&lt;/a&gt; yesterday was a great success, given these numbers:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Attendance&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;110 registered – 25th highest out of 48 webinars&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;95 attended live – 16th highest out of 48 webinars&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;86.4% of registered attended live – 3rd highest out of 48 webinars&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;And a lot of fun, too, given these numbers:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Did you find this webinar useful?&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;91% (39) – Yes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2% (1) – Yes, but it was too technical&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;7% (3) – Yes, but it was not technical enough&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0% (0) – No&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I'd like to thank all of you for your interest that you showed by asking lots of questions. In fact so many that I could only answer very few of them during the webinar. For this reason I went through the chat transcript and compiled a reasonable question &amp;amp; answer list. Here we go:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-WzNclL3zB1w/Th0mUtBpH3I/AAAAAAAAAWw/KPcNandiTVM/s1600/OrangeAndWhiteCichlids.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 186px;" src="http://3.bp.blogspot.com/-WzNclL3zB1w/Th0mUtBpH3I/AAAAAAAAAWw/KPcNandiTVM/s400/OrangeAndWhiteCichlids.jpg" alt="" id="BLOGGER_PHOTO_ID_5628697246408712050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Can the fish in Ed´s aquarium bark?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;No, that was &lt;a href="http://4.bp.blogspot.com/_H4Kr0LHNMcQ/R2usd9VLG5I/AAAAAAAAAU4/PQJkXFVHHlQ/s1600-h/AmberPerplexed.JPG"&gt;Amber&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;I played around with EMF binary serialization, it really is compact &amp;amp; fast. So is this just BinaryResourceFactoryImpl then? Is the binary form platform independent?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, BinaryResourceFactoryImpl. It words for Java on any platform.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Can we change the underlying data base to use something like Objectivity instead of relational DB?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, Simon McDuff (CDO team member) is working on exactly that. Basically we are waiting for some IP clearance stuff to make it (the CDO storage adapter) open source. That's the beauty that the persistence vehicle is complete orthogonal. So you can put any type of backend behind it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;How is CDO doing the object-relational mapping? Is there JPA or JDO underneath or homebrewn?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The backend integration is completely decoupled from the repository framework. The default integration is our proprietary DBStore. Together with Martin Taal from the Teneo project we developed a Teneo/Hibernate integration. I heard that Teneo supports JPA, so yes, a CDO repository can work with JPA. For object-oriented backends you need no mapping at all. See the preceding question about Objectivity. And by implementing a handful of interfaces you can plug in your own backend integration.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;So the CDO-Teneo integration is not available yet ''off the shelf''?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It is! We are currently working together with a possible new committer to augment the CDO/Teneo/Hibernate integration team and ensure that this component complies to the same high qualitiy standards as the rest of the CDO framework. Currently the CDO HibernateStore is integral part of the CDO SDK but we are considering to factor it out into separate downloads due to legal issues with the Hibernate dependencies.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Any advice for a mature open source ODB?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Due to lack of own experience, no. But we have &lt;a href="https://bugs.eclipse.org/252255"&gt;https://bugs.eclipse.org/252255&lt;/a&gt; to discuss this topic. Please note that we marked it P5 and HELPWANTED to indicate that we will not be able to address these kinds of integrations ourselves. A perfect opportunity to gain committer privileges !&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Can I have multiple communication plugins available, i.e. AMQP?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Eike is working to separate out Net4J to better support other communication mechanisms. It would be nice to closely work together with extenders of these new APIs to ensure that they meet concrete expectations. Apart from this effort it should also be possible to integrate new transport technologies via Net4j. Fo this purpose Net4j has a strong separation of the physical transport layer and the application protocl layer (here: CDO protocol).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Is it possible to tunnel through HTTP, so HTTP on port 80 can go through firewalls for communication?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, Net4j comes with an (experimental) HTTP transport layer implementation that supports asynchronous bidirectional communication through http connections.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Am I correct in understanding that a ViewSet is mainly useful when connecting to multiple different repositories?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, we introduced the explicit notion of a CDOViewSet when we supported external references in the framework, i.e. references from one repository to another repository or completely different resource types. Each EMF RescourceSet always has an associated CDOViewSet (when used with CDO) but in the standard case this ViewSet will contain only a single CDO view or transaction.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Does each change increment the version of an object?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;No. The version of an object is incremented at the end of a successful commit operation on a the underlying CDOTransaction or CDOXATransaction. In fact the version is part of the primary key of a CDORevision, so a new version is assigned with each new revision of an object.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;When does the view acquire the latest version of an object? The first time you access the object, or every time you access the object?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Basically the first time you access an object. Sometimes earlier (configurable pre-fetching) and sometimes later (after remote invalidation).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What happens in case of a conflict (two transactions changing the same object)?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The most important reaction is that the model repository reliantly rejects the second commit attempt. Depending on the local configuration (session.options.setPassiveUpdateEnabled) you might receive early notification about pending commit failure (conflict state of some objects). All this is about detecting conflicts. Quite new is a pluggable mechanism for custom conflict resolvers. As an example we offer a resolver that reduces the conflict granularity down from object to structural features of an object. See transaction.options.addConflictResolver.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Can I access the same repository through different sessions too?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, you can open arbitrary number of sessions to a single repository, even from a single client. But keep in mind that each session maintains a revision cache and should be considered somewhat expensive. Each session can have arbitrary numbers of views / transactions. The objects (empty data wrappers) provided by these views all share the revision instances of the session cache.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Did I understand Eike correctly that changing an object requires a Transaction, which is the only read-write view?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Is Audit a ''mode'' of a repository or a view on the repository?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Both. A CDOAudit is a special CDOView on the client side that enables to look at consistent historical states of the whole object graph. As such it is a client side concept. For this to be possible the repository must be configured to support it. As such it is a mode of the repository. Third, the chosen backend (plus integration) must support this repository configuration. As such it is a capability of the storage implementation.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;If I disable the audit mode, then no revision data is stored anymore, right?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, if auditing is disabled in the repository, then no historical revisions are stored. Only current revisions. Please note that each storage implementation can have different capabilities with respect to switching auditing on or off. New: the DBStore can switch it off now!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;So when audit is disabled in the server configuration and request an audit object, then what do I get? null or a view on the current revision (the only one available)?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If the repository is not configured to support auditing you will get an exception when you try to open an audit view on the client side. So you’ll never be able to hold references to old revisions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Can I have custom views on the client editor based on different packages (models) I have in the repo? I assume there is a generic editor to handle all the different models I can have in the repo. I need to have different views on the editor based on different models.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes and yes. CDO supports multiple packages and multiple resources both in the client and in the repository. You can mix them as you want to. And the generic CDOEditor supports all of this, too.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Do you have references of production apps based on CDO?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, we have. Although I am often surprised to learn that many companies use CDO for a long time before I even get aware of it through some newsgroup questions. I am planning to open a public poll to gather more feedback, stay tuned. We know of many applications in the modeling industry (tooling) as well as in space and aeronautics, automotive, defense, asset management, and so on. If you know of any applications please tell us about!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Why is the server config file not an EMF model?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The main reson is that formerly we had no other EMF requirement on the server side of CDO. This will change in the near future to better support custom EdataTypes and Eoperations in server-side queries. Together with our new Definition Framework (&lt;a href="https://bugs.eclipse.org/246623"&gt;https://bugs.eclipse.org/246623&lt;/a&gt;) this will make a perfect fit to configure a CDO server.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Any parallels/differences to MS Oslo Repository (i.e. in philosophy/objectives)?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ed Merks talked about Oslo in this &lt;a href="http://ed-merks.blogspot.com/2008/11/modeling-pilgrimage-to-france.html"&gt;blog&lt;/a&gt;. The idea of CDO is to support any repository, not just one specific one. I think that can make some aspects of Oslo much slicker.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Does the CDO user interface use standard properties viewer? So the Databinding frameworks can sit on top to create custom UIs and Views?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, CDO is pretty much invisible for the rest of the application. Standards should always be usable.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What is the state of CDO Browser project?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We've recently added Common Navigator and Team Provider support. There is also EFS integration on the way (contribution). It is the main focus of the UI sub component to deliver high-quality and re-usable user interface components that make perfect use of the scalable core components of CDO.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;In the demo, when you change something in one client, and it appears on the other client, what's the API like for handling that? Do you have to use listeners? Or does it just look like the model was changed by another thread?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Both, you receive EMF Notifications (depending on the local configuration with or without change deltas) and you also can listen to some special events sent by the server. See the &lt;a href="http://wiki.eclipse.org/FAQ_for_CDO_and_Net4j#How_can_I_react_to_remote_changes_to_my_objects.3F"&gt;FAQ&lt;/a&gt; for details.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Wow! Team Provider, cool! It would be kind of natural to have something like the compare view for conflicts. Can team integration be used to handle conflicts?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Team integration is very new and work in progress. But yes, it is our plan to make all the respective CDO core functionality available through the well-known Team support of the Eclipse DIE, including compare and merge. Consider also that while CVS has file level granularity, CDO can handle two clients updating different properties of an individual object. You can't get more fine grained than this...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;I saw that a CDOResource can have a „resource path“. Does that mean the "/folder/company" string is processed and treated as an IPath or something anagolous?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A special obejct hierarchy is defined for that, CDOResourceNode (abstract), CDOResourceFolder and CDOResource. They form kind of a virtual file system for resources within a model repository. They can be navigated and queried just like normal objects (in fact they are EObjects). Each such CDOResourceNode has a unique path, but it is always presented as a String. You can convert it easily to an IPath.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Does CDO provide a Validation mechanism?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;At the CDO client side you can apply any validation mechanism that you can get to work with regular EMF models. CDO does not offer own solutions in this area. On the server side you can hook your own vetoable ReadHandlers and WriteHandlers with a particular repository. In the future you will also be able to use EMF based technologies like EMF Query, Validation and OCL on the server side, together with your own validators written in Java.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Are there query facilities for querying the models in the repo?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We have a very flexible query framework that can support any type of query language and deliver query results synchronously as well as asynchronously from the server to the client. You can hook either backend-specific or backend-agnostic language handlers into a repository. We would appreciate the contribution of such query handlers. And we are working on the integration of a common query language (OCL).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Any thoughts on data migration? Data migration and data import from/to XMI?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Import and export to any other persistence style that is supported by EMF is also supported by CDO. We have examples for XML/XMI import and export. Automatic data migration, as needed after model evolution, is currently not supported, although we started discussion on this topic in &lt;a href="https://bugs.eclipse.org/256856"&gt;https://bugs.eclipse.org/256856&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;How about locking, one client can lock the object so that the other clients not allow to change till it's unlocked? Is there any tree-locking facilities in CDO and/or EMF?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes and no. We have explicit locking on object level. You can acquire read and qrite locks one one or several objects at once. The contained sub tree of objects is not included! Locks are automatically released when the view/transaction is closed, optionally at commit time. This locking support is part of the CDO core.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Would it be possible to run the CDO server code within an app server - would that make sense at all?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes and yes. Each single component of CDO can run in OSGi, standalone or in any imaginable container. Embedding the repository into an JEE server makes particular sense, when the CDO client is a web application in the same container. Then you can use Net4js JVM connector to bypass socket transport. In the near future we will come up with even more direct connection methods (i.e. without Net4j in between).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Though it's called connected data objects, it there some way of using CDO in a kind-of offline mode?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Currently not. When the connection is terminated or breaks down the CDO session is automatically closed, along with all open views and transactions. But due to the tremendous demnad for and usefulness of an offline mode we have made this feature our current top priority. The problem itself is two-fold. Since demand loading will not work when offline we need to checkout partial copies of the central object graph. The ability to cache revisions in the local file system will also provide for even better scalability because will use this ability to page out dirty parts of local transactions. For the switch back to online mode we need a sync/merge mechanism for objects. This has recently been added to support the pluggable conflict resolvers of transactions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Speaking of transformation, QVT/ATL over EMF/CDO should be possible, right? Would it perform well?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You should be able to use CDO backed models just like any other "normal" EMF model. CDO is effectively transparent so pretty much every normal EMF thing applies. Regarding performance, there is a lot that you can configure in CDO. See this &lt;a href="http://wiki.eclipse.org/Tweaking_CDO_Performance"&gt;wiki&lt;/a&gt; for details.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Which newsgroups to submit thoughts to?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Use the EMF newsgroup and prefix with [CDO]: See this &lt;a href="http://wiki.eclipse.org/CDO_Project_Resources#Support_and_Feedback"&gt;wiki&lt;/a&gt; for details.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;We need to save locks when user is offline, is that possible?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Currently, when a user is offline, the session is terminated (offline mode for a session is work in progress). Maintaining locks beyond the end of a session is currently not supported by CDO. Locks are automatically released when the view/transaction is closed, optionally at commit time.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Is there dynamic CDO?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes. You can register dynamic EPackages with a CDOSession and commit them to the repository. Note, that you can generally only register top-level packages with a CDO session. Nested packages are registered implicitely if they have a namespace URI.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Do I have to regenerate my models?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Currently yes, or you must use a dynamic form of your model. We are working together with EMF Core on a mechanism to support „legacy models“ (i.e. those that are generated, but not for CDO) in CDO. See &lt;a href="https://bugs.eclipse.org/247226"&gt;https://bugs.eclipse.org/247226&lt;/a&gt; for details. Please note that regeneration does not require the Ecore model to be changed! But the regeneration for CDO removes all member fields from the generated classes (reflective delegation) and your hand-written modifications that use these member fields (they should use their accessors!) would not compile anymore.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What about the new EMF index project and server side queries?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;EMF Index will work on the EMF side not directly on the servery/repository side. But we are working closely with them to ensure that CDO can nicely fit into an index provider framework.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Are the CDO webinar and the webinar slides available online?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, Lynn will make both available through &lt;a href="http://live.eclipse.org/node/635"&gt;Eclipse Live&lt;/a&gt;. And I’ll check the slides into the CVS and make them available through the CDO &lt;a href="http://wiki.eclipse.org/CDO"&gt;wiki&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Is there kind of transaction Rollback mechanism?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;CDOTransaction and CDOXATransaction have rollback() methods.We even have save points which you can roll back to. There's a save point snippet in the webinar slides.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;If it was just about storing EMF objects in an RDBMS, Teneo would be sufficient I'd think. So I was wondering what other requirements you could have for the whole "bus" thing?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For instance a distributed shared model or the client side scalability for really huge models. CDO provides a clever memory usage with garbage collector support and stuff like partial object loading, partial collection loading. In this sense CDO is like the virtual memory of EMF (Steve suggested: „Demand Paged Virtual Modelling!“).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-2534554623236120079?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/2534554623236120079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/01/can-fish-in-eds-aquarium-bark.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/2534554623236120079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/2534554623236120079'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/01/can-fish-in-eds-aquarium-bark.html' title='Can the fish in Ed´s aquarium bark?'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-WzNclL3zB1w/Th0mUtBpH3I/AAAAAAAAAWw/KPcNandiTVM/s72-c/OrangeAndWhiteCichlids.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-392234801627579005</id><published>2009-01-28T17:48:00.009+01:00</published><updated>2009-01-28T18:25:23.064+01:00</updated><title type='text'>Hightech Webinar!</title><content type='html'>Yeah, it's hightech what we're working on. And it's definitely hightech what we're working with for this purpose:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SYCNGsokW_I/AAAAAAAAAKg/lkdeD52jD74/s1600-h/Hightech.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 311px; height: 320px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SYCNGsokW_I/AAAAAAAAAKg/lkdeD52jD74/s320/Hightech.JPG" alt="" id="BLOGGER_PHOTO_ID_5296388307987749874" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;My new hightech landline headset&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;During the tests for our CDO Webinar on Thursday with Ed and Lynn it turned out that Skype produces awful feedbacks which requires me to use a landline phone with a headset. Darn, none of my phones has got a socket for a headset! But, as you can see, I'm used to solving problems.&lt;br /&gt;&lt;br /&gt;A day later, all of a sudden, my keyboard startet &lt;span style="font-style: italic;"&gt;talking &lt;/span&gt;to me! Just rubbish, like a baby: rdeeeeeeeeIIIIIIII. And didn't listen to my commands anymore. Gosh, darn it! What a luck that I found an old keyboard that I can use for the Webinar (I put the baby not too far, so that we can try a nicer conversation later). I'll better have some backup mouse devices at hand, too...&lt;br /&gt;&lt;br /&gt;Now everything should be prepared and I hope to see many of you tomorrow. You can win a copy of the second edition of the EMF book by attending:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;a href="http://live.eclipse.org/node/635"&gt;Scale, Share and Store your Models with CDO 2.0&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Don't forget to &lt;span style="font-weight: bold;"&gt;register&lt;/span&gt; for the Webinar!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-392234801627579005?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/392234801627579005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2009/01/hightech-webinar.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/392234801627579005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/392234801627579005'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2009/01/hightech-webinar.html' title='Hightech Webinar!'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6Y29iRV9ZvA/SYCNGsokW_I/AAAAAAAAAKg/lkdeD52jD74/s72-c/Hightech.JPG' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-8625893800256638334</id><published>2008-12-14T09:59:00.034+01:00</published><updated>2008-12-14T12:17:11.493+01:00</updated><title type='text'>What is a Workspace?</title><content type='html'>&lt;div style="text-align: center;"&gt;Stupid question!&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;It's a space to work in.&lt;br /&gt;Stupid question?&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SUTiKMhLiUI/AAAAAAAAAKI/ypuBeMN6ufE/s1600-h/hype.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SUTiKMhLiUI/AAAAAAAAAKI/ypuBeMN6ufE/s320/hype.png" alt="" id="BLOGGER_PHOTO_ID_5279593327972026690" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Stupidity, like beauty, is a not context-free&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;A friend of mine used to complain that we, the guys of the software industry, only have a maximum of four words available to give things a name. That can lead to horrible ambiguities. Acronyms do the rest (see &lt;a href="http://ca.youtube.com/watch?v=eb_R1-PqRrw"&gt;Uncorking CDOs&lt;/a&gt;). I agree that meaningful names tend to be longer, which is not always nice, either. Maybe someone can help me to find a shorter name for a strategy class I had to create yesterday:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;TakeRemoteChangesThenApplyLocalChanges&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;ObjectConflictResolver&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well, workspace, I'm wandering from the subject. Often it seems necessary to look at the roles and responsibilities of a technical concept to guess its exact purpose and derive adequat usage rules. So, to re-word my initial question:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;How am I supposed to use Eclipse workspaces?&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I fear there is no single truth, given the vast number of responsibilities of a workspace:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Manage my projects, associate them with revision control&lt;/li&gt;&lt;li&gt;Manage my JREs/JDKs to compile my Java projects against&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Manage my target platform to compile plug-in projects against&lt;/li&gt;&lt;li&gt;Manage my API baselines for plug-in development&lt;/li&gt;&lt;li&gt;Manage my working and display preferences&lt;/li&gt;&lt;/ol&gt;And certainly some more. Each of the above responsibilities has its own dependencies and implications. For example the target platform and the API baselines are dependent on the projects that currently exist in my workspace. While there can be multiple baselines defined in the global workspace preferences and assigned to particular projects, the target platform is a global setting for the whole workspace. It can not be defined on a per project base. Since the set of projects I'm actively working on varies over time, this requires frequent change of the target platform definition.&lt;br /&gt;&lt;br /&gt;The only constant I'm seeing is the set of my personal usage and display preferences. The way I populate my perspectives, the key bindings I'm used to and all the other things that proofed to be useful for me. Exporting and importing these preferences is also not ideal because it doesn't catch all settings (like stored passwords) and leads to redundancy problems.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SUTg6FuqDgI/AAAAAAAAAKA/nFHRzQlCNqY/s1600-h/colors.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 341px; height: 380px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SUTg6FuqDgI/AAAAAAAAAKA/nFHRzQlCNqY/s400/colors.png" alt="" id="BLOGGER_PHOTO_ID_5279591951759969794" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;My favorite decoration of changes&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now I get the feeling that the implications and inherent lifecycles of these responsibilities do not match particularly good together. In fact I'm living with this feeling from the beginning of my Eclipse experiences. The fact that my usage preferences are kind of a &lt;span style="font-style: italic;"&gt;singleton &lt;/span&gt;at any point in time I'm somewhat reluctant to the idea of maintaining a bunch of separate workspaces. Or am I missing a trick to operate multiple workspaces on an identical set of IDE preferences?&lt;br /&gt;&lt;br /&gt;I know that it's only a default behaviour of Eclipse to create and maintain my projects physically inside of my workspace. With some effort I can link in a set of projects that a physically stored in a folder outside of the workspace. The problem is that each set of open projects in the workspace requires a number of particular baselines defined and a number of partular plugin-ins to be present in the global target platform. Not to speak about the needed JREs and possibly other stuff that is required for the workspace projects.&lt;br /&gt;&lt;br /&gt;An additional, but related, problem is that the initial check-outs from a revision control system usually require me to know which of the remote folders correspond to proper Eclipse projects and belong to the overall set of projects required for a larger set of functionality (also often called a project!). I know the concept of Team Project Set files (PSF) but they do not address the issue of required preference settings and their management is somewhat redundant, given that I'm already managing the set of projects directly in the workspace. I regularly forget to add new projects to the PSF files, or remove the deleted ones.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SUTnbRXWi9I/AAAAAAAAAKQ/r9s1sMARsr8/s1600-h/the-right-way.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 231px; height: 320px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SUTnbRXWi9I/AAAAAAAAAKQ/r9s1sMARsr8/s320/the-right-way.jpg" alt="" id="BLOGGER_PHOTO_ID_5279599118888897490" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Sometimes the right steps are obvious&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;What I really would like to see is some convenient and consistent tooling that enables me to swap in and out these &lt;span style="font-weight: bold;"&gt;sets of related projects&lt;/span&gt;, together with all their prerequisites! I don't want to clutter my office with a completely new desk each time someone drops a task for me, buying and arranging new pen and ink each time...&lt;br /&gt;&lt;br /&gt;Given that Eclipse is on the market for many years now I find it hard to believe that there is no obvious solution to this all-day problem. Well, maybe it's just that I didn't find it.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Geeks, please tell me about your solutions!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;From time to time I had the feeling that &lt;a href="http://www.eclipse.org/buckminster/"&gt;Buckminster&lt;/a&gt; addresses some or all of these issues. Unfortunately I never managed to realize the &lt;span style="font-weight: bold;"&gt;exact &lt;/span&gt;responsibilities and implications of the concepts that Buckminster offers to &lt;span style="font-style: italic;"&gt;materialize &lt;/span&gt;workspaces. At least I found it hard to map these concepts to my scenarios. I suspect that each flexible solution in this area can not be darn simple and I promise to put another evaluation on my todo list.&lt;br /&gt;&lt;br /&gt;By the way, for my &lt;a href="http://wiki.eclipse.org/Net4j"&gt;Net4j&lt;/a&gt; and &lt;a href="http://wiki.eclipse.org/CDO"&gt;CDO&lt;/a&gt; open source projects at Eclipse.org I came up with a mainly Ant-based approach to materialize nearly complete workspaces for the different development streams. Basically it's a two-phase process with a bootstrap phase to check out the setup scripts together with the appropriate PSFs. If you're interested, have a look at my description at &lt;a href="http://wiki.eclipse.org/CDO_Source_Installation"&gt;http://wiki.eclipse.org/CDO_Source_Installation&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SUToUycPSuI/AAAAAAAAAKY/E_QFNwCg7AQ/s1600-h/Bootstrap2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 308px; height: 144px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SUToUycPSuI/AAAAAAAAAKY/E_QFNwCg7AQ/s400/Bootstrap2.png" alt="" id="BLOGGER_PHOTO_ID_5279600107020307170" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;CDO workspace bootstrapping&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-8625893800256638334?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/8625893800256638334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2008/12/what-is-workspace.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/8625893800256638334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/8625893800256638334'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2008/12/what-is-workspace.html' title='What is a Workspace?'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_6Y29iRV9ZvA/SUTiKMhLiUI/AAAAAAAAAKI/ypuBeMN6ufE/s72-c/hype.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-1140270316143103905</id><published>2008-12-09T20:39:00.061+01:00</published><updated>2008-12-10T11:49:33.070+01:00</updated><title type='text'>Remoting with IProgressMonitor</title><content type='html'>Recently we added optional progress monitoring for remote requests to the &lt;a href="http://wiki.eclipse.org/Net4j"&gt;Net4j Signalling Platform&lt;/a&gt; and I'd like to take this opportunity to explain some of the exciting aspects of Net4j. You can use Net4j to implement synchronous remoting applications as well as asynchronous messaging applications. Depending on the number of Net4j layers you are using you can work buffer-oriented or stream-oriented.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/ST7P9V81pEI/AAAAAAAAAIQ/LWs0OmupNhU/s1600-h/i00007.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 297px;" src="http://3.bp.blogspot.com/_6Y29iRV9ZvA/ST7P9V81pEI/AAAAAAAAAIQ/LWs0OmupNhU/s400/i00007.jpg" alt="" id="BLOGGER_PHOTO_ID_5277884466096088130" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Another multi-purpose technology&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The heart of Net4j is a fast and scalable, Java NIO-based &lt;a href="http://download.eclipse.org/modeling/emf/net4j/javadoc/2.0.0/org/eclipse/net4j/buffer/IBuffer.html"&gt;buffer&lt;/a&gt; switching technology which is completely non-blocking and allows for multiple levels of buffer multiplexing. On top of this buffer-oriented transport layer there is an optional stream-oriented &lt;a href="http://download.eclipse.org/modeling/emf/net4j/javadoc/2.0.0/org/eclipse/net4j/signal/SignalProtocol.html"&gt;protocol&lt;/a&gt; layer which is used to implement application protocols. The framework automatically ensures that multiple such protocols can be multiplexed through a single physical transport connection like a &lt;a href="http://www.blogger.com/ExtendedIOHandler%20ExtendedIOUtil%20ExtendedIOUtil.ClassLoaderClassResolver%20ExtendedIOUtil.ClassResolver%20ExtendedOutputHandler%20Facility"&gt;TCP&lt;/a&gt; socket and that the transport type can be transparently changed to other mediums like &lt;a href="http://download.eclipse.org/modeling/emf/net4j/javadoc/2.0.0/org/eclipse/net4j/http/common/IHTTPConnector.html"&gt;HTTP&lt;/a&gt; or &lt;a href="http://download.eclipse.org/modeling/emf/net4j/javadoc/2.0.0/org/eclipse/net4j/jvm/IJVMConnector.html"&gt;JVM&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/ST7SOpkrbDI/AAAAAAAAAIY/2dH7s8yNwDE/s1600-h/600px-Multiplexing.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 176px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/ST7SOpkrbDI/AAAAAAAAAIY/2dH7s8yNwDE/s400/600px-Multiplexing.png" alt="" id="BLOGGER_PHOTO_ID_5277886962444495922" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I think the idea behind Net4j becomes clearer when we look at an example. Let's develop a small protocol to &lt;span style="font-weight: bold;"&gt;upload files to a remote server&lt;/span&gt; with full support of &lt;a href="http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/runtime/IProgressMonitor.html"&gt;IProgressMonitor&lt;/a&gt; over the network. In Net4j this is a single &lt;a href="http://download.eclipse.org/modeling/emf/net4j/javadoc/2.0.0/org/eclipse/net4j/signal/Signal.html"&gt;signal&lt;/a&gt; (aka communications use-case) of a protocol and we need to provide implementations for both sides of the protocol. We start with the client-side request implementation.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/ST-C2uWIb4I/AAAAAAAAAIg/zurc5qj74D4/s1600-h/Code01+%28request%29.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 255px; height: 320px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/ST-C2uWIb4I/AAAAAAAAAIg/zurc5qj74D4/s320/Code01+%28request%29.png" alt="" id="BLOGGER_PHOTO_ID_5278081164966915970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now the application can create instances of this request and call the send() method on them. The framework in turn calls the requesting() and confirming() methods when the transport layer is able to handle the data. The following example method encapsulates the sending process. Notice how the IProgressMonitor is converted to an OMMonitor.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/ST-EzeSj8sI/AAAAAAAAAIo/ETfTqfyxYFs/s1600-h/Code02+%28send%29.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 170px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/ST-EzeSj8sI/AAAAAAAAAIo/ETfTqfyxYFs/s320/Code02+%28send%29.png" alt="" id="BLOGGER_PHOTO_ID_5278083308140622530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This simple method can now be used in a workbench action. The transferFile() call is wrapped in a Job to make it run in a background thread and to integrate with the Eclipse Progress view.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/ST-GG9NJ4tI/AAAAAAAAAIw/_Typm0OXPPg/s1600-h/Code03+%28action%29.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 245px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/ST-GG9NJ4tI/AAAAAAAAAIw/_Typm0OXPPg/s320/Code03+%28action%29.png" alt="" id="BLOGGER_PHOTO_ID_5278084742368584402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The complete &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.emf/org.eclipse.emf.net4j/examples/org.eclipse.net4j.examples/src/org/eclipse/net4j/examples/transfer/UploadClientAction.java?root=Modeling_Project&amp;amp;view=co"&gt;source code&lt;/a&gt; of this action class is available via CVS. Now we only need a server that is able to receive and handle our request. We start with the server-side request implementation (called an &lt;span style="font-style: italic;"&gt;indication&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/ST-Nvs8kQDI/AAAAAAAAAI4/4wLNQnCpdcc/s1600-h/Code04+%28indication%29.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/ST-Nvs8kQDI/AAAAAAAAAI4/4wLNQnCpdcc/s320/Code04+%28indication%29.png" alt="" id="BLOGGER_PHOTO_ID_5278093138960072754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;When the data of an UploadRequest arrives atthe server the Net4j framework creates an instance of our UploadIndication and calls the indicating() and confirming() methods appropriately. Therefor we need to register a &lt;span style="font-style: italic;"&gt;signal factory&lt;/span&gt;, i.e. a customized protocol. In our case we create the protocol instance on-the-fly inside of the protocol factory.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/ST-PDtCJmCI/AAAAAAAAAJA/zmPvn3bO0nE/s1600-h/Code05+%28protocol%29.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 259px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/ST-PDtCJmCI/AAAAAAAAAJA/zmPvn3bO0nE/s320/Code05+%28protocol%29.png" alt="" id="BLOGGER_PHOTO_ID_5278094582092503074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If the server was expected to run in OSGi/Equinox the only missing thing would be the contribution of this protocol factory to an extension point.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/ST-Q-abeSaI/AAAAAAAAAJQ/qismEtD54k8/s1600-h/Code06+%28plugin%29.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 110px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/ST-Q-abeSaI/AAAAAAAAAJQ/qismEtD54k8/s320/Code06+%28plugin%29.png" alt="" id="BLOGGER_PHOTO_ID_5278096690222352802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;But we want to look at a simple stand-alone version of our upload server.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/ST-Q-lzmmmI/AAAAAAAAAJY/Lfj7R5wkOQc/s1600-h/Code07+%28server%29.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 274px; height: 320px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/ST-Q-lzmmmI/AAAAAAAAAJY/Lfj7R5wkOQc/s320/Code07+%28server%29.png" alt="" id="BLOGGER_PHOTO_ID_5278096693276351074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The complete &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.emf/org.eclipse.emf.net4j/examples/org.eclipse.net4j.examples/src/org/eclipse/net4j/examples/transfer/UploadServer.java?root=Modeling_Project&amp;amp;view=co"&gt;source code&lt;/a&gt; of the server class is available via CVS. To enhance the maintainability of our upload protocol some &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.emf/org.eclipse.emf.net4j/examples/org.eclipse.net4j.examples/src/org/eclipse/net4j/examples/transfer/UploadProtocol.java?root=Modeling_Project&amp;amp;view=co"&gt;protocol constants&lt;/a&gt; are defined in a common interface. This makes it particularly easier to add new signals.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/ST-SGjADxRI/AAAAAAAAAJg/CJTUYlUBz7k/s1600-h/Code08+%28constants%29.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 150px;" src="http://3.bp.blogspot.com/_6Y29iRV9ZvA/ST-SGjADxRI/AAAAAAAAAJg/CJTUYlUBz7k/s320/Code08+%28constants%29.png" alt="" id="BLOGGER_PHOTO_ID_5278097929473869074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now we just need to start the server and watch the console.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/ST-TEg4IM6I/AAAAAAAAAJo/4FkIXVG8CT4/s1600-h/Screenshot01+%28console%29.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 183px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/ST-TEg4IM6I/AAAAAAAAAJo/4FkIXVG8CT4/s320/Screenshot01+%28console%29.png" alt="" id="BLOGGER_PHOTO_ID_5278098994055623586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And finally we start a runtime Eclipse application with our UploadClientAction deployed. When you click this action a file selection dialog is displayed. The chosen file will be uploaded to the server and stored there in a temp folder. The progress of the upload operation is properly reflected in the Eclipse Progress view and can even be cancelled at any point in time.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/ST-T5IwNeuI/AAAAAAAAAJw/15jFt7UDcRA/s1600-h/Screenshot02+%28progress%29.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 116px;" src="http://3.bp.blogspot.com/_6Y29iRV9ZvA/ST-T5IwNeuI/AAAAAAAAAJw/15jFt7UDcRA/s320/Screenshot02+%28progress%29.png" alt="" id="BLOGGER_PHOTO_ID_5278099898113030882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is only one example of the many things you can do with Net4j. Please note that the actual client/server communication in Net4j has some characteristics that differ from other remoting technologies, among them:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;There are no discrete marshalling/un-marshalling phases. As the client writes data to a stream this data is internally filled into fixed-size buffers and passed to the transport layer as soon as they are full enough. As a consequence the server already starts reading and processing that data while the client is still busy sending more data.&lt;/li&gt;&lt;li&gt;Multiple virtual channels can be multiplexed through a single physical transport connection. Each such channel can be associated with its own signal protocol and then be used to multiplex arbitrary numbers of signals into both directions.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The client and server roles do only apply while establishing a physical transport connection. Once connected both sides can open virtual channels at arbitrary times and send or receive data, possibly through signals.&lt;/li&gt;&lt;/ol&gt;A larger example of a Net4j application protocol is the one that connects &lt;a href="http://www.eclipse.org/modeling/emf/?project=emf#emf"&gt;EMF&lt;/a&gt; models with a &lt;a href="http://wiki.eclipse.org/CDO"&gt;CDO model repository&lt;/a&gt;. It is also an asymmetric protocol and consists of a &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/?root=Modeling_Project"&gt;client-side implementation&lt;/a&gt; and a &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/protocol/?root=Modeling_Project"&gt;server-side implementation&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/ST-acX8Xf1I/AAAAAAAAAJ4/tLJiHWbYqHM/s1600-h/Knot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 275px; height: 300px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/ST-acX8Xf1I/AAAAAAAAAJ4/tLJiHWbYqHM/s400/Knot.png" alt="" id="BLOGGER_PHOTO_ID_5278107100555738962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I hope some of you found this interesting. Maybe I have some more ideas for articles about Net4j in the future...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-1140270316143103905?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/1140270316143103905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2008/12/remoting-with-iprogressmonitor.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/1140270316143103905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/1140270316143103905'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2008/12/remoting-with-iprogressmonitor.html' title='Remoting with IProgressMonitor'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_6Y29iRV9ZvA/ST7P9V81pEI/AAAAAAAAAIQ/LWs0OmupNhU/s72-c/i00007.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-6196835227703170751</id><published>2008-12-02T11:53:00.016+01:00</published><updated>2008-12-15T23:40:04.670+01:00</updated><title type='text'>Eclipse Demo Camp in Berlin</title><content type='html'>Last week I was at the &lt;a href="http://wiki.eclipse.org/Eclipse_DemoCamps_November_2008/Berlin"&gt;Eclipse Demo Camp in Berlin&lt;/a&gt;, my home town in Germany. This was my second demo camp so I was curious how it would compare to the &lt;a href="http://wiki.eclipse.org/15._April_2008,_Stammtisch"&gt;one&lt;/a&gt; I visited early this year in Bern, Switzerland.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.amoesch.ch/galleries/places/berlin"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/STUdaMrpX7I/AAAAAAAAAHA/04VmMxpZqmM/s320/AMoesch.png" alt="" id="BLOGGER_PHOTO_ID_5275154874452500402" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Berlin photos of my friend Andreas Mösching&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;It turned out that they were quite similar. A lot of very interesting presentations coupled with a delicious buffet. Another similarity was the presenters' tendency to completely over-estimate their talking time. I remember that my &lt;a href="http://www.eclipsecon.org/2008/index.php?page=sub/&amp;amp;id=58"&gt;talk&lt;/a&gt; at the EclipseCon 2008 also suffered from this a lot. I think I learned from it and I planned to talk only 15 of my 30 minutes and leave the rest for discussion.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/STUdZVupZeI/AAAAAAAAAGw/aUFaFJvfNFg/s1600-h/IMG_0086.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/STUdZVupZeI/AAAAAAAAAGw/aUFaFJvfNFg/s320/IMG_0086.JPG" alt="" id="BLOGGER_PHOTO_ID_5275154859701134818" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt; The "Deutsche Dom" (main cathedral in Berlin)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;My talk about the &lt;a href="http://wiki.eclipse.org/CDO"&gt;CDO Model Repository&lt;/a&gt; was the first one in a sequence of eight. Fortunately I managed to show my three architecture slides in 10 minutes, followed by a live demo of another 10 minutes. The rest of the time was dedicated to a lot of questions and answers. Very informative for me and the audience. Thank you!&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/STUt9uWWj8I/AAAAAAAAAII/NQCLYvbJsPI/s1600-h/CDO.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 229px; height: 185px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/STUt9uWWj8I/AAAAAAAAAII/NQCLYvbJsPI/s320/CDO.png" alt="" id="BLOGGER_PHOTO_ID_5275173076971458498" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;CDO Architecture&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;After me Tom Ritter from the Fraunhofer Institut described their &lt;a href="http://www.modelbus.org/"&gt;ModelBus&lt;/a&gt; effort. It reminded me slightly to what I saw in &lt;a href="http://topcased.gforge.enseeiht.fr/"&gt;TopcaseD&lt;/a&gt; framework and indeed Tom talked about a former cooperation. I wonder if somebody would be interested in evaluating ways to integrate CDO with their ModelBus...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/STUjpidQIsI/AAAAAAAAAHI/q4aJYXfQWvM/s1600-h/PB280109.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/STUjpidQIsI/AAAAAAAAAHI/q4aJYXfQWvM/s320/PB280109.JPG" alt="" id="BLOGGER_PHOTO_ID_5275161735065510594" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;ModelBus&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Then Volker Wegert from Siemens had a handicap while showing his &lt;a href="http://www.sf.net/projects/rcer"&gt;SAP R/3 Connector for Eclipse RCP Applications&lt;/a&gt;: none of the attendees ever faced SAP back-ends. Nevertheless he managed to make it interesting!&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/STUkjJfNiyI/AAAAAAAAAHw/IeIzQ9j-l9s/s1600-h/PB280110.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/STUkjJfNiyI/AAAAAAAAAHw/IeIzQ9j-l9s/s320/PB280110.JPG" alt="" id="BLOGGER_PHOTO_ID_5275162724795255586" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;SAP R/3 Connector for Eclipse RCP Applications&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Very interesting was Jens von Pilgrim's demo of &lt;a href="http://www.eclipse.org/proposals/gef3d/"&gt;GEF3D&lt;/a&gt;. I was amazed to see what they're able to do with 2D user interfaces! With a handful of code changes they turn an ordinary class diagram editor into a multi-layered 3D editor with connections between the layers and so much more. Amazing. And Jens is a collegue of my new CDO committer Stefan Winkler, so I guess I'll hear from him in the future.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/STUjpyfnCCI/AAAAAAAAAHQ/5YqqHPJrqzA/s1600-h/PB280111.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/STUjpyfnCCI/AAAAAAAAAHQ/5YqqHPJrqzA/s320/PB280111.JPG" alt="" id="BLOGGER_PHOTO_ID_5275161739370367010" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Gef3D&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Enrico Schnepel explained us how to use &lt;a href="http://gengmf.randomice.net/" class="external text" title="http://gengmf.randomice.net/" rel="nofollow"&gt;GenGMF&lt;/a&gt; to ease the development of GMF editors for large metamodels. I also always thought that the GMF's diagram configuration models are so flexible that they fail to easily support the 95 percent cases. Could be worth a look at GenGMF...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/STUjqCzJizI/AAAAAAAAAHY/3RXeg89dhC0/s1600-h/PB280112.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/STUjqCzJizI/AAAAAAAAAHY/3RXeg89dhC0/s320/PB280112.JPG" alt="" id="BLOGGER_PHOTO_ID_5275161743747287858" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;GenGMF&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;One of the talks was not on the agenda so unfortunately I can not remember the name of the student who showed a demo of his distributed shared model editing framework on top of EMF (or GMF?). In his talk he explained that he investigated CDO and found it inappropriate due to the lack of offline support. What a pity that he did not take the time to contact the CDO team. We are currently investigating ways to provide more disconnected modes of model sharing and it would have been so much nicer to co-operate rather than duplicate efforts! I'd appreciate very much his work in the CDO project and he agreed to consider this. Ed, didn't you mention recently how much you enjoy seeing our team grow and prosper? :P&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/STUonQljXcI/AAAAAAAAAIA/VLtB0rqU0f8/s1600-h/PB280114.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/STUonQljXcI/AAAAAAAAAIA/VLtB0rqU0f8/s320/PB280114.JPG" alt="" id="BLOGGER_PHOTO_ID_5275167193466887618" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Shared editing in GMF diagrams&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Theofanis Vassiliou-Gioles demonstrated their &lt;a href="http://www.testingtech.com/products/ttworkbench.php" class="external text" title="http://www.testingtech.com/products/ttworkbench.php" rel="nofollow"&gt;TTworkbench&lt;/a&gt; - an extensible Eclipse based test environment - in a &lt;span style="font-weight: bold;"&gt;very&lt;/span&gt; detailed way. I felt like a trainee...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/STUjqIyzhZI/AAAAAAAAAHg/UOIyDzPbs-0/s1600-h/PB280115.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_6Y29iRV9ZvA/STUjqIyzhZI/AAAAAAAAAHg/UOIyDzPbs-0/s320/PB280115.JPG" alt="" id="BLOGGER_PHOTO_ID_5275161745356457362" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Buffet between the talks&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Stephan Herrmann from the TU Berlin gave the last talk: &lt;a href="http://wiki.eclipse.org/Eclipse_DemoCamps_November_2008/Berlin/Abstracts#Plugin_reuse_and_adaptation_with_Object_Teams:_Don.27t_settle_for_a_compromise.21"&gt;Plugin reuse and adaptation with Object Teams: Don't settle for a compromise!&lt;/a&gt; It looked a bit like an alternative approach to AspectJ and his examples were nearly as amazing as the ones at the ESE talk about Equinox Aspects. I must admit that I'm a bit scared about the security implications about such major changes to published and deployed code, un-anticipated by their providers. But it's clear that many things can be achieved with it that were impossible without.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/STUjqqYJmeI/AAAAAAAAAHo/NHURzJXTc4c/s1600-h/PB280117.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_6Y29iRV9ZvA/STUjqqYJmeI/AAAAAAAAAHo/NHURzJXTc4c/s320/PB280117.JPG" alt="" id="BLOGGER_PHOTO_ID_5275161754371463650" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Object Teams&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The demo camp started at 6 p.m. and now it was already far past 10. Only two short breaks so most of us looked a bit tired already and I also decided to go home. For future demo camps I would really limit the presentation time to 15 minutes per talk and allow for discussion afterwards. It should be clear that a demo camp is not a training where we should learn the last detail of a tool or technology. It should create interest and the wish to dig deeper back at home.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/STUdZzQq1bI/AAAAAAAAAG4/thivVqTLhQ4/s1600-h/IMG_0001.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/STUdZzQq1bI/AAAAAAAAAG4/thivVqTLhQ4/s320/IMG_0001.JPG" alt="" id="BLOGGER_PHOTO_ID_5275154867628463538" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;The Fernsehturm in Berlin&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-6196835227703170751?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/6196835227703170751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2008/12/eclipse-demo-camp-in-berlin.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/6196835227703170751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/6196835227703170751'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2008/12/eclipse-demo-camp-in-berlin.html' title='Eclipse Demo Camp in Berlin'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6Y29iRV9ZvA/STUdaMrpX7I/AAAAAAAAAHA/04VmMxpZqmM/s72-c/AMoesch.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-3238725345420284216</id><published>2008-11-24T19:43:00.009+01:00</published><updated>2008-11-24T22:50:27.060+01:00</updated><title type='text'>How Scalable are my Models?</title><content type='html'>&lt;a href="http://thegordian.blogspot.com/2008/11/being-at-ese-not-in-thailand.html"&gt;Recently&lt;/a&gt; I noticed an increasing hype around the topic &lt;a href="http://en.wikipedia.org/wiki/Scalability"&gt;scalability&lt;/a&gt; of &lt;a href="http://en.wikipedia.org/wiki/Model"&gt;models&lt;/a&gt;, paired with comprehensible concerns about the coherence in between.  It is clear that, in the context of Eclipse, we are speaking about &lt;a href="http://www.eclipse.org/modeling/emf/"&gt;EMF&lt;/a&gt;, the &lt;i&gt;Eclipse Modeling Framework&lt;/i&gt;. To answer the headline question we first need to gather a common understanding of what scalability means in this context. We can summarize the things we can do with a model into two categories: &lt;ul&gt;&lt;li&gt;&lt;b&gt;Use&lt;/b&gt; the model in main memory &lt;/li&gt;&lt;li&gt;&lt;b&gt;Preserve&lt;/b&gt; the model state between sessions &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;For a model to be scalable it is required that the resource consumption for its &lt;b&gt;usage&lt;/b&gt; and &lt;b&gt;preservation&lt;/b&gt; is not a function of the model size.&lt;/p&gt; &lt;p&gt;Scalability does not necessarily imply that it is always darned fast to use or preserve a single model &lt;a href="http://help.eclipse.org/help32/topic/org.eclipse.emf.doc/references/javadoc/org/eclipse/emf/ecore/EObject.html"&gt;object&lt;/a&gt;. Rather it guarantees that performance and foot print are the same or at least similar, whether the object is the only one contained in a &lt;a href="http://help.eclipse.org/help32/topic/org.eclipse.emf.doc/references/javadoc/org/eclipse/emf/ecore/resource/Resource.html"&gt;resource&lt;/a&gt; or it is contained in a huge object graph. Usually the resource consumption should be a function of the model change.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SSr2bqvMBDI/AAAAAAAAAF4/UcgeMXN3FzE/s1600-h/Knot1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 300px;" src="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SSr2bqvMBDI/AAAAAAAAAF4/UcgeMXN3FzE/s320/Knot1.png" alt="" id="BLOGGER_PHOTO_ID_5272297268979696690" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Some persistence approaches obviously need to violate this constraint. For example saving model changes to a &lt;a href="http://en.wikipedia.org/wiki/.Txt"&gt;text file&lt;/a&gt; will always write the whole model as opposed to only the changes (respective enhancement requests in the EMF newsgroup showed me that this is not as obvious as I thought before). Even loading a single object usually requires to deserialize a whole resource file.&lt;/p&gt; &lt;p&gt;Other persistence systems like &lt;a href="http://en.wikipedia.org/wiki/Relational_database"&gt;relational databases&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/ODBMS"&gt;object-oriented databases&lt;/a&gt; or even proprietary &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/io/RandomAccessFile.html"&gt;random-access files&lt;/a&gt; are likely to provide for more scalable preservation of models. An EMF &lt;a href="http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.emf.doc/references/javadoc/org/eclipse/emf/ecore/change/util/ChangeRecorder.html"&gt;change recorder&lt;/a&gt; could be attached to your &lt;a href="http://help.eclipse.org/help32/topic/org.eclipse.emf.doc/references/javadoc/org/eclipse/emf/ecore/resource/ResourceSet.html"&gt;resource set&lt;/a&gt; and the resulting &lt;a href="http://help.eclipse.org/help32/topic/org.eclipse.emf.doc/references/javadoc/org/eclipse/emf/ecore/change/ChangeDescription.html"&gt;change description&lt;/a&gt; could be somehow transformed into a set of modifications, executed against the back-end in &lt;i&gt;O(n)&lt;/i&gt; where &lt;i&gt;n&lt;/i&gt; is the &lt;i&gt;size of change&lt;/i&gt;.&lt;/p&gt; &lt;p&gt;While each model object is usually an instance of a generated subclass of &lt;a href="http://help.eclipse.org/help32/topic/org.eclipse.emf.doc/references/javadoc/org/eclipse/emf/ecore/impl/EObjectImpl.html"&gt;EObjectImpl&lt;/a&gt; there are other ancestors available, too. &lt;a href="http://dev.eclipse.org/newslists/news.eclipse.tools.emf/msg36337.html"&gt;Understanding the cost of an object&lt;/a&gt; can be inevitable when trying to measure and optimize the resource consumption. But even if we know the minimum size of a single object it should be clear that we are unable to achieve real scalability just by reducing the size of our objects. The only way to handle models with arbitrary numbers of contained objects is to selectively load the objects that are currently needed into main memory and make them reclaimable by the Java &lt;a href="http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29"&gt;garbage collector&lt;/a&gt; immediately after usage. A system with such characteristics does not focus on the size of single objects anymore. So what is preventing our generated models from being scalable?&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SSr2byE-y3I/AAAAAAAAAGA/3gzYakrIask/s1600-h/Knot2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 281px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SSr2byE-y3I/AAAAAAAAAGA/3gzYakrIask/s320/Knot2.png" alt="" id="BLOGGER_PHOTO_ID_5272297270950153074" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The default generation pattern of EMF creates subclasses of EObjectImpl for our model concepts. These generated classes contain member fields to store the values of references. At run-time these references &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ref/package-summary.html#reachability"&gt;strongly&lt;/a&gt; tie together our object graph. In EMF there are two basic types of references, containment references and cross references. Traditionally only cross references can be turned into proxies to be resolvable again later. As of EMF 2.4 containment references can become proxies as well, although this requires a non-default generation pattern and possibly the adoption of the application to create and manage additional resources. It is important to note that turning an object into a proxy only sets its &lt;a href="http://help.eclipse.org/help32/topic/org.eclipse.emf.doc/references/javadoc/org/eclipse/emf/ecore/EObject.html#eIsProxy%28%29"&gt;eProxyURI&lt;/a&gt; and nothing else. Particularly it does &lt;b&gt;not&lt;/b&gt; unset any attributes or references. As a result proxies are always bigger than their unproxied pendants and they still carry their strong references to other objects! Go figure…&lt;/p&gt; &lt;p&gt;Now we could try to manually unset the nasty references that still prevent our objects from being garbage collected. But this can be a tedious and error-prone task. Especially bi-directional cross references can be hard to tackle because of the implicit inverse operations when unsetting one end. While it does not seem completely unfeasible it remains questionable whether the EMF proxy mechanism is appropriate to make our models scale well. To sum up:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Containment relationships between objects in a resource usually prevent from proxying. &lt;/li&gt;&lt;li&gt;Hence only complete resources look like candidates for unloading. &lt;/li&gt;&lt;li&gt;Detection of incoming references is expensive. &lt;/li&gt;&lt;li&gt;Proxying of incoming references does not automatically influence strong reachability. &lt;/li&gt;&lt;li&gt;Manual removal of strong references is at least inconvenient. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;It seems as if we are stuck now, but let us step back to look at our model from a distance. In the end, our model is just a directed graph, the nodes are Java objects and the edges are strong Java references. And this last observation seems to be the root cause of our scalability problem! Imagine all these objects had a unique identifying value and all these associations were more like unconstrained foreign keys in a relational database system. We could point to objects without making them strongly reachable. Can we?&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SSr2bywW3iI/AAAAAAAAAGI/O3_504NM1XY/s1600-h/Knot3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 316px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SSr2bywW3iI/AAAAAAAAAGI/O3_504NM1XY/s320/Knot3.png" alt="" id="BLOGGER_PHOTO_ID_5272297271132085794" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Yes, we can! EMF offers a different generation pattern called &lt;a href="http://dev.eclipse.org/newslists/news.eclipse.tools.emf/msg35389.html"&gt;reflective delegation&lt;/a&gt; and a different run-time base class called &lt;a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.2.5/org/eclipse/emf/ecore/impl/EStoreEObjectImpl.html"&gt;EStoreEObjectImpl&lt;/a&gt; which can be used to implement models that transparently support the needed characteristics. Fasten your seat belt…&lt;/p&gt; &lt;p&gt;Reflective delegation changes the code that is generated for your implementation classes in three ways. Member fields are no longer generated for features. The getters and setters for single-valued features no longer access a member field’s value but rather delegate to the reflective &lt;a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.2.5/org/eclipse/emf/ecore/impl/BasicEObjectImpl.html#eGet%28org.eclipse.emf.ecore.EStructuralFeature%29"&gt;eGet&lt;/a&gt; and &lt;a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.2.5/org/eclipse/emf/ecore/impl/BasicEObjectImpl.html#eSet%28org.eclipse.emf.ecore.EStructuralFeature,%20java.lang.Object%29"&gt;eSet&lt;/a&gt; methods. And the getters for many-valued features return special &lt;a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.2.5/org/eclipse/emf/common/util/EList.html"&gt;EList&lt;/a&gt; implementations which also delegate to some reflective methods. With this generation pattern we can effectively remove all modeled state from our EObjects, including the unloved strong references. But where does it go instead?&lt;/p&gt; &lt;p&gt;Since we removed the state from our generated classes and the default base class &lt;a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.2.5/org/eclipse/emf/ecore/impl/EObjectImpl.html"&gt;EObjectImpl&lt;/a&gt; is not able to store modeled state it is obvious that we need a different base class, which can easily be achieved with the generator property &lt;b&gt;Root Extends Class&lt;/b&gt;. While we could write our own implementation of &lt;a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.2.5/org/eclipse/emf/ecore/InternalEObject.html"&gt;InternalEObject&lt;/a&gt; it is usually sufficient to use or subclass EStoreEObjectImpl. Instances of this class delegate all their state access to an &lt;a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.2.5/org/eclipse/emf/ecore/InternalEObject.EStore.html"&gt;EStore&lt;/a&gt; which can be provided by the application. We only need to write our own EStore implementation with a dozen or so methods to fulfill the contract and ensure that each EStoreEObjectImpl instance points to an appropriate store instance. I have seen frameworks which maintain a separate store instance for each model object, others let all objects of a resource or a resource set share a single store and others (like &lt;a href="http://wiki.eclipse.org/CDO"&gt;CDO&lt;/a&gt;, explained later on) are even more complex. I think the right choice depends on how exactly the store is required to &lt;i&gt;handle&lt;/i&gt; the object data. Before we dive into CDO’s approach we have to look at a tricky problem that all possible store implementation have to solve.&lt;/p&gt; &lt;p&gt;In addition to the modeled state of an object all stores have to maintain the &lt;a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.2.5/org/eclipse/emf/ecore/impl/EObjectImpl.html#eContainer"&gt;eContainer&lt;/a&gt; and the &lt;a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.2.5/org/eclipse/emf/ecore/impl/EObjectImpl.html%E2%99%A6"&gt;eContainerFeatureID&lt;/a&gt; properties of an EObject. Although it is not immediately obvious the EStore interface only provides methods to &lt;b&gt;get&lt;/b&gt; these values but no methods to &lt;b&gt;set&lt;/b&gt; them! Since our store needs to provide these values and the framework does not pass them in explicitly we must, if we want or not, &lt;b&gt;derive these values implicitly&lt;/b&gt; from the modification method calls (those that can influence the containment) and our knowledge about the model (which are the containment references?). Solving this problem is typically not a one hour task!&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SSr2cBJYWUI/AAAAAAAAAGQ/CGQlmDwfPx8/s1600-h/Knot4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 306px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SSr2cBJYWUI/AAAAAAAAAGQ/CGQlmDwfPx8/s320/Knot4.png" alt="" id="BLOGGER_PHOTO_ID_5272297274995136834" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now let us look at how the &lt;i&gt;CDO Model Repository&lt;/i&gt; framework faces the problem. Here are some of the requirements for objects in CDO:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Loadable on demand, even across containment relationships &lt;/li&gt;&lt;li&gt;Garbage collectable, if not used anymore &lt;/li&gt;&lt;li&gt;Replaceable by newer versions (passive update) or older versions (temporality) &lt;/li&gt;&lt;li&gt;Easily and efficiently transferable through a network wire &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;These led to a considerably complex design which I am trying to strip down here a bit:&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SSr2zTnWUcI/AAAAAAAAAGg/HYIRYsVjaL0/s1600-h/CDOStore.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 381px; height: 400px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SSr2zTnWUcI/AAAAAAAAAGg/HYIRYsVjaL0/s400/CDOStore.png" alt="" id="BLOGGER_PHOTO_ID_5272297675089662402" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://download.eclipse.org/modeling/emf/cdo/javadoc/2.0.0/org/eclipse/emf/cdo/CDOObject.html"&gt;CDO’s implementation of EObject&lt;/a&gt; subclasses EStoreEObjectImpl and shares the same store instance with all objects in the resource set that come from the same &lt;a href="http://download.eclipse.org/modeling/emf/cdo/javadoc/2.0.0/org/eclipse/emf/cdo/server/IRepository.html"&gt;repository&lt;/a&gt; which, together with the virtual current time is represented  by a &lt;a href="http://download.eclipse.org/modeling/emf/cdo/javadoc/2.0.0/org/eclipse/emf/cdo/CDOView.html"&gt;CDOView&lt;/a&gt;. &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java?root=Modeling_Project&amp;amp;view=co"&gt;CDO’s implementation of EStore&lt;/a&gt; is stateless other than knowing its view. The modeled state of an object is stored in &lt;a href="http://download.eclipse.org/modeling/emf/cdo/javadoc/2.0.0/org/eclipse/emf/cdo/common/revision/CDORevision.html"&gt;CDORevision&lt;/a&gt; instances which represent the immutable states of an object between commit operations. The revisions internally store the &lt;a href="http://download.eclipse.org/modeling/emf/cdo/javadoc/2.0.0/org/eclipse/emf/cdo/common/id/CDOID.html"&gt;CDOIDs&lt;/a&gt; of target objects instead of strong references to them. Each object stores a strong reference to the revision that is &lt;i&gt;active&lt;/i&gt; at the time configured in the view. A view softly or weakly caches objects keyed by their CDOID. The revisions are cached separately in the &lt;a href="http://download.eclipse.org/modeling/emf/cdo/javadoc/2.0.0/org/eclipse/emf/cdo/CDOSession.html"&gt;CDOSession&lt;/a&gt;, by default with a two-level cache (configurable fixed size LRU cache plus memory sensitive cache to take over evicted revisions). Since revisions are immutable they can be shared among different local views.&lt;/p&gt; &lt;p&gt;With this design neither the framework nor the objects and revisions keep strong references to other objects or revisions and the garbage collector is able to do its job as soon as the application releases its strong references. The reflective delegation causes each access to a model property to go through the store, which uses the revision of the object to determine the CDOID of the target object. This id is then used to lookup the target object in the view cache. If the object is missing, either because it was never loaded or it has already been garbage collected, the needed revision is looked up in the session cache. The revision always knows the class of the object so that the view can create a new EObject instance and wire it with the revision. If revisions are missing from the sessions cache they are loaded from the repository server.&lt;/p&gt; &lt;p&gt;I kept quiet about a certain aspect to avoid complicating things at the beginning.  Notice that not only the framework but also the application is creating new EObject instances to populate the model. Usually this happens through calls to &lt;a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.2.5/org/eclipse/emf/ecore/EFactory.html"&gt;EFactory&lt;/a&gt; methods which are unable to provide the new object with the appropriate EStore pointer. It becomes obvious that CDO objects (like all EStoreEObjectImpls without a singleton EStore) generally operate in one of two basic &lt;i&gt;modes&lt;/i&gt;, which we call TRANSIENT and PERSISTENT respectively. In the context of repository transactions and remote invalidation we further refined the hyper state PERSISTENT  into the sub states NEW, CLEAN, DIRTY, PROXY and CONFLICT. The transitions are internally managed by a singleton &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.emf/org.eclipse.emf.cdo/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java?root=Modeling_Project&amp;amp;view=co"&gt;CDOStateMachine&lt;/a&gt;:&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SSr2zgOkfhI/AAAAAAAAAGo/skY6h7nCvUo/s1600-h/CDOStateMachine.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 228px;" src="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SSr2zgOkfhI/AAAAAAAAAGo/skY6h7nCvUo/s400/CDOStateMachine.png" alt="" id="BLOGGER_PHOTO_ID_5272297678475394578" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the TRANSIENT state, i.e. after the object was created but before it is attached to a view, the object has no CDOID and no revision. The store is by-passed and the values are stored in the &lt;a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.2.5/org/eclipse/emf/ecore/impl/EStoreEObjectImpl.html#eSettings"&gt;eSettings&lt;/a&gt; array instead. The attach event of the state machine installs a temporary CDOID and an empty revision which is &lt;i&gt;populated&lt;/i&gt; through a call-back to the object. During population the data values are moved from the eSettings array to the revision and at the same time the strong Java references are converted to CDOIDs. Finally the object state is set to NEW. The temporary CDOIDs of NEW objects are replaced after the next commit operation with permanent CDOIDs that the repository guarantees to be unique in its scope and all local references are adjusted accordingly.&lt;/p&gt; &lt;p&gt;Notice that no EObject/CDORevision pair is ever strongly reachable by anything other than the application. And the modeled state of an EObject can be atomically switched to older or newer versions by simply replacing the revision pointer. Since a revision does not store any Java references to other entities it’s easy to transfer its data over the wire. With this design it becomes feasible to &lt;b&gt;traverse&lt;/b&gt; &lt;b&gt;models of arbitrary sizes&lt;/b&gt;. &lt;/p&gt; &lt;p&gt;CDO provides some additional mechanisms to make such traversals even more enjoyable. The &lt;b&gt;partial collection loading&lt;/b&gt; feature, for example, enables to &lt;i&gt;page in&lt;/i&gt; configurable element chunks of huge lists and the current EStore implementation is able to &lt;a href="http://download.eclipse.org/modeling/emf/cdo/javadoc/2.0.0/org/eclipse/emf/cdo/common/analyzer/CDOFetchRule.html"&gt;record model usage patterns&lt;/a&gt; which can be used for &lt;b&gt;pre-fetching&lt;/b&gt; of revisions that are likely to be used soon.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SSr2dXzOiSI/AAAAAAAAAGY/iyGUUH7XQR0/s1600-h/Knot5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 320px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SSr2dXzOiSI/AAAAAAAAAGY/iyGUUH7XQR0/s320/Knot5.png" alt="" id="BLOGGER_PHOTO_ID_5272297298256103714" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you are interested in learning more about CDO you are welcome in the &lt;a href="http://wiki.eclipse.org/CDO"&gt;wiki&lt;/a&gt; and the &lt;a href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.tools.emf"&gt;newsgroup&lt;/a&gt;. You are also invited to attend my proposed &lt;a href="https://www.eclipsecon.org/submissions/2009/view_talk.php?id=396"&gt;talk&lt;/a&gt; at &lt;a href="http://www.eclipsecon.org/2009"&gt;EclipseCon 2009&lt;/a&gt;: “Scale, Share and Store your Models with CDO 2.0”&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-3238725345420284216?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/3238725345420284216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2008/11/how-scalable-are-my-models.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/3238725345420284216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/3238725345420284216'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2008/11/how-scalable-are-my-models.html' title='How Scalable are my Models?'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_6Y29iRV9ZvA/SSr2bqvMBDI/AAAAAAAAAF4/UcgeMXN3FzE/s72-c/Knot1.png' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-7242352182824500790</id><published>2008-11-22T11:12:00.022+01:00</published><updated>2008-11-24T07:44:03.306+01:00</updated><title type='text'>Being at ESE, not in Thailand...</title><content type='html'>Usually in late November we are going to different places in wonderful Thailand for vacation but this year the &lt;a href="http://www.eclipsecon.org/summiteurope2008/sessions?id=166"&gt;Eclipse Summit Europe&lt;/a&gt; was a month later than the all the other years. So I abstained from a big vacation and headed for the Summit in Ludwigsburg. I arrived there on Monday evening but my &lt;a href="http://en.wikipedia.org/wiki/Lost_luggage"&gt;luggage did not&lt;/a&gt;.  Never again I’ll ask for priority baggage when checking in with Air Berlin!&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SSfs9FgkT6I/AAAAAAAAAEY/xSdtahrDsfs/s1600-h/airport-small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 254px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SSfs9FgkT6I/AAAAAAAAAEY/xSdtahrDsfs/s320/airport-small.jpg" alt="" id="BLOGGER_PHOTO_ID_5271442423055404962" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Arriving at the airport Bangkok&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Fortunately my luggage was delivered to the &lt;a href="http://en.nestor-hotels.de/nestor-Hotels/Ludwigsburg"&gt;Nestor&lt;/a&gt; hotel before midnight so I could fully concentrate on the fun of the conference. This fun caused an initial hangover on Tueasday, the symposia day. I missed the &lt;a href="http://blip.tv/file/1485036"&gt;modeling symposium&lt;/a&gt; because I was told that it was already cramped when I arrived. And I did not prepare a position paper with the required minimum of 2 pages. I’d vote for freeing committers and other persons who are known to be involved so deeply from such effort. Later I was even told that the papers had not been checked very strictly. Anyway, I had some really nice talks to different people on Tuesday.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SSftR-S66rI/AAAAAAAAAFY/p5DXCGYvxPQ/s1600-h/jungle.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SSftR-S66rI/AAAAAAAAAFY/p5DXCGYvxPQ/s320/jungle.JPG" alt="" id="BLOGGER_PHOTO_ID_5271442781896370866" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Me and the jungle on Koh Phi Phi&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;And I was able to attend the BREDEX &lt;a href="http://www.bredex.de/en/guidancer/first.html"&gt;GUIdancer&lt;/a&gt; presentation, given by Alexandra Imrie, who did a really great job. Later I was amazed that she, coming from Liverpool, could speak German without even the slightest accent. They seem to have a nice tool to create , maintain and execute user interface tests and I am happy that they promised to consider providing me with a free license for my &lt;a href="http://wiki.eclipse.org/CDO"&gt;CDO Model Repository&lt;/a&gt; project. I also met Ibrahim Sallam from &lt;a href="http://www.objectivity.com/"&gt;Objectivity, Inc. &lt;/a&gt;who is currently preparing the offer of free developer licenses for their wonderful and darned fast OO database system (if used in combination with our EMF/CDO stack). We scheduled a more detailed discussion about this effort for Thursday.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SSftRUo8WyI/AAAAAAAAAFI/lYi5HSJSHLs/s1600-h/evolution.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SSftRUo8WyI/AAAAAAAAAFI/lYi5HSJSHLs/s320/evolution.JPG" alt="" id="BLOGGER_PHOTO_ID_5271442770714450722" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;More jungle near Chumphon&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;In the evening we had dinner in a smaller group and this time in a small restaurant with the lovely local food, which I think of is reason enough to have the summit in &lt;a href="http://en.wikipedia.org/wiki/Swabia"&gt;Schwabenland&lt;/a&gt; every year. Here you get the best &lt;a href="http://www.kochbaeren.de/Rezept/08_21.html"&gt;Rostbraten&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Sp%C3%A4tzle"&gt;Spätzle&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Maultasche"&gt;Maultaschen&lt;/a&gt; ever. Although we had a lot of fun I left early and went to bed to avoid another hangover during my CDO talk next day.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SSftRT8W5VI/AAAAAAAAAFA/D3fksx9cIHo/s1600-h/dead-small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SSftRT8W5VI/AAAAAAAAAFA/D3fksx9cIHo/s320/dead-small.jpg" alt="" id="BLOGGER_PHOTO_ID_5271442770527446354" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Lovely Thai food&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Wednesday started with (a nice breakfast and) six great talks, the most fascinating for me being the &lt;a href="http://www.eclipsecon.org/summiteurope2008/sessions?id=28"&gt;Aspect Weaving for OSGi&lt;/a&gt; one. Heiko Seeberger and Martin Lippert presented amazing stuff about their &lt;a href="http://www.eclipse.org/equinox/incubator/aspects/"&gt;Equinox Aspects&lt;/a&gt; project. I promised myself to give it a try as soon as possible. Some time after lunch I headed for Cedric Brun’s interesting talk about &lt;a href="http://www.eclipsecon.org/summiteurope2008/sessions?id=129"&gt;Team Work with Models : Compare and Merge with EMF Compare&lt;/a&gt;. I appreciated that he finished in time because my &lt;a href="http://www.eclipsecon.org/summiteurope2008/sessions?id=166"&gt;talk about the most interesting new features&lt;/a&gt; for the upcoming version 2.0 of my CDO Model Repository was the next one to follow.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SSftXd6TuDI/AAAAAAAAAFg/e-EdvNosbHg/s1600-h/libelle.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 303px; height: 320px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SSftXd6TuDI/AAAAAAAAAFg/e-EdvNosbHg/s320/libelle.jpg" alt="" id="BLOGGER_PHOTO_ID_5271442876282419250" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Dragonfly at a pond on Koh Samui&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;It seemed that I somehow managed to address both, give an initial impression to the newbies and make existing users look forward to the next release. And our next release will really be a major one. Our small team has already implemented &lt;a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&amp;amp;short_desc_type=allwordssubstr&amp;amp;short_desc=&amp;amp;classification=Modeling&amp;amp;product=EMF&amp;amp;component=CDO&amp;amp;component=Net4j&amp;amp;long_desc_type=allwordssubstr&amp;amp;long_desc=&amp;amp;bug_file_loc_type=allwordssubstr&amp;amp;bug_file_"&gt;175 bugzillas&lt;/a&gt; since Ganymede, many of them being &lt;a href="http://www.eclipse.org/projects/project-plan.php?planurl=http://www.eclipse.org/modeling/emf/cdo/project-info/plan.xml&amp;amp;component=CDO#themes_and_priorities"&gt;powerful new features&lt;/a&gt;. Special thanks belong to Simon McDuff, who spends considerable part of his parental vacation to provide the CDO community with cool features and friendly support!&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SSftRfqIBdI/AAAAAAAAAE4/8pzROCS54YQ/s1600-h/bug.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_6Y29iRV9ZvA/SSftRfqIBdI/AAAAAAAAAE4/8pzROCS54YQ/s320/bug.jpg" alt="" id="BLOGGER_PHOTO_ID_5271442773672199634" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;A really huge guy&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;To not repeat my former underestimates of talking time I focused on only very few architectural slides and some code snippets to demonstrate some of the most interesting new features:&lt;br /&gt;•    &lt;a href="http://bugs.eclipse.org/213402"&gt;External References&lt;/a&gt;&lt;br /&gt;•    &lt;a href="http://bugs.eclipse.org/213403"&gt;Distributed Transactions&lt;/a&gt;&lt;br /&gt;•    &lt;a href="http://bugs.eclipse.org/249847"&gt;Structured Resources&lt;/a&gt;&lt;br /&gt;•    &lt;a href="http://bugs.eclipse.org/208689"&gt;Resource Queries&lt;/a&gt;&lt;br /&gt;•    &lt;a href="http://bugs.eclipse.org/247427"&gt;Explicit Locking&lt;/a&gt;&lt;br /&gt;•    &lt;a href="http://bugs.eclipse.org/215688"&gt;Save Points&lt;/a&gt;&lt;br /&gt;•    &lt;a href="http://bugs.eclipse.org/230832"&gt;Configurable Passive Updates&lt;/a&gt;&lt;br /&gt;•    &lt;a href="http://bugs.eclipse.org/233490"&gt;Change Subscriptions&lt;/a&gt;&lt;br /&gt;•    &lt;a href="http://bugs.eclipse.org/233273"&gt;Query Framework&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SSftRkLC2wI/AAAAAAAAAFQ/pKraXYkZFv0/s1600-h/frog.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 282px; height: 320px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SSftRkLC2wI/AAAAAAAAAFQ/pKraXYkZFv0/s320/frog.jpg" alt="" id="BLOGGER_PHOTO_ID_5271442774884014850" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;1, 2, 3, search for me!&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;I squeezed the large audience through my &lt;a href="https://www.gpublication.com/eclipse/#requestedContent=contentID://EclipseConferences/ESE2008/166"&gt;ten slides&lt;/a&gt; in only fifteen minutes, which proofed to be a good decision because even the remaining twenty minutes were not  enough to anser all of the questions. I was amazed about the great interest in CDO and particularly noticed the increasing concerns about the scalability of models. CDO transparently addresses this sort of issues for example by loading and unloading single instances on demand or by partially loading huge lists of references. It is unbelievable, yet true, that we can easily traverse models of four gigabytes size or more. Depending on the back-end type chosen we can reach load rates of up to thirty thousand objects per second! I believe that such characteristics, together with the well-thought APIs and our prompt support to the community, caused a lot of the hype we are currently experiencing.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SSfs9iNwr7I/AAAAAAAAAEw/_0qanNeDBDo/s1600-h/bees.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 300px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SSfs9iNwr7I/AAAAAAAAAEw/_0qanNeDBDo/s320/bees.jpg" alt="" id="BLOGGER_PHOTO_ID_5271442430761152434" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Wonderful biota in Thailand&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;After my talk I enjoyed the &lt;a href="http://www.eclipsecon.org/summiteurope2008/sessions?id=54"&gt;presentation&lt;/a&gt; of Gilles Iachelini, Marc Hoffmann and Simon Eggler about „Eclipse on Rails: RCP at the Swiss Railway“. It reminded me to an excellent live presentation they gave to me alone on during one of my business trips to Bern, Switzerland. Thank you guys, again! After that I missed the other presentations to have some more discussions on the floors. Dinner, lots of wonderful wine and the chill-out in the Nestor lobby expanded until five in the morning. As a consequence I missed the keynote on Thursday.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SSfs9QUZvTI/AAAAAAAAAEg/1YS-YF2jWpA/s1600-h/alone.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_6Y29iRV9ZvA/SSfs9QUZvTI/AAAAAAAAAEg/1YS-YF2jWpA/s320/alone.jpg" alt="" id="BLOGGER_PHOTO_ID_5271442425957170482" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;What the heck is that?&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://ed-merks.blogspot.com/"&gt;Ed Merks&lt;/a&gt;’ talk about &lt;a href="http://www.eclipsecon.org/summiteurope2008/sessions?id=156"&gt;The Unbearable Stupidity of Modeling&lt;/a&gt; clearly was one of the highlights of the whole summit! I’m glad that I was able to attend it. Many of the other talks that I marked as interesting in my schedule became victims of some more private discussions. The only exception was &lt;a href="http://tom-eclipse-dev.blogspot.com"&gt;Tom Schindl&lt;/a&gt;’s presentation about &lt;a href="http://www.eclipsecon.org/summiteurope2008/sessions?id=48"&gt;Writing Datacentric applications with RCP+EMF+Databinding&lt;/a&gt;. He excited the audience with some really nice design ideas and, last not least, a demonstration of how easy it is to distribute model changes across machine boundaries with CDO. A meeting with some guys from the automotive scene prevented me from having lunch but the results were so promising that I did not care. That’s why I‘m always carrying some chocolate with me. We enjoyed it together.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SSfs9RQ_QmI/AAAAAAAAAEo/gFyNspi0QBE/s1600-h/alone2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SSfs9RQ_QmI/AAAAAAAAAEo/gFyNspi0QBE/s320/alone2.jpg" alt="" id="BLOGGER_PHOTO_ID_5271442426211287650" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Ah, a salesgirl and the wind!&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;As I mentioned earlier I also continued my discussion with Ibrahim about new licensing models for Objectivity’s OO database. They are currently not only exploring ways to provide free developer licenses for API and server runtimes but could also imagine to provide us (the CDO project) with empty skeleton bundles (EPL licensed) to &lt;a href="https://bugs.eclipse.org/250015"&gt;fake p2 at installation time&lt;/a&gt;. I’m really looking forward to see our existing integration with Objectivity as a back-end for CDO model repositories being open sourced in the near future. Unfortunately it appeared that the time ran even faster on Thursday and after a last refreshing beer in the lobby, where most of my Eclipse friends met a last time, I headed towards Stuttgart airport to catch my flight home to &lt;a href="http://en.wikipedia.org/wiki/Berlin"&gt;Berlin&lt;/a&gt;. My luggage arrived with me…&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SSfs88IMrEI/AAAAAAAAAEQ/2x98nBiq0fI/s1600-h/airport-rene.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 292px; height: 320px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SSfs88IMrEI/AAAAAAAAAEQ/2x98nBiq0fI/s320/airport-rene.jpg" alt="" id="BLOGGER_PHOTO_ID_5271442420537273410" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Waiting for the flight back home&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Thank you all for making ESE one of the nicest events in 2008 and see you at &lt;a href="http://www.eclipsecon.org/2009/"&gt;EclipseCon 2009 &lt;/a&gt;in Santa Clara!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-7242352182824500790?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/7242352182824500790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2008/11/being-at-ese-not-in-thailand.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/7242352182824500790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/7242352182824500790'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2008/11/being-at-ese-not-in-thailand.html' title='Being at ESE, not in Thailand...'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_6Y29iRV9ZvA/SSfs9FgkT6I/AAAAAAAAAEY/xSdtahrDsfs/s72-c/airport-small.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-5556240049266491476</id><published>2008-11-02T12:22:00.008+01:00</published><updated>2011-07-13T06:55:14.676+02:00</updated><title type='text'>How safe is a "thread safe" data structure?</title><content type='html'>I think it is obvious that no abstract data type can guarantee that any (non trivial) sequence of invocations is atomic (i.e. not interruptible by other threads using the same instance of the ADT) through mechanisms internal to any ADT implementation. Another good example is the common idiom to insert into a map without replacing:  &lt;pre&gt;  &lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;synchronized &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;map&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;    if &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;!map.containsKey&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"key"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;))&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;    {&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 0);"&gt;map.put&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"key"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"value"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;  As a consequence each public statement about thread-safety of an ADT or one of its implementations is generally only a statement about behaviour of *single invocations* of the public API. But this statement has some value in its own because the client needs to know whether he is expected to protect single invocations as well. Since the JavaDoc of HashMap states that it is not thread-safe clients must protect the following, too, if concurrent access is possible:  &lt;pre&gt; &lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt; synchronized &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;map&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;    map.put&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"key"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"value"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;  Otherwise the map could be internally corrupted. Interesting that in the case of the map ADT there is some special API/implementation couple that solves both problems, internal and to some degree external atomicity. A java.util.concurrent.ConcurrentHashMap guarantees atomicity of single invocations with a possibly higher concurrency than external synchronization. And the ConcurrentMap interface offers the putIfAbsent() operation which executes the "not-containsKey-put" sequence atomically (and even much faster because only one hash lookup is needed!). The following is thread-safe without external synchronization:  &lt;pre&gt;  &lt;span style="color: rgb(0, 0, 0);"&gt;String existingValue = map.putIfAbsent&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"key"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"value"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;  if &lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;existingValue != &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;null&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 127, 95);"&gt;    // New value has not been inserted!&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt; Sometimes we have a situation where two data structures together form a unity in the sense that both of them must be modified at a time or none of them to have a consistent state at any time. An example is a bi-directional mapping. While a ConcurrentMap is a good choice for other mutli-threaded scenarios, we usually don't use them for scenrios where multiple data structures are involved because we need external synchronization anyway.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-8TvWBVAfGik/Th0lElLoN7I/AAAAAAAAAWo/YNreRczAayY/s1600/thread.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 266px;" src="http://2.bp.blogspot.com/-8TvWBVAfGik/Th0lElLoN7I/AAAAAAAAAWo/YNreRczAayY/s400/thread.jpg" alt="" id="BLOGGER_PHOTO_ID_5628695869913577394" border="0" /&gt;&lt;/a&gt;A ConcurrentHashMap allows for higher concurrency than an externally synchronized map but it is more expensive than a completely unsynchronized HashMap. Or in other words, two ConcurrentHashMaps plus external synchronization are much more expensive than two HashMaps with external synchronization.&lt;p&gt;  Apologies for re-iterating stuff that is known to so many already.&lt;br /&gt;It is still Sunday morning...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-5556240049266491476?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/5556240049266491476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2008/11/how-safe-is-thread-safe-data-structure_02.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/5556240049266491476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/5556240049266491476'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2008/11/how-safe-is-thread-safe-data-structure_02.html' title='How safe is a &quot;thread safe&quot; data structure?'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-8TvWBVAfGik/Th0lElLoN7I/AAAAAAAAAWo/YNreRczAayY/s72-c/thread.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824652428103224164.post-7651215062186722113</id><published>2008-11-02T11:14:00.015+01:00</published><updated>2008-11-03T19:27:25.324+01:00</updated><title type='text'>Alexander and the Gordian Knot</title><content type='html'>&lt;div style="text-align: center; font-style: italic;"&gt;'... What glory's due to him that could divide&lt;br /&gt;Such ravelled interests; has the knot untied,&lt;br /&gt;And without stroke so smooth a passage made,&lt;br /&gt;Where craft and malice such impeachments laid?'&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span&gt;                                     &lt;span style="font-size:100%;"&gt;        Edmund Waller ...to the King&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt; &lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SQ28sky8mTI/AAAAAAAAACc/FtT1vEylZFI/s1600-h/alexovalblack.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 147px; height: 200px;" src="http://2.bp.blogspot.com/_6Y29iRV9ZvA/SQ28sky8mTI/AAAAAAAAACc/FtT1vEylZFI/s200/alexovalblack.gif" alt="" id="BLOGGER_PHOTO_ID_5264071013443606834" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 0);font-size:78%;" &gt;Original medallion&lt;/span&gt;&lt;span style="font-style: italic;font-size:78%;" &gt; of Alexander.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Well, when I look outside, this first November Sunday is not so nice. &lt;a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&amp;amp;short_desc_type=allwordssubstr&amp;amp;short_desc=&amp;amp;classification=Modeling&amp;amp;product=EMF&amp;amp;component=CDO&amp;amp;component=Net4j&amp;amp;long_desc_type=allwordssubstr&amp;amp;long_desc=&amp;amp;bug_file_loc_type=allwordssubstr&amp;amp;bug_file_loc=&amp;amp;status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=&amp;amp;keywords_type=allwords&amp;amp;keywords=&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;emailtype1=substring&amp;amp;email1=&amp;amp;emailtype2=substring&amp;amp;email2=&amp;amp;bugidtype=include&amp;amp;bug_id=&amp;amp;votes=&amp;amp;chfieldfrom=&amp;amp;chfieldto=Now&amp;amp;chfieldvalue=&amp;amp;cmdtype=doit&amp;amp;order=Reuse+same+sort+as+last+time&amp;amp;field0-0-0=noop&amp;amp;type0-0-0=noop&amp;amp;value0-0-0="&gt;Bugzilla&lt;/a&gt; is waiting but it is Sunday! Anyway, I read the &lt;a href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.tools.emf"&gt;newsgroup&lt;/a&gt; and found an interesting &lt;a href="http://www.eclipse.org/newsportal/article.php?id=37021&amp;amp;group=eclipse.tools.emf#37021"&gt;post&lt;/a&gt; about a topic I discussed at different occasions with &lt;a href="http://ed-merks.blogspot.com/"&gt;Ed Merks&lt;/a&gt; and other people in the recent past. I looked out of the window and decided to answer. Hold on. I looked again out of the window and said to myself "Is this the moment to start my own blog?". I always thought that I have not much important to tell in the public but then the idea: I solve this problem by declaring "this blog is not intended to tell important things!". Looking at some other blogs this seems to make sense although I know that beauty is not the only thing in the eye of the beholder.&lt;br /&gt;&lt;br /&gt;In the end this blog enables me to pull my name in the public mud myself before others do it. For example Ed recently &lt;a href="http://ed-merks.blogspot.com/2008/10/whats-all-this-fuss-about-modeling.html"&gt;blogged&lt;/a&gt; about my cool, EMF based, model repository framework &lt;a href="http://wiki.eclipse.org/CDO"&gt;CDO&lt;/a&gt; and its relation with the world's financial crisis, as well as some security problems in Microsoft products. On the other hand, given the ten overly productive chinese (is this PC??) locked in Ed's home office, writing all these articles, it is pretty unlikely that I can blame myself for the next disaster much earlier.&lt;br /&gt;&lt;br /&gt;Maybe it is best instead to try writing some posts that are &lt;span style="font-style: italic;"&gt;semi important&lt;/span&gt; at least. I leave that to the eye of the aforementioned beholder, &lt;span style="font-weight: bold;"&gt;you&lt;/span&gt;. Watch out my next article about thread safety...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SQ2K03DaSAI/AAAAAAAAABg/svkaxwv7rfM/s1600-h/knot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 240px;" src="http://1.bp.blogspot.com/_6Y29iRV9ZvA/SQ2K03DaSAI/AAAAAAAAABg/svkaxwv7rfM/s200/knot.png" alt="" id="BLOGGER_PHOTO_ID_5264016180202063874" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;A super nova knot.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Ahh, apologies that I also leave it to you to find a relation between the gordian knot and modern software development, or not. I need to go, the sun comes out, and it is Sunday...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824652428103224164-7651215062186722113?l=thegordian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thegordian.blogspot.com/feeds/7651215062186722113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://thegordian.blogspot.com/2008/11/gordian-knot.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/7651215062186722113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824652428103224164/posts/default/7651215062186722113'/><link rel='alternate' type='text/html' href='http://thegordian.blogspot.com/2008/11/gordian-knot.html' title='Alexander and the Gordian Knot'/><author><name>Eike Stepper</name><uri>http://www.blogger.com/profile/08095163031047060582</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://4.bp.blogspot.com/_6Y29iRV9ZvA/Saa_sFgPCcI/AAAAAAAAAKw/LcbWhvU_edM/S220/Eike2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_6Y29iRV9ZvA/SQ28sky8mTI/AAAAAAAAACc/FtT1vEylZFI/s72-c/alexovalblack.gif' height='72' width='72'/><thr:total>4</thr:total></entry></feed>
