<?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-4243137685413731189</id><updated>2012-02-06T20:50:22.199+01:00</updated><category term='mobile'/><category term='p2'/><category term='jxpath'/><category term='provider'/><category term='installation'/><category term='Allgemein'/><category term='web'/><category term='bug'/><category term='legacy'/><category term='jenkins'/><category term='EMF'/><category term='AppEngine'/><category term='connectbot'/><category term='gwt'/><category term='stammtisch'/><category term='verlagssoftware'/><category term='client-side-caching'/><category term='ecf'/><category term='open source'/><category term='hamburg'/><category term='softskills'/><category term='query'/><category term='equinox'/><category term='motivation'/><category term='webstart'/><category term='job'/><category term='osgi'/><category term='auditing'/><category term='cloudbees'/><category term='buckminster'/><category term='fckeditor'/><category term='vysper'/><category term='spring'/><category term='enterprise'/><category term='installer'/><category term='ci'/><category term='bundlewiring'/><category term='eclipse'/><category term='rich text editor'/><category term='jasper'/><category term='dnd'/><category term='virgo'/><category term='wave'/><category term='learning'/><category term='apache'/><category term='java7'/><category term='i18n'/><category term='hibernate'/><category term='google wave'/><category term='user experience'/><category term='nightlabs'/><category term='eclipsecon'/><category term='java'/><category term='xmpp'/><category term='cloud computing'/><category term='hostloco'/><category term='startup'/><category term='jdo'/><category term='deployment'/><category term='remote'/><category term='client-server'/><category term='migration'/><category term='lucene'/><category term='ssh'/><category term='hudson'/><category term='ese'/><category term='swt'/><category term='envers'/><category term='publishing'/><category term='rcp'/><category term='outlook'/><category term='enterpise applications'/><category term='ui'/><category term='android'/><category term='eiswind'/><category term='build'/><category term='jpa'/><category term='book publishing software'/><category term='coding'/><category term='search'/><category term='buchmanager'/><category term='rich client'/><category term='architecture'/><category term='rap'/><category term='pde'/><category term='onix'/><category term='e4'/><category term='zip'/><category term='jfire'/><title type='text'>Thomas Kratz</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>84</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-4314572278862143973</id><published>2012-01-24T14:24:00.000+01:00</published><updated>2012-01-24T14:24:32.289+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rich text editor'/><category scheme='http://www.blogger.com/atom/ns#' term='fckeditor'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='jfire'/><category scheme='http://www.blogger.com/atom/ns#' term='swt'/><category scheme='http://www.blogger.com/atom/ns#' term='nightlabs'/><title type='text'>Richt Text Editor for Eclipse/SWT</title><content type='html'>I have been looking around, but a feasible Rich Text Editor for SWT seems to be hard to find. I finally came accross the FCKEditor integration from the JFire/Nightlabs guys. They do not promote it, but it works fine for me. I had to grab some dependencies from different repos at nightlabs and make some hacks to make it play nice with the Rest of my app, but it looks stable and works on all platforms (some other editor needs a xulrunner, thats still messy on 64bit platforms) as it uses the Browser widget to render FCKEditor.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-jnpqIi74QII/Tx6whmBxiyI/AAAAAAAADZk/EDFEF4I-GeI/s1600/richtexteditor.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="358" src="http://4.bp.blogspot.com/-jnpqIi74QII/Tx6whmBxiyI/AAAAAAAADZk/EDFEF4I-GeI/s400/richtexteditor.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Customized FCKEditor in an eclipse e4 RCP app.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-4314572278862143973?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/4314572278862143973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=4314572278862143973' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4314572278862143973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4314572278862143973'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2012/01/richt-text-editor-for-eclipseswt.html' title='Richt Text Editor for Eclipse/SWT'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-jnpqIi74QII/Tx6whmBxiyI/AAAAAAAADZk/EDFEF4I-GeI/s72-c/richtexteditor.PNG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-2647302843272608796</id><published>2011-12-27T17:29:00.000+01:00</published><updated>2011-12-27T17:29:11.184+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ci'/><category scheme='http://www.blogger.com/atom/ns#' term='cloudbees'/><category scheme='http://www.blogger.com/atom/ns#' term='jenkins'/><title type='text'>Cloudbees - jenkins build</title><content type='html'>Over the christmas holidays I moved my build from a dedicated server over to the Cloudbees DEV@cloud service. They offer quite an amount of free build minutes to open source projects. They even installed the non-standard buckminster plugin for me on my free account and helped me out with every little problem I had even over the holidays. So now my buckminster build is running @cloud&amp;nbsp;&lt;a href="https://tkratz.ci.cloudbees.com/"&gt;https://tkratz.ci.cloudbees.com/&lt;/a&gt;. Thanks for the great support to everyone@cloudbees.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-2647302843272608796?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/2647302843272608796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=2647302843272608796' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/2647302843272608796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/2647302843272608796'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/12/cloudbees-jenkins-build.html' title='Cloudbees - jenkins build'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-7405892291871737165</id><published>2011-12-24T13:54:00.002+01:00</published><updated>2011-12-24T14:02:48.617+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book publishing software'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Eiswind Open Source Book Publishing Software</title><content type='html'>The english translation of my Open Source Book Publishing Software project is mostly complete now.&lt;br /&gt;It's a perfect alternative for small book publishers, who don't need the big solutions and/or can't afford something like acumen or klopotek. It's written in Java and Groovy, based on Eclipse 4.1, Hibernate, Spring, Lucene and Jackrabbit. If I can find someone who is interested in participating in this project I'm always happy, so don't hesitate to contact me. I made a small demo video showing the core functionalities as of today. Remember this is work in progress. But things like Onix-Messages, Project Workflows, Royalty calculations, Basic CRM are already in production.&lt;br /&gt;You can find more information on&amp;nbsp;&lt;a href="http://www.book-publishing-software.com/"&gt;http://www.book-publishing-software.com&lt;/a&gt;&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://0.gvt0.com/vi/-Fx3JxX0VAw/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-Fx3JxX0VAw&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/-Fx3JxX0VAw&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-7405892291871737165?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/7405892291871737165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=7405892291871737165' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/7405892291871737165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/7405892291871737165'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/12/eiswind-open-source-book-publishing.html' title='Eiswind Open Source Book Publishing Software'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-8140598038737391179</id><published>2011-11-22T17:44:00.001+01:00</published><updated>2011-11-22T17:51:26.121+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipsecon'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>EclipseCon 2011 slides are online</title><content type='html'>My this years EclipseCon Eurpope slides are on slideshare now. Hope that FOSSLLC will upload the recording soon.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.slideshare.net/ThomasKratz/an-eclipse-client-server-architecture-with-asynchronous-messaging"&gt;http://www.slideshare.net/ThomasKratz/an-eclipse-client-server-architecture-with-asynchronous-messaging&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-8140598038737391179?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/8140598038737391179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=8140598038737391179' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8140598038737391179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8140598038737391179'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/11/eclipsecon-2011-slides-are-online.html' title='EclipseCon 2011 slides are online'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-8416732619254408469</id><published>2011-11-18T18:25:00.001+01:00</published><updated>2011-11-18T18:30:09.629+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eiswind'/><category scheme='http://www.blogger.com/atom/ns#' term='motivation'/><title type='text'>The truth about motivation</title><content type='html'>&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://3.gvt0.com/vi/u6XAPnuFjJc/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/u6XAPnuFjJc&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/u6XAPnuFjJc&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;If anyone asks me again, why I'm doing Eiswind Software, I'll send him this video.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-8416732619254408469?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/8416732619254408469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=8416732619254408469' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8416732619254408469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8416732619254408469'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/11/nice-truth-about-motivation.html' title='The truth about motivation'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-8581859662240559131</id><published>2011-10-29T10:38:00.000+02:00</published><updated>2011-11-18T17:36:57.709+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='enterpise applications'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='eiswind'/><title type='text'>Preparing for EclipseCon Europe 2011</title><content type='html'>Today I started preparing my talk for this years EclipseCon Europe. I'll be speaking about parts of the architecture of my project "mango" aka eiswind book publishing software. I'll be showing how I leverage the XMPP protocol together with synchronous services to make my Eclipse e4 based client application responsive and alive. I'll be showing only a handful of slides together with a bunch of code examples on how I manage long running server tasks, how I do some "not so optimistic locking" with the editor lifecycle and some other stuff. The talk will be on friday afternoon and I'm looking forward to meet you there.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-8581859662240559131?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/8581859662240559131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=8581859662240559131' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8581859662240559131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8581859662240559131'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/10/today-i-started-preparing-my-talk-for.html' title='Preparing for EclipseCon Europe 2011'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-3591692181825470135</id><published>2011-08-28T11:50:00.000+02:00</published><updated>2011-11-18T17:33:51.408+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='e4'/><category scheme='http://www.blogger.com/atom/ns#' term='enterpise applications'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='eiswind'/><category scheme='http://www.blogger.com/atom/ns#' term='buchmanager'/><title type='text'>Why I love the DataBinding framework</title><content type='html'>I'm working on an enterprise client server application. In my domain model I use a generic ValueList/Value construction to map all kinds of simple selectable values. Think of it as a customizable enum thats stored in the database backend. It's been a while since I annotated the JPA model with the name of the ValueList wherever a value gets referenced, the main purpose of this was to be able to pre-populate the value fields with the default value from the corresponding list.&lt;br/&gt;&lt;br/&gt;&lt;code&gt;@JoinColumn(name = "origin_id")&lt;br/&gt;	@ValueListName(name = ValueListNames.PERSONORIGIN)&lt;br/&gt;	@ManyToOne(optional = true)&lt;br/&gt;	public Value getOrigin() {&lt;br/&gt;		return this.origin;&lt;br/&gt;	}&lt;/code&gt;&lt;br/&gt;&lt;br/&gt;Yesterday I created a new feature that enables the user to edit the values of the list whenever he clicks on a Combo and then hits F1. The solution is quite straightforward.&lt;br/&gt;&lt;br/&gt;In the Command Handler for the key &lt;br/&gt;&lt;br/&gt;- I ask the display for the focus control&lt;br/&gt;- I ask the active part for its DataBindingContext&lt;br/&gt;- I search the Context for the proper binding of the focus control&lt;br/&gt;- I ask the binding for its model element&lt;br/&gt;- I ask the model element wether it has an annotated ValueList name&lt;br/&gt;- if so, I open the Edit Dialog for the correct ValueList&lt;br/&gt;&lt;br/&gt;That's true DRY I think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-3591692181825470135?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/3591692181825470135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=3591692181825470135' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3591692181825470135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3591692181825470135'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/08/im-working-on-enterprise-client-server.html' title='Why I love the DataBinding framework'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-3114888298391381732</id><published>2011-06-23T15:13:00.000+02:00</published><updated>2011-11-18T17:33:51.395+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='e4'/><category scheme='http://www.blogger.com/atom/ns#' term='enterpise applications'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>It's release time. First e4 based version is out.</title><content type='html'>Actually our latest &lt;a href="http://www.buchmanager.com"&gt;Buchmanager 1.8.0&lt;/a&gt; release is based on the M7 milestone of the 4.1 Eclipse SDK. Looking at my posts I saw that I had the first launch of our 3.x based code on the 4.1 platform back in November 2010. So let's say it took me half a year to make it work. The e4 team did a great job and really took care of all the bugs I reported, they even invented new gem features for me (for e.g. opening a ViewPart in the shared area) which caused even more bugs to haunt. Half a year is not the whole truth, of course I did implement new features too.&lt;br/&gt;&lt;br/&gt;First reaction of our beta testers was: Fresh and polished UI. They really like it.&lt;br/&gt;&lt;br/&gt;That's what the users see. To me it was taking my existing application over to the new platform without any changes in the existing code and getting all the bright new stuff from the e4 application platform.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-3114888298391381732?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/3114888298391381732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=3114888298391381732' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3114888298391381732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3114888298391381732'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/06/actually-our-latest-buchmanager-1.html' title='It&amp;#39;s release time. First e4 based version is out.'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-8415342505249662469</id><published>2011-06-13T17:26:00.000+02:00</published><updated>2011-11-18T17:33:51.418+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='e4'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Placing a ViewPart in the EditorArea</title><content type='html'>Thanks to tedious investigation and &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=342366"&gt;great support&lt;/a&gt; from &lt;a href="http://blog.hantsuki.org/"&gt;Remy&lt;/a&gt; I managed to open a 3.x ViewPart in the shared area with the compat layer on e4. Just use ...editorss and relation="stack" for your contribution as you would do with any other location. But beware that this won't be backward compatible anymore.&lt;br/&gt;&lt;br/&gt;This gave me the possibility to rethink my whole UI structure without having to change a line of code, just some changes in the contributions. &lt;br/&gt;&lt;br/&gt;Btw the compat layer is great, it truly makes sense to me to move to the e4 platform with any RCP product you may have and then incrementally make use of the new features. The e4 people managed to make our investment safe for the future of eclipse.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-8415342505249662469?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/8415342505249662469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=8415342505249662469' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8415342505249662469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8415342505249662469'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/06/thanks-to-tedious-investigation-and.html' title='Placing a ViewPart in the EditorArea'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-1658227271801260109</id><published>2011-05-29T11:24:00.000+02:00</published><updated>2011-11-18T17:33:51.381+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Allgemein'/><title type='text'>Startup Weekend Hamburg, hype</title><content type='html'>As I posted before I attended the Hamburg startup weekend. I did a pitch, but of course my project doesn't appear sexy to the crowd. At least I got a handfull of votes. These days everyone wants a new Facebook or at least quick money from a cheap website. But at least  I met some friendly people and made one or two contacts. What I found amusing was all those business people around there that were hoping to find a developer for free. Funny. My team of course didn't even come on sunday morning, so I did some networking and went back home. All in all I had some good moments, but the excitement and hype around these events is truly overrated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-1658227271801260109?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/1658227271801260109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=1658227271801260109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/1658227271801260109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/1658227271801260109'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/05/as-i-posted-before-i-attended-hamburg.html' title='Startup Weekend Hamburg, hype'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-2309763990376376528</id><published>2011-05-27T15:41:00.000+02:00</published><updated>2011-11-18T17:33:51.388+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Allgemein'/><title type='text'>Up in the cloud - Trying Amazon EC2</title><content type='html'>Yesterday I deployed our osgi server process to an amazon ec2 micro instance. It was quite easy, but I had to get used to converting the ssh key for putty, using yum to install things, and notice the difference between stop and terminate an instance. terminate will painfully delete the instance ... as you can get a micro instance for free now this is something to play with. I have to calculate if this is an option for our SaaS offerings as the amazon prizing model is somehow complicated. Next time I'll give Azure a try.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-2309763990376376528?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/2309763990376376528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=2309763990376376528' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/2309763990376376528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/2309763990376376528'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/05/yesterday-i-deployed-our-osgi-server.html' title='Up in the cloud - Trying Amazon EC2'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-7933075155156189977</id><published>2011-05-26T14:49:00.000+02:00</published><updated>2011-11-18T17:33:51.414+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='enterpise applications'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='eiswind'/><category scheme='http://www.blogger.com/atom/ns#' term='hamburg'/><title type='text'>Startup Weekend Hamburg</title><content type='html'>I'll be presenting my low-budget commercial Eclipse project tommorow at the Hamburg startupweekend. I wonder if I will find some support :) If your not attending another chance to meet is at the Democamp on June 28th in Hamburg where I'll be talking about eclipse enterprise deployment scenarios with virgo and p2 technologies.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-7933075155156189977?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/7933075155156189977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=7933075155156189977' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/7933075155156189977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/7933075155156189977'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/05/ill-be-presenting-my-low-budget.html' title='Startup Weekend Hamburg'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-7441802286660187463</id><published>2011-05-24T16:05:00.000+02:00</published><updated>2011-11-18T17:33:51.411+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hostloco'/><category scheme='http://www.blogger.com/atom/ns#' term='provider'/><title type='text'>Hostloco: bad experiences</title><content type='html'>I had my server hosted at hostloco for many years, they had a friendly support based in teneriffa and everything was fine, they were cheap and I had been happy. But over the last years it seems that many of the former people have left hostloco and support quality was damn bad, if not existant at all. They have moved to germany in the meantime, which means that they didn't even notice my termination of my contract. It took me two months of sending email (don't try to call the expensive support line, they won't answer most of the time and you pay for the waiting line) to get out of the contract. I registered for the forum but my registration was never acknowledged. I tried everything.&lt;br/&gt;&lt;br/&gt;So my only advice can be if you're looking for a hoster don't go to hostloco.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-7441802286660187463?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/7441802286660187463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=7441802286660187463' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/7441802286660187463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/7441802286660187463'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/05/i-had-my-server-hosted-at-hostloco-for.html' title='Hostloco: bad experiences'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-3886393497754003633</id><published>2011-05-22T16:38:00.001+02:00</published><updated>2011-05-22T16:42:42.432+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='bundlewiring'/><title type='text'>Classpath scanning with Equinox OSGi</title><content type='html'>Today I moved some code to OSGi that heavily relies on Classpath scanning.&lt;br /&gt;There's a new API in BundleWiring that lets you scan for resources:&lt;br /&gt;&lt;blockquote&gt;BundleWiring wiring = ctx.getBundle().adapt(BundleWiring.class);&lt;/blockquote&gt;&lt;blockquote&gt;Collection&amp;lt;String&amp;gt; resources= wiring.listResources(DOMAIN,"*.class",BundleWiring.LISTRESOURCES_LOCAL);&lt;/blockquote&gt;Unfortunately due to a &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=345743"&gt;bug in NestedBundleDir&lt;/a&gt; you need CVS HEAD from the osgi bundle to make this work inside the IDE. It will be fixed in 3.7 RC2.&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-3886393497754003633?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/3886393497754003633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=3886393497754003633' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3886393497754003633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3886393497754003633'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/05/classpath-scanning-with-equinox-osgi.html' title='Classpath scanning with Equinox OSGi'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-3814499265728859528</id><published>2011-05-16T11:47:00.000+02:00</published><updated>2011-05-16T11:47:40.833+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='buckminster'/><title type='text'>Hudson/Buckminster build: How could I live without?</title><content type='html'>Over the last couple of days I set up a Hudson/Buckminster build for my app. I startet with Ralf Eberts &lt;a href="http://www.ralfebert.de/blog/eclipsercp/rcp_builds/"&gt;Tutorial&lt;/a&gt;&amp;nbsp;which is a good starting point. &amp;nbsp;I made some changes and check out only the main feature with hudson and then leave the rest up to buckminster. So I don't have to fiddle with the hudson configuration when my plug-set changes. Just add to feature xml and buckminster will pick it up from svn.&lt;br /&gt;&lt;br /&gt;For the client I just build a p2 repo, thats used by my webstart-installer to get the client on the users machines. For the server theres some more stuff todo, build the osgi platform, build the monitoring process, finally build a custom installer (based on izpack) that expands the platform and installs the server platform dependently as as service (with yajsw) on the machine.&lt;br /&gt;&lt;br /&gt;I love this thing, don't know how I could ever make without it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-3814499265728859528?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/3814499265728859528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=3814499265728859528' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3814499265728859528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3814499265728859528'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/05/hudsonbuckminster-build-how-could-i.html' title='Hudson/Buckminster build: How could I live without?'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-947148479575917421</id><published>2011-04-27T16:19:00.000+02:00</published><updated>2011-04-27T16:19:59.427+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='buckminster'/><title type='text'>Reproducible builds - best practises?</title><content type='html'>Today I'm once again asking for comments. I just started to set up a hudson/buckminster build for my app. (Server is already building Successfully, client has to follow).&lt;br /&gt;&lt;br /&gt;I wanted to have a reproducible build, and most of the time I'm building against a slightly patched e4 Milestone. So my target platform is a moving target over time. For now I decided to have my target platform versioned in svn so that I can reproduce the build for sure. (Kind of tricky to get buckminster to resolve it painlessly with the same target definition I use in eclipse)&lt;br /&gt;&lt;br /&gt;How do you archive your target platforms when they change?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-947148479575917421?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/947148479575917421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=947148479575917421' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/947148479575917421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/947148479575917421'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/04/reproducible-builds-best-practises.html' title='Reproducible builds - best practises?'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-5285529066566731736</id><published>2011-04-12T10:18:00.001+02:00</published><updated>2011-04-12T10:19:44.427+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jxpath'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><title type='text'>Buchmanager: Search and Replace with JXPath on complex objects</title><content type='html'>I have been working on the e4 migration for a while, it's still not completely done. But as time goes by I'm starting to implement some new features for the next release.&lt;br /&gt;&lt;br /&gt;One of them will be a serach and replace functionality on complex object graphs. To make this somehow userfriendly I use jxpath to access my object graphs. I put a flat fieldname/xpath mapping thats not visible to the user in the backend. Users can select from the fieldnames and Then I iterate over the xpath expression to do the actual search and replace on my entities. Thats quite expensive as hiberante has to load o lot off stuff from the database, but with a little client side progress bar it's not as evil as I expected it to be. I can do a replace on 1000 entites in less than 30 seconds, that seems acceptable as it's not used every day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-5285529066566731736?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/5285529066566731736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=5285529066566731736' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/5285529066566731736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/5285529066566731736'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/04/buchmanager-search-and-replace-with.html' title='Buchmanager: Search and Replace with JXPath on complex objects'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-1661836784314273728</id><published>2011-03-27T11:32:00.001+02:00</published><updated>2011-03-27T11:33:06.080+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='e4'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>It's a joy sending bugs to the e4 team</title><content type='html'>Today I don't want to rant :) I have been porting my RCP app to the e4 compat layer in the last few months. I didn't implement many new features but I started to open some bugs for things that I either didn't understand or that simply didn't work for me on the e4 compat layer. I found some really friendly people responding (special thanks to Remy) and as of today all of my important issues got fixed. I'll be on customer site this week for some new features to come, but I'm really looking forward to have my next release built on the e4 platform.&lt;br /&gt;&lt;br /&gt;Thanks to all of you who took care of my problems and those that are to come!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-1661836784314273728?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/1661836784314273728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=1661836784314273728' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/1661836784314273728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/1661836784314273728'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/03/its-joy-sending-bugs-to-e4-team.html' title='It&apos;s a joy sending bugs to the e4 team'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-4858333080401599267</id><published>2011-02-25T14:10:00.000+01:00</published><updated>2011-02-25T14:10:18.226+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='user experience'/><category scheme='http://www.blogger.com/atom/ns#' term='rcp'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Perspectives and the "average computer user"</title><content type='html'>Last week I had one potential new customer at my side and we talked a little about a possible migration path for his business processes. But a lot of his time the elder one of the three was complaining about our product beeing complicated in terms of useability. And yes he is right. Being used to the Microsoft ribbons nowadays, how should one find --without further explanation-- why to "open a perspective" or that behind the little arrow in the view resides a complete menu.&lt;br /&gt;&lt;br /&gt;So to bring in some constructiveness in this meeting, I decided to get rid of perspectives at all and instead bring some more dynamics into my menus. Currently I'm working out with the e4 team to open a view inside the editorArea, when this work is done I think I can provide an app "without" the fabulous Perpective switcher, that confuses most of the users at their fist experiences.&lt;br /&gt;&lt;br /&gt;And if one day far away menus get too complicated, maybe I'll introduce a ribbon, too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-4858333080401599267?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/4858333080401599267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=4858333080401599267' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4858333080401599267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4858333080401599267'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/02/perspectives-and-average-computer-user.html' title='Perspectives and the &quot;average computer user&quot;'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-8440003083724403520</id><published>2011-01-29T17:08:00.002+01:00</published><updated>2011-01-29T17:18:18.719+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='webstart'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='installer'/><title type='text'>Building a web-startable cross-platform p2-installer</title><content type='html'>Have you ever had trouble with your customers downloading the wrong version of your eclipse product to their box? We had always trouble with 64bit windows with 32bit Java installed, no one can expect from customers to know what java version they have installed.&lt;br /&gt;&lt;br /&gt;So today I started off with a slighty customized version of the standard eclipse p2 installer. I got the 3.6.1 maintenance branch from the cvs repo, as current head doesn't compile against the 3.6 platform. I removed the shared install options, as they only would confuse users.&lt;br /&gt;&lt;br /&gt;The idea was to webstart the installer to give users an as easy as possible download experience. But the built-in mechanisms of eclipse give us some tedious manual work to do to build such a thing.&lt;br /&gt;&lt;br /&gt;First I created a feature containing all the plugins necessary to run the p2 installer, and added all the other platform plugins that are needed to support mac and both windows platforms. (We do not support linux by know, but that should be straightforward). One has to set the platform properties of the platform dependend plugins in the feature manifest manually, a task I always forget until I try to run the build.&lt;br /&gt;&lt;br /&gt;Then change the p2 installer product configuration to be based on features and add you newly created feature. Create a keystore if you do not already have one and follow the instructions from the eclipse help to create a webstartable application.&lt;br /&gt;&lt;br /&gt;Unfortunately the webstart export does not support multiple platform export, however if you have included the platform dependent plugins, you will find them in your feature.jnlp file, but with all version attributes set to 0.0.0&lt;br /&gt;&lt;br /&gt;Now do a second export of the feature, uncheck the JNLP creation option and export for multiple platforms. Leave the signing option on as we need signed jar files for webstart. Copy all the exported, platform dependend plugins from the export to you webstartable plugins folder. (You could get them from the delta pack as well, but then they wouldn't be signed with your key). Now the tedious work: replace the jar file path with version 0.0.0 in your feature jnlp wit the correct paths to your added plugins. The platform and architecture selection in the jnlp will already be there.&lt;br /&gt;&lt;br /&gt;To make the p2 installer work via webstart we need to do a third export. This time export the product for you main platform only and get the configuration directory from the export, copy it to the root folder of your webstartable export (simpleconfigurator needs a config file from there thats not included in the jnlp export).&lt;br /&gt;&lt;br /&gt;Set up your main jnlp file as suggested in eclipse help and add some properties for the p2 installer:&lt;br /&gt;&amp;lt;property name="org.eclipse.equinox.simpleconfigurator.configUrl" value="http://&lt;i&gt;yourwebstarthostpath&lt;/i&gt;/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info"/&amp;gt;&lt;br /&gt;&amp;lt;property name="org.eclipse.equinox.p2.installDescription" value="http://&lt;i&gt;yourwebstarthostpath&lt;/i&gt;/installer.properties"/&amp;gt;&lt;br /&gt;&lt;br /&gt;Don't forget to add your customized installer.properties file. Now upload this to your webserver and voila, we have a platform independent installation experience for our product.&lt;br /&gt;&lt;br /&gt;Don't mind to ask if you run into any troubles. Getting the jnlp files work properly is sometimes confusing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-8440003083724403520?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/8440003083724403520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=8440003083724403520' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8440003083724403520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8440003083724403520'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/01/building-web-startable-cross-platform.html' title='Building a web-startable cross-platform p2-installer'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-7975977414231952281</id><published>2011-01-14T14:26:00.001+01:00</published><updated>2011-01-14T14:27:20.033+01:00</updated><title type='text'>Maxi isn't here anymore.</title><content type='html'>On Wednesday he has left us forever.&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/BsERpkzJSx8/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/BsERpkzJSx8?f=videos&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/BsERpkzJSx8?f=videos&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 class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-7975977414231952281?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/7975977414231952281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=7975977414231952281' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/7975977414231952281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/7975977414231952281'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/01/maxi-has-gone.html' title='Maxi isn&apos;t here anymore.'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-5562784715980390488</id><published>2011-01-02T13:22:00.000+01:00</published><updated>2011-01-02T13:22:50.200+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='e4'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>E4 not ready for production?</title><content type='html'>I spent some time experimenting with technology, including virgo and e4 as a platform for my project over the last couple of months. Building a new release yesterday I had to step back on Eclipse 3.6 because of some small but annoying issues with the compatibility layer on e4. There where still some problems with the workbench selection and the visibility to toolbar/menu contributions. However I have to say that the e4 team was "mostly always" glad seeing me open some new bugs I found, but all in all I decided not to deliver on the new platform and give it some more time to become mature. But at least I included the e4 styling engine to give me some control over fonts. I use lots of UI Forms and I found it not easy to get a good color styling, but I guess I've read thats out of scope for the styling eninge, bad for me. Still have to open another bug for the splash handlers that don't seem to work on e4, but I guess that will not be the most important one to fix :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-5562784715980390488?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/5562784715980390488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=5562784715980390488' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/5562784715980390488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/5562784715980390488'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2011/01/e4-not-ready-for-production.html' title='E4 not ready for production?'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-8202215001500580250</id><published>2010-11-06T13:43:00.002+01:00</published><updated>2011-02-25T14:12:26.269+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rcp'/><category scheme='http://www.blogger.com/atom/ns#' term='e4'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='legacy'/><title type='text'>Uhh we have color: Running a legacy app on eclipse e4</title><content type='html'>I came back from ESE with lots of inspiration. So I couldn't stop and had to try our RCP application on e4 for the first time.&lt;br /&gt;&lt;br /&gt;I had a little fight in getting everything up, the e4 sources are missing in the M3 download (theres a bug for that) and you have to install the tooling seperately. So I just pointed e4 to my workspace, switched the target platform and tried to launch. Oh, yes now we need an application model.&lt;br /&gt;&lt;br /&gt;Setting up the application model for a legacy app seems to be not well documented, I didn't know at all what elements I would need as I was starting from zero. So I had a look at the example e4 app and stripped down the e4xmi to my needs.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;?xml version="1.0" encoding="ASCII"?&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;application:Application xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:advanced="http://www.eclipse.org/ui/2010/UIModel/application/ui/advanced" xmlns:application="http://www.eclipse.org/ui/2010/UIModel/application" xmlns:basic="http://www.eclipse.org/ui/2010/UIModel/application/ui/basic" xmlns:menu="http://www.eclipse.org/ui/2010/UIModel/application/ui/menu" xmi:id="_lYit4OjtEd-nIcCsQMihjw" elementId="de.eiswind.mango.client"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;children xsi:type="basic:TrimmedWindow" xmi:id="_lWJrwOjuEd-nIcCsQMihjw" elementId="de.eiswind.mango.client.mainWindow" label="Buchmanager" iconURI="platform:/plugin/de.eiswind.mango.client.core/icons/mango.gif" width="1024" height="768"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;children xsi:type="advanced:PerspectiveStack" xmi:id="_bXMvVejuEd-nIcCsQMihjw"/&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;mainMenu xmi:id="_xpyAkOjuEd-nIcCsQMihjw" elementId="menu:org.eclipse.ui.main.menu"/&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;trimBars xmi:id="_CnxywOjvEd-nIcCsQMihjw"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;children xsi:type="menu:ToolBar" xmi:id="_DF-xsOjvEd-nIcCsQMihjw" elementId="toolbar:org.eclipse.ui.main.toolbar"/&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/trimBars&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/children&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;addons elementId="MinMax Addon" contributionURI="platform:/plugin/org.eclipse.e4.ui.workbench.addons.swt/org.eclipse.e4.ui.workbench.addons.minmax.MinMaxAddon"/&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;addons elementId="DnD Addon" contributionURI="platform:/plugin/org.eclipse.e4.ui.workbench.addons.swt/org.eclipse.e4.ui.workbench.addons.dndaddon.DnDAddon"/&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;addons elementId="Cleanup Addon" contributionURI="platform:/plugin/org.eclipse.e4.ui.workbench.addons.swt/org.eclipse.e4.ui.workbench.addons.cleanupaddon.CleanupAddon"/&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;/application:Application&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;--27.02.2011 this xmi is a little buggy. Try the LegacyIDe.e4xmi from the platform plugin instead.&lt;br /&gt;&lt;br /&gt;You basically need a menu and toolbar hook, and a perspective stack. the addons are needed to get the usual behaviour on views and editors for resizing.&lt;br /&gt;&lt;br /&gt;Some things didn't work from scratch with my perpectives, but I received patches in almost no time when I reported the bugs to the e4 team. Still one issue open, but I think that will get fixed soon, too.&lt;br /&gt;&lt;br /&gt;Finally I stole some eclipse css file and added the theme extension point to my app.&lt;br /&gt;So now my app looks a little more "sexy" in terms of colors and styling. I could get used to it.&lt;br /&gt;&lt;br /&gt;Did I mention that I didn't change a single line of the 3.6 based code ? The compatibility is great.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_9I62B4X3fK0/TNVK5w7X9uI/AAAAAAAACI0/tsK_jz0qDKI/s1600/bmone4.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://2.bp.blogspot.com/_9I62B4X3fK0/TNVK5w7X9uI/AAAAAAAACI0/tsK_jz0qDKI/s640/bmone4.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-8202215001500580250?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/8202215001500580250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=8202215001500580250' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8202215001500580250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8202215001500580250'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/11/uhh-we-have-color-running-legacy-app-on.html' title='Uhh we have color: Running a legacy app on eclipse e4'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_9I62B4X3fK0/TNVK5w7X9uI/AAAAAAAACI0/tsK_jz0qDKI/s72-c/bmone4.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-1693566328560688202</id><published>2010-11-01T18:12:00.005+01:00</published><updated>2010-11-02T08:56:54.757+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='virgo'/><title type='text'>Porting to virgo - seeing some light</title><content type='html'>Some weeks ago I started some experimental stuff and tried to port our server to Eclipse Virgo. The code was based on spring configuration mainly, so I thought that I should be able to handle this.&lt;br /&gt;&lt;br /&gt;Today I can connect with the client and most services are working fine. But if it has one drawback, it is that I had to build most of the library bundles on my own. And we use a hell of a lot of libraries. Hibernate is still not really OSGi-friendly as are other frameworks. Today a had a fight with JasperReports, which used to cause some headache even without OSGi, but with some drawbacks I finally can run our reports on virgo now.&lt;br /&gt;&lt;br /&gt;I still must have an evil jar that wants org.apache.xerces as default instead of com.sun.org... I thought I had removed all the xerces jars that come with frameworks here and there, and I cannot see what I have overseen today. I made my way round by setting system properties to the jre implementation which luckily made it work. (I needed at least a simple succes today)&lt;br /&gt;&lt;br /&gt;Setting up the bundles correctly caused me some headaches over the last weeks. I had the hell of ExtendedClassNotFoundException, learned a lot about who is using whom in my jars. Some things appaered a little surprising to me as I had to import javax.sql for example in many bundles. I would have guessed that those jre packages are visible by default. But maybe someone explains the reason for this to me one day.&lt;br /&gt;&lt;br /&gt;One thing that still annoys me is that virgo tooling for eclipse doesn't support PDE bundles. So I have the PDE and the Spring bundle project nature on some of my shared bundles (i.e. bundles that client and server need both for communication) which is really painful and error prone. Kai Toedter opened an enhancement request on this today.&lt;br /&gt;&lt;br /&gt;But all in all its working, still have to do some refactorings on formerly static code that used to be called from main, but its not to far to go. Did not find a true showstopper up to now. When all is done I need to work out a proper Installer that will migrate an exisiting configuration into virgo, but that seems to be not to complicated as virgo con pick up existing property files when I put them in the repo.&lt;br /&gt;&lt;br /&gt;Now for today I have two different versions of lucene running in parallel, next step I could throw in a current poi instead of that one jasper report uses.&lt;br /&gt;&lt;br /&gt;But most of all I'm looking forward to the ease of deployment on my customers sites in the near future. The day they all will have virgo installed, upgrading the whole thing will simply mean uploading a new release to central virgo and p2 repositories. I still have to think my way to the strategy (what about errors on schema upgrades ? I see them at least at one customer at each new release, customer have data you can't think of in advance) but all in all I'm very happy about that.&lt;br /&gt;&lt;br /&gt;I'll be talking about the update scenario in detail at ESE on Wednesday afternoon, so come and talk to me if this is something you are into !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-1693566328560688202?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/1693566328560688202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=1693566328560688202' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/1693566328560688202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/1693566328560688202'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/11/porting-to-virgo-seeing-some-light.html' title='Porting to virgo - seeing some light'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-1774135797716037632</id><published>2010-10-22T14:51:00.001+02:00</published><updated>2010-10-22T15:05:24.349+02:00</updated><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='cloud computing'/><title type='text'>What if we had EMF persistence on Datanucleus</title><content type='html'>One thing that keeps me away from EMF is that I'm so used to hibernate persistence and good old java beans. You may rant on that. But I have a look at Teneo and CDO from time to time, things keep getting better.&lt;br /&gt;&lt;br /&gt;But think of if we had something like CDO running on Datanucleus ? It will give us the power we need for EMF in the cloud. Theres support for googles app engine and the new VMForce PAAS will be running Datanucleus to. I would defintively be thinking about using VMForce if I had a EMF persistence solution like CDO running inside.&lt;br /&gt;&lt;br /&gt;If I only had more time... Maybe theres something like this out there and I just haven't heard of it ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-1774135797716037632?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/1774135797716037632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=1774135797716037632' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/1774135797716037632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/1774135797716037632'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/10/what-if-we-had-emf-persistence-on.html' title='What if we had EMF persistence on Datanucleus'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-312502633245107467</id><published>2010-10-15T11:23:00.001+02:00</published><updated>2010-10-15T11:25:37.273+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>Technology implications on architecture and design</title><content type='html'>I have been in love with eclipse for a while because I love the architecture and I got used to the productiveness working on the platform.&lt;br /&gt;&lt;br /&gt;I remember coaching an architect on RCP technology a while ago. He had several ideas what he wanted to do, came up with UI wireframe sketches and asked me how to do this and that. From his sketches I guessed that he had no idea about the technology he was going to use. He wanted to have widgets that don't exists in SWT/JFace and many other things I refuse to remember exactly.&lt;br /&gt;&lt;br /&gt;Thats what I so often hated : Having no clue about technology, paying big money for a consultant to solve their problems.&lt;br /&gt;&lt;br /&gt;Technology has always implications on architecture and design of an application. But so many times those who decide on technology don't have a clue about what they're deciding on.&lt;br /&gt;&lt;br /&gt;If you don't have someone with a "masters degree" in mastering your technology keep away from it.&lt;br /&gt;&lt;br /&gt;I see so many projects suffering from code and architecture smells simply because a lack of mastership.&lt;br /&gt;&lt;br /&gt;As Ed Merks told me: Never stop striving for leadership and quality.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-312502633245107467?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/312502633245107467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=312502633245107467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/312502633245107467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/312502633245107467'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/10/technology-implications-on-architecture.html' title='Technology implications on architecture and design'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-3281929132481697891</id><published>2010-10-10T19:08:00.002+02:00</published><updated>2010-10-10T19:36:35.117+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='virgo'/><title type='text'>First hops on Eclipse Virgo</title><content type='html'>My server has alwas been a monolith with an embedded jetty, mostly configured with spring and a whole bunch of libraries, hibernate, jackrabbit, embedded derby, jasperreports and so on. tons of jars to handle.&lt;br /&gt;&lt;br /&gt;For a long time I wished I had chosen OSGi from the beginning, but now came the new hibernate search release that depends on a late lucene version that will be supported by jackrabbit sometime but not now. So no time to wait, OSGi I'm coming. Sick of the jar hell I thought about setting up my own OSGi runtime with equinox and jetty, but why build your own when there is virgo (aka Spring dm Server) available.&lt;br /&gt;&lt;br /&gt;So as always after weeks of thinking, making migration plans for the existing server installations in my head, I downloaded virgo on friday night for the first time. I tried the sample to get at least a grip and started to build some library bundles (tried to keep it simple, so mostly large bundles) and copied my sources into some new folders that would be easy to kick if I won't succeed.&lt;br /&gt;&lt;br /&gt;First I had to step back on Galilieo, as the Spring Tools Suite builds for Helios gave me the hell of errors and error dialogs popping all the way up. Back on Galilieo I found that I have to get a milestone build of the tools suit to get support for virgo. Getting used to the tooling... The Spring tools hold the Bundle Manifest in the src folder, which is a pain as i have to share one bundle with my RCP client the as used from PDE tooling has META-INF in the project root. Some folks already complained about that. Its really a pain.&lt;br /&gt;&lt;br /&gt;Now I could get used to develop the server on Galileo, what means I have to do client development in a different eclipse instance as I depend on 3.6 for the p2 hell of changes that have been going on.&lt;br /&gt;&lt;br /&gt;After about 20 aching hours of fixing import and export bundle headers and a truly sleepless night I saw Virgo at least trying to launch my server.&lt;br /&gt;&lt;br /&gt;Now I am still fighting to run hibernate. I had to make some hacks on virgos manifests to install jpa2 and I had to install spring 3.0.4 as 3.0.0 that comes with virgo has some bugs regarding JPA2 and hibernate. I opened some forum threads today and I hope that I can get some useful input on classloading issues.&lt;br /&gt;&lt;br /&gt;I see some light today.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-3281929132481697891?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/3281929132481697891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=3281929132481697891' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3281929132481697891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3281929132481697891'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/10/first-hops-on-eclipse-virgo.html' title='First hops on Eclipse Virgo'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-5510849546943781415</id><published>2010-10-04T18:50:00.000+02:00</published><updated>2010-10-04T18:50:50.730+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><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='AppEngine'/><title type='text'>EMF and GWT in the Cloud</title><content type='html'>Thanks to &amp;nbsp;&lt;a href="http://ed-merks.blogspot.com/2010/10/eclipse-modeling-smith-for-cloud.html"&gt;Ed Merks&lt;/a&gt;&amp;nbsp;who pointed me to&amp;nbsp;&lt;a href="http://wiki.eclipse.org/EMF/GWT"&gt;http://wiki.eclipse.org/EMF/GWT&lt;/a&gt;&amp;nbsp;today.&lt;br /&gt;I just had to try this and lets say I am overwhelmed. This is what you need for GWT development, I will forget about JPA and DTO's.&lt;br /&gt;&lt;br /&gt;Just had to re-post as its simply the thing I always missed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-5510849546943781415?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/5510849546943781415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=5510849546943781415' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/5510849546943781415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/5510849546943781415'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/10/emf-and-gwt-in-cloud.html' title='EMF and GWT in the Cloud'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-5718700096876667628</id><published>2010-09-22T11:03:00.000+02:00</published><updated>2010-09-22T11:03:34.833+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eiswind'/><category scheme='http://www.blogger.com/atom/ns#' term='publishing'/><title type='text'>Announcing Eiswind Publishing Software</title><content type='html'>We are currently working on the internationalization of our eclipse-based software for publishing companies. A fully internationalized release will be available in Q4/2010, you can already find some information online on our new site &lt;a href="http://www.eiswind-publishing.com/"&gt;Eiswind Publishing Software&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-5718700096876667628?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/5718700096876667628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=5718700096876667628' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/5718700096876667628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/5718700096876667628'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/09/announcing-eiswind-publishing-software.html' title='Announcing Eiswind Publishing Software'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-3445089927212531762</id><published>2010-09-19T12:15:00.003+02:00</published><updated>2010-09-19T12:16:09.887+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='i18n'/><category scheme='http://www.blogger.com/atom/ns#' term='jasper'/><title type='text'>Loading ResourceBundles with Jasper Reports - MissingResourceException</title><content type='html'>If you stumbled across a MissingResourceException while internationalizing your Jasper Report (I had the heck of a time with it) try constructing an URLClassloader that points to the dir of your resource files and pass that Classloader by parameter to the report. Everything is fine now :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-3445089927212531762?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/3445089927212531762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=3445089927212531762' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3445089927212531762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3445089927212531762'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/09/loading-resourcebundles-with-jasper.html' title='Loading ResourceBundles with Jasper Reports - MissingResourceException'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-2999392164256408508</id><published>2010-09-14T14:17:00.001+02:00</published><updated>2010-09-14T14:18:10.449+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ese'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>My p2 - talk for ESE has been accepted</title><content type='html'>&lt;a href="http://bit.ly/bzlYvh" rel="nofollow" target="_blank"&gt;http://bit.ly/bzlYvh&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.eclipsesummit.org/"&gt;&lt;img alt="I'm speaking at Eclipse Summit Europe 2010" border="0" height="100" src="http://www.eclipsecon.org/summiteurope2010/static/image/friends/100x100_speaking.gif" width="100" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;h6 class="uiStreamMessage"&gt;&amp;nbsp;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-2999392164256408508?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/2999392164256408508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=2999392164256408508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/2999392164256408508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/2999392164256408508'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/09/my-p2-talk-for-ese-has-been-accepted.html' title='My p2 - talk for ESE has been accepted'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-6991057352234011617</id><published>2010-08-31T09:13:00.000+02:00</published><updated>2010-08-31T09:13:33.240+02:00</updated><title type='text'>Building websites with Joomla</title><content type='html'>I'm a software engineer, not a web designer. But I found it quite easy to build two websites with&amp;nbsp;&lt;a href="http://www.joomla.org/"&gt;Joomla&lt;/a&gt;&amp;nbsp;last week. So to say I used an open template with some modifications, PHP is easy to understand I guess. Only to magae these css styles for the joomla template made me sick sometimes. The sites are both german, if you want to have a look go to:&lt;br /&gt;&lt;a href="http://www.eiswind.de/"&gt;Eiswind Software&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.buchmanager.com/"&gt;Buchmanager Verlagssoftware&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-6991057352234011617?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/6991057352234011617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=6991057352234011617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/6991057352234011617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/6991057352234011617'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/08/building-websites-with-joomla.html' title='Building websites with Joomla'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-5082126813592556516</id><published>2010-08-16T13:37:00.000+02:00</published><updated>2010-08-16T13:37:37.854+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='client-server'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Going smooth with p2</title><content type='html'>I have to admit that I really had a hard time making p2 do what I wanted it to do. But all the fight was worth it in the end. &amp;nbsp;From the last buchmanager release (&lt;a href="http://www.buchmanager.com/"&gt;www.buchmanager.com&lt;/a&gt;) on I was able to push out silent client updates whenever I needed to do some minor fixes. No need to inform users to get a new version of the client anymore, as they would pull the updates magically on startup. I now started dreaming of updating the server in the same manner, but as this always goes with database changes it will be a greater effort. So I keep that in mind when the userbase grows in the future this is something to think of seriously.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-5082126813592556516?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/5082126813592556516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=5082126813592556516' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/5082126813592556516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/5082126813592556516'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/08/going-smooth-with-p2.html' title='Going smooth with p2'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-4437137096015956439</id><published>2010-05-30T13:41:00.002+02:00</published><updated>2010-05-31T10:55:22.417+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='rcp'/><category scheme='http://www.blogger.com/atom/ns#' term='query'/><category scheme='http://www.blogger.com/atom/ns#' term='enterpise applications'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Managing enterprise clients with p2 query api</title><content type='html'>In my last post I left some quite angry words to the p2 team, I hope they will forgive me. After some more days of intense research I finally made p2 do what I want to. And you might want to notice that I'm quite happy about that.&lt;br /&gt;&lt;br /&gt;Our system (It's german, &amp;nbsp;&lt;a href="http://mango.eiswind.de/"&gt;Buchmanager&lt;/a&gt;) is a client server architecture with hibernate/spring on the backend and a remote RCP Client. Our customers have a strong demand for automated updates, as users are forced to sync their client on server updates.&lt;br /&gt;&lt;br /&gt;The Problem: Client and server have to match and we cannot know what server version the customer is running.&lt;br /&gt;&lt;br /&gt;The Solution: p2 queries.&lt;br /&gt;At Workbench startup the client asks the server for the required client version numbers. Then we make a p2 Query with a VersionRange (as qualifier may indicate a compatible update)&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;IQueryResult&lt;iinstallableunit&gt; matches = queryable.query(&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;QueryUtil.createIUQuery("de.eiswind.mango.client.core.mango",&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;new VersionRange(Version.createOSGi(major, minor, micro), true, Version.createOSGi(major, minor, micro + 1), false)),&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;new NullProgressMonitor());&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/iinstallableunit&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;Thereby we ask the repository to give us "product" IUs only matching the servers requirements. Then we use the high level api UpdateOperation to resolve an update for us. As there may be updates for a higher (=newer) server version available, we use "setSelectedUpdates" to Update only to the compatible client. this is quite easy using the equals &amp;amp; compareTo on Update &amp;amp; Version classes.&lt;br /&gt;&lt;br /&gt;I have to note that we had to remove the p2 ui bundles completely, as they would have still offered the _wrong_ update to the user. I guess that could be changed using a Policy, but that is work to come when we feel a need for a ui.&lt;br /&gt;&lt;br /&gt;Follow me on&amp;nbsp;&lt;a href="http://twitter.com/thomas_kratz"&gt;http://twitter.com/thomas_kratz&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-4437137096015956439?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/4437137096015956439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=4437137096015956439' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4437137096015956439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4437137096015956439'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/05/managing-enterprise-clients-with-p2.html' title='Managing enterprise clients with p2 query api'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-4473051379021853634</id><published>2010-05-25T16:08:00.001+02:00</published><updated>2010-05-25T16:09:46.239+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='rcp'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>p2 is powerful, but still a nightmare to me</title><content type='html'>I started my first steps with p2 for our RCP app on eclipse 3.4, I remember I finally had some working stuff after some fights. But then came the 3.5 release and everything had changed. I found so many changes in the api that I got frustrated and throwed the whole thing away. Now that with 3.6 the API will become stable, I gave/give it another try. I found some tutorials and last but not least the examples on the p2 wiki. First to say, the examples did not work without some tweaking. I have some special requirements, as I need to make sure of the version that gets upgraded to ( The users client has to be compatible with the customers installed server version,&amp;nbsp; so I cannot update to the newest version in many cases). In general p2 seems to be made for that, and I still would prefer to have p2 over some local webstart deployment as I could push out minor fixes to my clients transparently. But on the other hand I prefer to use mainstream technology, and although so many eclipse users use p2 for a while, developers seem to find it hard to adopt it. I read many posts of people that gave up on p2, and guess I spent 5 days already on it and it still doesn't work. Its time consuming hence you can't test it in hosted mode, so its always at least a 5 to 6 minute build, sometimes evenlonger if I have to wait for my 1Mbit upstream to publish a repository change. I got help from one developer on the p2 mailing list, but my last questions remain unanswered. If you look in the p2 forum section, there are only a handful of posts and most of them are unanswered too. I guess p2 has made some progress, but documentation is still poor and looking at the traffic I see on the mailing list, I think the p2 dev team hasn't got that they have to help people adopt this othwerwise great technology in order to make it a success. I can fully understand many people wishing back for the old UpdateManager and telling you not to use p2. But if you look at it for some time you can only guess its power and I would like to see that it gets adopted by more people than now. The community has to be built and I wish I could see some more effort there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-4473051379021853634?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/4473051379021853634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=4473051379021853634' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4473051379021853634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4473051379021853634'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/05/p2-is-powerful-but-still-nightmare-to.html' title='p2 is powerful, but still a nightmare to me'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-5051391013850234540</id><published>2010-05-17T10:00:00.000+02:00</published><updated>2010-05-17T10:00:26.702+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='rcp'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Having a hard time with p2.data.area</title><content type='html'>I knew it won't be easy, but I guess it shouldnt be that hard to set up p2 updates for my app. I spend 2 and a half days now on it and its still not working ( apart from some issues that I hope to get help from the p2 dev team). One thing that took me hours to find was that I had set the osgi.configuration.area to the user.home directory. pde build adds then a line p2.data.area=@config/../p2 to the config.ini. That makes the platform not see the preferences generated from the p2.inf and therefore it didn't see my repositories. I really didn't see this for hours of failing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-5051391013850234540?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/5051391013850234540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=5051391013850234540' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/5051391013850234540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/5051391013850234540'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/05/having-hard-time-with-p2dataarea.html' title='Having a hard time with p2.data.area'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-7061682610268072644</id><published>2010-05-15T10:54:00.001+02:00</published><updated>2010-05-15T10:54:28.543+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='pde'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>PDE build ate my feature</title><content type='html'>Having my way back to p2 after it should be stable now, I started off building a repository for my product, thats made up of three features. However one of the features was mising in the repository for a reason I don't know. I double checked everything and ended up moving the plugins from the missing feature to one of the features that where working. Thats no prblem as I always wnated to do that, but I wonder if anyone elde has seen this before and could tell me a reason.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-7061682610268072644?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/7061682610268072644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=7061682610268072644' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/7061682610268072644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/7061682610268072644'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/05/pde-build-ate-my-feature.html' title='PDE build ate my feature'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-4319392431893035434</id><published>2010-05-09T10:39:00.001+02:00</published><updated>2010-05-09T10:41:52.991+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='client-side-caching'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='xmpp'/><title type='text'>The power of messaging</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;I've written some posts about messaging in enterprise eclipse applications. Yesterday I made another quick hack thats really beautiful to me. In our app we have lots of ValueLists that make up the selections in the combos. These lists are customizable, so they may change. Up to now you had to restart the client to make the changes take effect as the lists were once fetched from the server at workbench startup.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Now I made a simple change, if I get an update to a list from the server, i send an invalidate message to all online clients through xmpp (did I mention we use apache vysper as xmpp host ?) the client then simple removes the list from its storage and next time its needed it will get fetched from the server with its new state.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Took me 15 minutes to implement the whole thing and now the lists in the client are always up-to-date.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Nice :) This could make up a whole client side caching mechanism if needed.&lt;/span&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/4243137685413731189-4319392431893035434?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/4319392431893035434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=4319392431893035434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4319392431893035434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4319392431893035434'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/05/power-of-messaging.html' title='The power of messaging'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-8011389295196482939</id><published>2010-04-18T16:57:00.003+02:00</published><updated>2010-04-26T15:02:27.918+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='softskills'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Soft skills...</title><content type='html'>It's not so long ago when I was very busy on developing my career in the software industry. I made it to one of the top and well known employers here in Germany, moved with my family to Hamburg for the job and as one could think I did not grow any happier than any time before. As with many people in coding business I'm quite introverted, I don't make friends fast, and although I scored low on the nerd test lately, I think I have one thing in common with many coders, I choose coding because I am not very lucky in social engagements.&lt;br /&gt;&lt;br /&gt;Nowadays there's a lot of stuff around on "soft skills for developers" and things like that, you can buy many books or go to workshops and I even thought for a while that this may be interesting. But thinking of it I come to a different point, I think many people in the coding business have more or loss the same problems I faced (and still face), we are not the winners when it comes to soft skills. You can hear famous people (like&amp;nbsp;&lt;a href="http://www.adam-bien.com/roller/abien/entry/soa_skills_my_impression_of"&gt;http://www.adam-bien.com/roller/abien/entry/soa_skills_my_impression_of&lt;/a&gt;&amp;nbsp;for e.g.) &amp;nbsp;talk so much bullshit on soft skills and so called dream teams that I feel so sick about it.&lt;br /&gt;&lt;br /&gt;I had a talk with my current employer theese days, when I wondered that with my current colleagues I feel like an even outgoing person, because of compared to them I'm the one who puts in the most effort in socialising. He then pointed one thing out to me, that already was clear to me, but I did'nt think that others choose the same to, He said that people get into coding, because of you do not have to socialise much when you are sitting in front of your eclipse screen 9 to 5.&lt;br /&gt;&lt;br /&gt;The heck I think thats really true and when it comes to me this is exact the definition why a coding job was the perfect match when I started in the business over 20 year ago. But what will a book on soft skills or a workshop change on my personality ? One thing I've learned over the years it that you cannot change others.&lt;br /&gt;&lt;br /&gt;Something I have always hated is when some coders around me thought of themselves that they are better than others (have to admit that I do the same from time to time). If such people get reinforced on their behaviour (what happens somehow automagically) they can grow to total disasters (in most of the projects they then were called architects and if happily not allowed to code anymore). I saw people with lesser self-esteem leave project teams under tears because of that species, and I had my own dog fights with them that I really do not want to remember.&lt;br /&gt;&lt;br /&gt;So although I am in the "storming" phase of my new team right now, I do not feel that theres a storm at all. Thats what coders do, they keep silent, they do not have many friends out there and they want to be respected for the work they love and do.&lt;br /&gt;&lt;br /&gt;Coders do not need training on soft skills in the majority of cases I've seen. They need respect for the work and way of life the have chosen, and that, my friend, is hard to find.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-8011389295196482939?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/8011389295196482939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=8011389295196482939' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8011389295196482939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8011389295196482939'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/04/soft-skills-or-is-this-midlife-crisis.html' title='Soft skills...'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-3365554764865761798</id><published>2010-04-02T13:40:00.000+02:00</published><updated>2010-04-02T13:40:39.105+02:00</updated><title type='text'></title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_9I62B4X3fK0/S7XXtTuKNXI/AAAAAAAABOM/8aKKL9m1o4g/s1600/P1000080.JPG"&gt;&lt;img style="MARGIN: 0px 10px 10px 0px; FLOAT: left; CLEAR: both" border="0" alt="" src="http://3.bp.blogspot.com/_9I62B4X3fK0/S7XXtTuKNXI/AAAAAAAABOM/8aKKL9m1o4g/s400/P1000080.JPG" /&gt;&lt;/a&gt;  Just planted a mirabelle prune tree.&lt;div style='clear:both; text-align:LEFT'&gt;&lt;a href='http://picasa.google.com/blogger/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbp.gif' alt='Posted by Picasa' style='border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;' align='middle' border='0' /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-3365554764865761798?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/3365554764865761798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=3365554764865761798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3365554764865761798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3365554764865761798'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/04/just-planted-mirabelle-prune-tree.html' title=''/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_9I62B4X3fK0/S7XXtTuKNXI/AAAAAAAABOM/8aKKL9m1o4g/s72-c/P1000080.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-939021343826831851</id><published>2010-04-02T09:53:00.000+02:00</published><updated>2010-04-02T09:53:16.267+02:00</updated><title type='text'></title><content type='html'>&lt;div style="TEXT-ALIGN: center; MARGIN: 0px auto 10px"&gt;&lt;a href="http://3.bp.blogspot.com/_9I62B4X3fK0/S7WiayAYJLI/AAAAAAAABNk/BeLJth27zUc/s1600/P1000079.JPG"&gt;&lt;img border="0" alt="" src="http://3.bp.blogspot.com/_9I62B4X3fK0/S7WiayAYJLI/AAAAAAAABNk/BeLJth27zUc/s400/P1000079.JPG" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;Today I got the chance to catch a picture of a regular visitor in our garden :)&lt;div style='clear:both; text-align:CENTER'&gt;&lt;a href='http://picasa.google.com/blogger/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbp.gif' alt='Posted by Picasa' style='border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;' align='middle' border='0' /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-939021343826831851?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/939021343826831851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=939021343826831851' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/939021343826831851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/939021343826831851'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/04/today-i-got-chance-to-catch-picture-of.html' title=''/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_9I62B4X3fK0/S7WiayAYJLI/AAAAAAAABNk/BeLJth27zUc/s72-c/P1000079.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-217737046210908354</id><published>2010-03-30T10:18:00.002+02:00</published><updated>2010-03-30T11:50:16.171+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='installation'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Install an Eclipse based App - what's the best way to go ?</title><content type='html'>Going commercial (I had to do this) some things have changed for me. One thing is that I have to provide commercial quality support. Every now and then (more often than I like) I have a user that cannot run my Eclipse based app and most of the times I do not get concrete feedback on the reasons, be it that the user doesn't understand or is not willing to invest some time to run the demo. What impression do I leave there, if a user downloads my demo and it simply does not work ? I'm currently providing the app as a plain old eclipse zip file. One thing users do with it, is extract it over the old installation. Sh... One other problem I find is that the app need at least Java 5 to run, and sometimes there isn't java installed at all. One time some admin changed the jvm on a linux box back to kaffe 1.4 for unknown reasons. As it worked before, we simply had no idea and the kaffe error message was so unknown to me. I now think of using an installer and ship the client with a bundled jre. that makes some more megabytes, but I guess it could improve the overall experience.&lt;br /&gt;&lt;br /&gt;What I want to know is: how do you build your distributions ?&lt;br /&gt;&lt;br /&gt;PS: Forgot to tell that it needs to be cross - platform ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-217737046210908354?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/217737046210908354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=217737046210908354' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/217737046210908354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/217737046210908354'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/03/install-eclipse-based-app-whats-best.html' title='Install an Eclipse based App - what&apos;s the best way to go ?'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-437644828111246739</id><published>2010-03-29T17:40:00.000+02:00</published><updated>2010-03-29T17:40:26.772+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='e4'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><title type='text'>Eclipse is hard to learn - what I think e4 should learn</title><content type='html'>I've been developing RCP apps for a while now. I'm not to deep into modeling (what seems to be the hype these days), I focus on ordinary user intefaces and solid business backends. I have been teaching RCP programming for a while, but now I'm back into coding full time.&lt;br /&gt;&lt;br /&gt;I do not think I know every secret of the platform, but I am able to build useable applications, I made some progress with RAP and RIENA lately, which I both seem to like.&lt;br /&gt;&lt;br /&gt;Teaching RCP programming reminded me always of what it was to me, at least a really hard learning curve. So many times it seemed to be guesswork when something didn't work as expected, a single typo in plugin.xml and the view doesnt show up, forgot the icon for an editor, the editor doesnt show and its all up to you and your google skills to solve the problem. So in the meantime e4 is coming up, what I like is the idea of dependency injection, what I have to get used to, is that modeling is there now, too. But what I truly think should be there is a clear diagnosis option. One should be able to get a clear answer to "why it doesnt work". Even if I think of the OSGI output if there is something wrong in the bundles dependencies. Last time I had a wrong version number in a plugin. It once again was pure guesswork to find the error.&lt;br /&gt;&lt;br /&gt;Coding for over 20 years gave me many dislikes, and these days I really wonder how I will manage to do this for the next 20 years. I love coding, and I think that RCP is truly a powerful platform. But it should make some more noise in terms of predictability and it should be easier to understand. I've been teaching old dogs and youngsters and all of them had these moments of "why must this be so complicated".&lt;br /&gt;&lt;br /&gt;e4 should be easier to learn and understand, thats what I think should be the primary goal. It must be an attractive platform to developers, no matter what level of experience they have. Every Newbie can learn to to some VBA code with Microsoft Access and even though it has its limitations, thats what eclipse should be too. Easy too learn and with a clear message on the reason of failure.&lt;br /&gt;&lt;br /&gt;Last time I had a user report a bug that entries in a table got duplicated when he tried to use my dialog. It was just that I did'nt call TableViewer.cancelEditing in some special usage scenarios. A TableViewer&amp;nbsp; is an all over present interface element. Even after years of using it, I simply didn't know of the necessity to call cancelEditing. When its so hard for me, with so many years of coding, and a true motivation behind it, how does this appear to the newbie ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-437644828111246739?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/437644828111246739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=437644828111246739' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/437644828111246739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/437644828111246739'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/03/eclipse-is-hard-to-learn-what-i-think.html' title='Eclipse is hard to learn - what I think e4 should learn'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-7328106832856913726</id><published>2010-03-18T17:53:00.001+01:00</published><updated>2010-03-18T17:53:17.898+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='buchmanager'/><title type='text'>Buchmanager has a new Logo</title><content type='html'>Finally we found a new logo for our Buchmanager project ! It will go out with the 1.6 release probably in April. Now the garden calls for duty, so I even have less time for coding. The latest beta has some bugs I urgently need to fix, maybe I'll manage to put out beta2 on sunday.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_9I62B4X3fK0/S6JaXuYu4hI/AAAAAAAABGw/-kMJEsmvyQM/s1600-h/splash.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_9I62B4X3fK0/S6JaXuYu4hI/AAAAAAAABGw/-kMJEsmvyQM/s320/splash.bmp" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-7328106832856913726?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/7328106832856913726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=7328106832856913726' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/7328106832856913726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/7328106832856913726'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/03/buchmanager-has-new-logo.html' title='Buchmanager has a new Logo'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_9I62B4X3fK0/S6JaXuYu4hI/AAAAAAAABGw/-kMJEsmvyQM/s72-c/splash.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-1779763803737415952</id><published>2010-03-11T20:40:00.004+01:00</published><updated>2010-03-11T20:49:35.264+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='outlook'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='dnd'/><category scheme='http://www.blogger.com/atom/ns#' term='swt'/><title type='text'>SWT: Drop an Outlook Email</title><content type='html'>I wanted to drop an outlook email to my RCP application and as always I asked google to help me. You don't find much on this, an older post was&lt;br /&gt;&lt;a href="http://www.eclipse.org/forums/index.php?t=msg&amp;amp;&amp;amp;th=147516&amp;amp;goto=464661"&gt;http://www.eclipse.org/forums/index.php?t=msg&amp;amp;&amp;amp;th=147516&amp;amp;goto=464661&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That got me startet. The damn it didn't work, I asked on the forum again and the answer made confusion even greater:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eclipse.org/forums/index.php?t=rview&amp;amp;goto=519397#msg_519397"&gt;http://www.eclipse.org/forums/index.php?t=rview&amp;amp;goto=519397#msg_519397&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;gladly my wife gladly does some more windows thingy's with c# and with her help and a c# example i found out that i have to make an os call to get the type of the transfer that may change with every boot.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;public static int registerType() {&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;// Look name up in the registry&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;// If name is not in registry, add it and return assigned value.&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;// If name already exists in registry, return its assigned value&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;TCHAR chFormatName = new TCHAR(0, "FileContents", true);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;return OS.RegisterClipboardFormat(chFormatName);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;/blockquote&gt;&lt;/blockquote&gt;Then at least the stuff from the first post started to do something, i could get an IStorage and enumerate over the STATSTG's&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;public Object nativeToJava(TransferData transferData) {&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;IDataObject idata = new IDataObject(transferData.pIDataObject);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;idata.AddRef();&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;FORMATETC formatetc = new FORMATETC();&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;STGMEDIUM stgmedium = new STGMEDIUM();&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;formatetc.cfFormat = type;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;formatetc.lindex = 0;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;formatetc.ptd = 0;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;formatetc.tymed = 4 | 8 | 1;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;formatetc.dwAspect = COM.DVASPECT_CONTENT;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;transferData.result = getData(idata, formatetc, stgmedium);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;idata.Release();&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if (transferData.result != COM.S_OK) {&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;System.out.println("Fehler" + transferData.result);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;return null;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;}&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if ((stgmedium.tymed &amp;amp; 8) == 8) {&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;// IStorage&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;IStorage storage = new IStorage(stgmedium.unionField);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;storage.AddRef();&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;long[] x = new long[1];&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;long ret = storage.EnumElements(0, 0, 0, x);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;IEnumSTATSTG enumSTATSTG = new IEnumSTATSTG(x[0]);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;enumSTATSTG.AddRef();&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;STATSTG[] data = new STATSTG[0];&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;// Loop over enumerator&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;long rgelt = OS.GlobalAlloc(OS.GMEM_FIXED | OS.GMEM_ZEROINIT, STATSTG.sizeof);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;int[] pceltFetched = new int[1];&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;enumSTATSTG.Reset();&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;while (enumSTATSTG.Next(1, rgelt, pceltFetched) == COM.S_OK &amp;amp;&amp;amp; pceltFetched[0] == 1) {&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;STATSTG statstg = new STATSTG();&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;COM.MoveMemory(statstg, rgelt, STATSTG.sizeof);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;STATSTG[] newData = new STATSTG[data.length + 1];&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;System.arraycopy(data, 0, newData, 0, data.length);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;newData[data.length] = statstg;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;data = newData;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;}&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;OS.GlobalFree(rgelt);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;enumSTATSTG.Release();&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;// do something with STATSTG[]&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;but i still did not know what the heck to do with these objects. I started to search again and finally found an example in the eclipse OleClient:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;private byte[] readStream(IStorage storage, String stream) {&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;boolean success = false;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;long[] address = new long[1];&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;// Look for a CONTENTS stream&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if (storage.OpenStream(stream, 0, COM.STGM_DIRECT | COM.STGM_READ | COM.STGM_SHARE_EXCLUSIVE, 0, address) == COM.S_OK) {&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;IStream tempContents = new IStream(address[0]);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;tempContents.AddRef();&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;try {&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;ByteArrayOutputStream w = new ByteArrayOutputStream();&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;int increment = 1024 * 4;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;long pv = COM.CoTaskMemAlloc(increment);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;int[] pcbWritten = new int[1];&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;while (tempContents.Read(pv, increment, pcbWritten) == COM.S_OK &amp;amp;&amp;amp; pcbWritten[0] &amp;gt; 0) {&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;byte[] buffer = new byte[pcbWritten[0]];&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;OS.MoveMemory(buffer, pv, pcbWritten[0]);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;w.write(buffer);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;success = true;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;}&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;COM.CoTaskMemFree(pv);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;w.close();&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;return w.toByteArray();&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;} catch (IOException err) {&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;} finally {&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;tempContents.Release();&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;}&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;}&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;return null;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;now with that I can read Streams from the IStorage. What streams there are is in the STATSTG's&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;// do something with STATSTG[]&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;Map&lt;string, byte[]=""&gt; result = new HashMap&lt;string, byte[]=""&gt;();&lt;/string,&gt;&lt;/string,&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;for (STATSTG s : data) {&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;String stream = getString(s.pwcsName);&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;result.put(stream, readStream(storage, stream));&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;}&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;storage.Release();&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;return result;&lt;/blockquote&gt;&lt;/blockquote&gt;There we are. The IStorage contains the data in the .msg Format that I return in some strange way via the Map. I don't know how to get the .msg in one piece, but at least with some informations from&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.fileformat.info/format/outlookmsg/"&gt;http://www.fileformat.info/format/outlookmsg/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.fileformat.info/format/outlookmsg/"&gt;&lt;/a&gt;I can now extract the contents of the message and push it to jackrabbit ;) The code in these examples is for x86_64, you may need some ints for the adresses on 32bit windows.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-1779763803737415952?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/1779763803737415952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=1779763803737415952' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/1779763803737415952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/1779763803737415952'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/03/swt-drop-outlook-email.html' title='SWT: Drop an Outlook Email'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-2137608031663836102</id><published>2010-03-05T15:27:00.003+01:00</published><updated>2010-03-05T15:38:33.498+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><title type='text'>Customize your index with hibernate search 3.2</title><content type='html'>Today I got my hands on a recent snapshot build of hibernate search 3.2. The main thing I'm interested there is the programmatic configuration of the search index, a feature that I have been waiting for a long time.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://in.relation.to/Bloggers/HibernateSearch32ProgrammaticMappingAPI"&gt;http://in.relation.to/Bloggers/HibernateSearch32ProgrammaticMappingAPI&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Every now and then I have requests from users to add field xy to the searchable index. Now I can build an extension to enable my users to add fields by themselves to the index. With some introspection this should be not so hard to build. What I still have to think about is how to make that useable, because we have quite complex object graphs that need to be explored. Guess that will go in a Tree.&lt;br /&gt;&lt;br /&gt;I think of reading the configuration from XML, because at configuration time of the EntityManagerFactory I would have to make plain sql connections and thinking of the tree based nature of the thingy xml seems to be the right choice. Maybe build some pojos and serialize them with JAXB.&lt;br /&gt;&lt;br /&gt;The pain will be that I need to enable the admins to restart the server by request. Now that goes only through a script (or the tanuki service adapter on windows). I need to recreate the whole index if the configuration has changed, that will take some time. But I don't see how this can be done a less painless way.&lt;br /&gt;&lt;br /&gt;Can't wait to find some time to implement that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-2137608031663836102?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/2137608031663836102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=2137608031663836102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/2137608031663836102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/2137608031663836102'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/03/customize-your-index-with-hibernate.html' title='Customize your index with hibernate search 3.2'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-1288580329505028951</id><published>2010-03-04T16:52:00.002+01:00</published><updated>2010-03-04T16:52:38.297+01:00</updated><title type='text'>A cool article on high traffic network coding in Erlang</title><content type='html'>&lt;a href="http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-3"&gt;http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-3&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-1288580329505028951?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/1288580329505028951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=1288580329505028951' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/1288580329505028951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/1288580329505028951'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/03/cool-article-on-high-traffic-network.html' title='A cool article on high traffic network coding in Erlang'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-3637842897821220503</id><published>2010-02-28T12:00:00.006+01:00</published><updated>2010-02-28T14:47:57.873+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='xmpp'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><title type='text'>Eclipse Enterprise: Not so optimistic locking - a simple approach with XMPP</title><content type='html'>We work an a rather small enterprise app with a "Plain Old" Eclipse RCP Client. Due to some constraints our domain model is based on Pojos (Java Beans) that are persisted with a hibernate backend. In the meantime I look on those who use EMF/CDO/Riena with somehow jealous eyes, because of all the nice things they can do, but we cant do so easily. Since we don't have much concurrency, we rely on hibernates optimistic locking strategies to avoid conflicts. That means if two users work on the same entity, the one who saves early wins, the other one looses his changes and gets an OptimisticLock Exception. Thats sometimes annoying for the users. So I did a simple "not so optimistic" locking approach today that cost me less than half a day to implement for the whole thing. Our server communication -in terms of services- relies on Spring's HttpInvoker so far (keep it simple) but we cannot do callbacks to the client with that technology. We tried different ideas to solve that issue starting from JMS to finally ending with an XMPP based messaging solution. Every client sets up a permanent XMPP connection to the server over wich we can send messages to whatever party we want. With XMPP we can even see who is online for free. Now every time we open an editor we send a simple XMPP Message to the server that stores a unique id and the userId of the entity in a simple HashMap. If two users open the same entity, they both get a warning message about a potential conflict. With a simple PartListener on the client we know when an editor gets closed, send an unlock message and notify the other user(s) about the unlock. Thats what we get with about three hours of work. Never thought it would that simple. I become more and more a fan of XMPP Messaging.&lt;br /&gt;&lt;br /&gt;Outlook:&lt;br /&gt;What we could do now is register an hibernate "onPersist" event listener and send a message to the other parties that the object has changed on the server, so that they could refresh their editor content. Maybe thats something for the next weekend session.&lt;br /&gt;&lt;br /&gt;PS: Some hours later...&lt;br /&gt;&lt;br /&gt;I build an abstract base class for my Editors that does the following:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;public void init(IEditorSite site, IEditorInput input)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;throws PartInitException {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;super.init(site, input);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Object entityFromInput = getEntityFromInput(input);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;EntityPacketFilter filter = new&amp;nbsp;EntityPacketFilter(entityFromInput);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Activator.getDefault().getXmppConnection().addPacketListener(this,&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;filter);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;LockHelper.sendLockMessage(entityFromInput, true);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;site.getPage().addPartListener(LockPartListener.instance);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The Editor sends a lock message on init, and registers a Partlistener to send an unlock on close; It adds itself as a PacketListener to the XMPP Connection. The hibernate PostUpdateEvenListener sends an Update Stanza which goes to:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;EntityChangedDialog dlg =&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;new EntityChangedDialog(AbstractLockingFormEditor.this);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;int ret = dlg.open();&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;if (ret == Dialog.CANCEL) {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;PlatformUI.getWorkbench().getActiveWorkbenchWindow()&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&amp;nbsp; &lt;/span&gt;.getActivePage().closeEditor(AbstractLockingFormEditor.this, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;false);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&amp;nbsp; &lt;/span&gt;return;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;// reload from db&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;IEditorInput newInput = EntityEditorManager.getInstance()&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&amp;nbsp;&lt;/span&gt;.createInputForEntity(dlg.getEntityClass(),dlg.getEntityId());&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;setInput(newInput);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;rebind() // rebuild databinding;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;firePropertyChange(EditorPart.PROP_INPUT);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;dirty = false;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;setDirty(false);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;firePropertyChange(EditorPart.PROP_DIRTY);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;That's it. No more Optimistic Lock Exceptions from today.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-3637842897821220503?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/3637842897821220503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=3637842897821220503' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3637842897821220503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3637842897821220503'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/02/eclipse-enterprise-not-so-optimistic.html' title='Eclipse Enterprise: Not so optimistic locking - a simple approach with XMPP'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-4919804060782725145</id><published>2010-02-26T14:30:00.001+01:00</published><updated>2010-02-26T14:31:04.438+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vysper'/><category scheme='http://www.blogger.com/atom/ns#' term='xmpp'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>XMPP Server Apache Vysper</title><content type='html'>For those who are in trouble with the GPLv3 license of openfire and other XMPP servers, I found a subproject of Apache Mina called Vysper which aims to implement an XMPP Server under an Apache License. It is still&amp;nbsp; not released yet, I just build a snapshot with maven and started off to play with it. It seems easy to provide your own extensions (I need to connect to my users database) and it works fine with the smack client api. There come InMemory and JCR (jackrabbit) storage adapters with it, no support for jdbc storage right now. I guess I will go with InMemory because I don't need persistence over Server restart right now. You can find the project here: &lt;a href="http://mina.apache.org/vysper/"&gt;http://mina.apache.org/vysper/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-4919804060782725145?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/4919804060782725145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=4919804060782725145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4919804060782725145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4919804060782725145'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/02/xmpp-server-apache-vysper.html' title='XMPP Server Apache Vysper'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-4810594181375920716</id><published>2010-02-21T13:37:00.001+01:00</published><updated>2010-02-21T13:38:30.000+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='envers'/><category scheme='http://www.blogger.com/atom/ns#' term='auditing'/><title type='text'>Auditing with hibernate envers</title><content type='html'>I used the weekend to play around with &lt;a href="http://www.jboss.org/envers"&gt;hibernate envers&lt;/a&gt;. Envers is a framework that enables you to audit your database changes with hibernate. It was really easy to setup, just add the jar and set some configuration parameters. You have to add the envers listeners to your EntityManagerFactory and from then on every entity annotated with @Audited stores all changes in a seperate audit table. Envers enables you to look at each revision of your entity and track back your complete history. Since Envers stores eachs revision completely, I wrote some code to make a diff on my entities. That was quite tricky, because of my entities equals and hashcode methods compare id and version. Since different revisions have different versions I could not rely on that to work. But with some "frickeling" I made it work in a day. I now can show the change history of my Objects, you can even see the user that made the changes (a little spring aspect sets a threadlocal on the envers audit listener).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_9I62B4X3fK0/S4EobxmgDaI/AAAAAAAABFo/RtT4q6dbH00/s1600-h/Unbenannt.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="563" src="http://3.bp.blogspot.com/_9I62B4X3fK0/S4EobxmgDaI/AAAAAAAABFo/RtT4q6dbH00/s640/Unbenannt.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Envers will be part of hibernate 3.5, and as I have seen so many tricky auditing solutions before, I guess it could become a standard for hibernate auditing issues.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-4810594181375920716?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/4810594181375920716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=4810594181375920716' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4810594181375920716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4810594181375920716'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/02/auditing-with-hibernate-envers.html' title='Auditing with hibernate envers'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_9I62B4X3fK0/S4EobxmgDaI/AAAAAAAABFo/RtT4q6dbH00/s72-c/Unbenannt.PNG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-4621608503696355161</id><published>2010-02-15T16:28:00.000+01:00</published><updated>2010-02-15T16:28:00.371+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stammtisch'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='hamburg'/><title type='text'>Eclipse Stammtisch in Hamburg am 22.2.2010</title><content type='html'>On Monday, February 22th at 19:00 GMT eclipse enthusiasts meet for an eclipse "Stammtisch" in Hamburg.&lt;br /&gt;We meet at the Kick &amp;amp; Company, &lt;span class="adr" dir="ltr" id="adr"&gt;Klausstraße 1, 22765 Hamburg&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="adr" dir="ltr" id="adr"&gt;Let me know if you would like to attend (eiswind at gmail dot com).&lt;/span&gt;&lt;br /&gt;&lt;span class="adr" dir="ltr" id="adr"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="adr" dir="ltr" id="adr"&gt;---&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="adr" dir="ltr" id="adr"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="adr" dir="ltr" id="adr"&gt;Am Montag den 22.2. treffen wir uns um 19 Uhr im Kick und Company, &lt;/span&gt;&lt;span class="adr" dir="ltr" id="adr"&gt;Klausstraße 1, 22765 Hamburg zu einem Eclipse Stammtisch. Lass mich wissen wenn Du kommen willst unter eiswind at gmail dot com.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-4621608503696355161?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/4621608503696355161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=4621608503696355161' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4621608503696355161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4621608503696355161'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/02/eclipse-stammtisch-in-hamburg-am.html' title='Eclipse Stammtisch in Hamburg am 22.2.2010'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-3123227482851196274</id><published>2010-02-12T15:45:00.001+01:00</published><updated>2010-02-12T15:46:10.698+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='job'/><title type='text'>Back to the roots</title><content type='html'>After working as a trainer &amp;amp; coach with lots of traveling for over two years now, I finally got back into the coding business. I work at a small company here in Hamburg, Germany and started off with a JSF/Spring/Hibernate (what else?) backed project thats all around document management and editing. I had a nice start with a warm welcome from the other coders here, it's not far to go from my home and I hope I can have a really good time here doing what I love to do most - building high quality software.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-3123227482851196274?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/3123227482851196274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=3123227482851196274' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3123227482851196274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3123227482851196274'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/02/back-to-roots.html' title='Back to the roots'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-5822300898381660709</id><published>2010-01-26T18:05:00.002+01:00</published><updated>2010-01-26T18:06:47.525+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='onix'/><category scheme='http://www.blogger.com/atom/ns#' term='buchmanager'/><title type='text'>Onix is not Onix</title><content type='html'>Over the last few months I was fighting with the international standard for book data exchange. It's called Onix.&lt;br /&gt;What I've learned so far is that it's a standard but on the other hand it's in some manners really open. Here in Germany the book agencies are expecting many things that are not written down in the onix standard. There are many optional fields, that from time to time are required for some partners to make it work. Now I finally try to make it work with VLB the "Verzeichnis lieferbarer Bücher" here in Germany, a central repository for all books available. Once again a new release of&amp;nbsp;&lt;a href="http://www.buchmanager.com/"&gt;Buchmanager&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-5822300898381660709?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/5822300898381660709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=5822300898381660709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/5822300898381660709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/5822300898381660709'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/01/onix-is-not-onix.html' title='Onix is not Onix'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-8880306096180996166</id><published>2010-01-24T13:32:00.001+01:00</published><updated>2010-01-24T13:33:13.492+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>My own little eclipse startup</title><content type='html'>We all have to make a living, and over the years I did a handful of jobs and I saw software from good to bad. I did lots of traveling for onsite jobs I did not like. For now I make my living with a simple developer job, no titles, average salary. But in the meantime I dream of having my own office. I started off two years ago developing a product for the german book producers market, today I have (proudly) some customers with a truly small revenue and together with a former colleague I'm working on a project in industrial automation. I still think that one day I can make a living with software products that I work on in my free time. Eclipse technology today is still my favourite, so nearly everything I do is based on OSGi, RCP or RAP Technology. I have some Spring DM, some hibernate stuff. I find it very hard to find partners for my little business, for many people I talked to are surprised how small my revenue is compared to the effort and time I put into this. What about you ? Do you too dream of making your own business ? What are your troubles about it and your experiences ? Let me know, and let me know if you want to join.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-8880306096180996166?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/8880306096180996166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=8880306096180996166' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8880306096180996166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8880306096180996166'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/01/my-own-little-eclipse-startup.html' title='My own little eclipse startup'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-2468899210454139378</id><published>2010-01-18T16:58:00.006+01:00</published><updated>2010-01-18T17:02:12.458+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='rap'/><title type='text'>Spring DM &amp; Hibernate on RAP: The classloading hell</title><content type='html'>&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;In the meantime I set up a RAP application with a hibernate backend that will be integrated through spring DM. Since the hibernate libraries are not bundle-ified I went throught the overall known classloading hell. I had trouble with the Spring&amp;nbsp;LocalContainerEntityManagerFactoryBean, that did not find my persistence unit, although I found some different posts suggesting that it should work. I changed&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"&gt;&lt;/property&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;persistenceXmlLocation to classpath:META-INF/persistence.xml&lt;/span&gt; &lt;br /&gt;&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"&gt;&lt;/property&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;so it looks in my bundle and there it is. With the default setting "classpath*:META-INF..." it simply seemed to find the file, but couldn't find my persistence units.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;Has anyone made the same experiences ?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;I'm looking forward to work with the osgi-ified spring services in the app now.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-2468899210454139378?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/2468899210454139378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=2468899210454139378' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/2468899210454139378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/2468899210454139378'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/01/spring-dm-hibernate-on-rap-classloading.html' title='Spring DM &amp; Hibernate on RAP: The classloading hell'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-363245083072731692</id><published>2010-01-13T11:34:00.001+01:00</published><updated>2010-01-13T11:35:15.581+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='zip'/><title type='text'>Strange behaviour of while on linux</title><content type='html'>Last night I had I strange fight with java on linux. I tried to unzip a zip archive with java.util.zip with something like&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;zipEntry = zipStream.getNextEntry();&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;while(zipEntry!=null){&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; // unzip&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; zipEntry==zipStream.getNextEntry();&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;} // end while&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This worked like a charm on windows but on linux the vm left the while loop, although, proveable, zipEntry was not null.&lt;br /&gt;&lt;br /&gt;I changed the loop to&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;while ( (zipEntry=zipStream.getNextEntry()) != null)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;and now it works on linux too. I feel completely confused about this behaviour. Maybe I should open a bug, as I can reproduce it with a large zip stream. In the meantime I learned a lot about encoding troubles with zip archives, and that the ant zip task doesn't use util.zip but it's own implementation that doesnt encode filenames with UTF-8 on windows like util.zip does.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-363245083072731692?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/363245083072731692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=363245083072731692' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/363245083072731692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/363245083072731692'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/01/strange-behaviour-of-while-on-linux.html' title='Strange behaviour of while on linux'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-473591847525951610</id><published>2010-01-09T16:53:00.000+01:00</published><updated>2010-01-09T16:53:37.581+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><category scheme='http://www.blogger.com/atom/ns#' term='connectbot'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>SSH on Android</title><content type='html'>Recently I downloaded ConnectBot on my android phone. I now can login to my online server from everywhere I have a mobile network connection. Just for the sake that I have to restart jetty for some strange reasons once again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-473591847525951610?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/473591847525951610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=473591847525951610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/473591847525951610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/473591847525951610'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/01/ssh-on-android.html' title='SSH on Android'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-3855426557314523657</id><published>2010-01-01T17:05:00.001+01:00</published><updated>2010-01-01T17:07:08.507+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='rap'/><title type='text'>My first real RAP application</title><content type='html'>Over the christmas holidays I found some time to build my first real app with RAP. It took my two days to set up a little webshop, that is bound to our buchmanager backend (its a now commercial app for the german book producer market). As our customers have all relevant information about their products already in our database, I always thought it would be nice to integrate a webshop based on this information. I was completely surprised in how little time I could build this application (took me two days coding, another hard day spent on deploying the app). You can have a look at it on&amp;nbsp;&lt;a href="http://www.buchmanager.com/webshop/eiswind"&gt;http://www.buchmanager.com&lt;/a&gt;&amp;nbsp;(sorry but it's in german only for now) You can select from different categories and do a text search (has a hibernate search/lucene backend). I didn't spent much time on themeing and reused a theme from the examples with my own logo in it. Once again I was completely surprised how fast I could develop a nice ajax frontend, the backend only needed some extensions to store the orders you can make in the shop. Things I am not so happy with are that I have to run two instances of eclipse most of the time, as our "usual" eclipse RCP client needs a different target platform. I wonder if eclipse could build against multiple target platforms in the same workspace one time. I really had a hard time deploying the application. We have an embedded jetty already present in our backend, so I wanted to build a war file I could simply put on our embedded jetty. But tooling is poor there and the ConigfIniCreator that comes with the example deployment scenario left out&amp;nbsp;org.eclipse.equinox.servletbridge.extensionbundle from the list of bundles to start. The BridgeServlet then gave me a simple 404, digging in the code told me that it couldn't reach its delegate servlet, but gave me no idea about what's missing. Luckily I had an example build of a Hello World app that worked before and there I found the missing entry. To all the RAP engineers, tooling can be improved. I spent a whole day to fix this. But now I have a nice new feature in our book management application. Just waiting for hibernate search 3.2 which promises to make the index dynamically configurable (now its hard coded in annotations). RAP is way cool if you know have to do RCP code, that's my overall conclusion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-3855426557314523657?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/3855426557314523657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=3855426557314523657' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3855426557314523657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3855426557314523657'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2010/01/my-first-real-rap-application.html' title='My first real RAP application'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-5470838570637054180</id><published>2009-12-04T15:25:00.000+01:00</published><updated>2009-12-04T15:25:12.043+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='rap'/><title type='text'>Playing with RAP</title><content type='html'>Last week I found some time to play around with Eclipse RAP, some first steps were easy to take. I then got eager and tried to run a bigger RCP application on RAP which worked out to not to work. It was that some things from the current RCP platform we use extensivly do not work on RAP (for e.g. StyledLabelProvider). I did not spent too much time on it, and it seems to be I good advice I read somewhere else, if you want to develop on RAP and RCP start with RAP and then port tp RCP.&lt;br /&gt;&lt;br /&gt;I then started of with a prototype for a new app, that will possibly run on RAP next year and I really had some fun with it. I used the styling examples projects to do some styling on my app, integrated my own logo and some css. Was all really easy and I got a web app running in little time.&lt;br /&gt;&lt;br /&gt;Tried to follow the instructions on deployment then, which turned out to be a little complicated. Tooling is missing some things there currently. Had to take a count of manual steps to finally get a war archive that I could sent to a friend for testing. Surely I missed to put my plugin.xml in build.properties which caused some headache as the deployed app showed all bundles in the osgi console but surely refused to work.&lt;br /&gt;&lt;br /&gt;I like the idea of having the Eclipse concepts and the platform alongside for web app development. Our app will be running whith not too heavy load, so that common concern doesn't matter to me. I wonder if there are experiences with RAP applications under heavy load. I still have to figure out whats the best way to have a cross user application model (most of out data will be shared across the users). As I'm so used to it I guess I will go for hibernate, which will turn out be be interesting on where to place the EntityManager Sessions to get all out of Lazy loading inside the platform.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-5470838570637054180?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/5470838570637054180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=5470838570637054180' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/5470838570637054180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/5470838570637054180'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2009/12/playing-with-rap.html' title='Playing with RAP'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-1789686344853397960</id><published>2009-11-09T18:46:00.000+01:00</published><updated>2009-11-09T18:46:49.625+01:00</updated><title type='text'></title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_9I62B4X3fK0/SvhVIhXyH1I/AAAAAAAABCM/CEl5AymXjdM/s1600-h/Wasmitbuechern_120.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_9I62B4X3fK0/SvhVIhXyH1I/AAAAAAAABCM/CEl5AymXjdM/s320/Wasmitbuechern_120.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://wasmitbuechern.de/"&gt;http://wasmitbuechern.de&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Eine neue Seite für alle die was mit Büchern machen. Finde ich eine nette Idee :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-1789686344853397960?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/1789686344853397960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=1789686344853397960' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/1789686344853397960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/1789686344853397960'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2009/11/httpwasmitbuechern.html' title=''/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_9I62B4X3fK0/SvhVIhXyH1I/AAAAAAAABCM/CEl5AymXjdM/s72-c/Wasmitbuechern_120.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-3792267086762056517</id><published>2009-10-28T17:27:00.005+01:00</published><updated>2010-01-01T17:11:36.263+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='verlagssoftware'/><title type='text'>Verlagssoftware</title><content type='html'>Buchmanager ist eine integrierte Verlagssoftware, die wir entwickelt haben. Buchmanager bietet eine Buchverwaltung, Adressdatenbank, Onix-Titelmeldungen und vieles mehr, heute ist endlich Version 1.0 fertig geworden .&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mehr dazu finden Sie unter &lt;a href="http://de.buchmanager.com/"&gt;&amp;nbsp;Verlagssoftware Buchmanager&lt;/a&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/4243137685413731189-3792267086762056517?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/3792267086762056517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=3792267086762056517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3792267086762056517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3792267086762056517'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2009/10/open-source-verlagssoftware-mango.html' title='Verlagssoftware'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-8087595742358072850</id><published>2009-10-13T17:45:00.005+02:00</published><updated>2009-10-13T18:06:46.114+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google wave'/><category scheme='http://www.blogger.com/atom/ns#' term='wave'/><title type='text'>First impression of Google Wave</title><content type='html'>After weeks of waiting for an preview account I could catch a glimpse of Google Wave last weekend. I was glad to have a buddy with an account so that we could wave together. I must admit that I have to get used to tis new form of communication. As you can see in realtime what other users type, its really different from what we are used to with classic email. I'm looking forward for wave to spread later this year (at least google announced wave to be available then).&lt;div&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/4243137685413731189-8087595742358072850?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/8087595742358072850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=8087595742358072850' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8087595742358072850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8087595742358072850'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2009/10/first-impression-of-google-wave.html' title='First impression of Google Wave'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-8688938316576261641</id><published>2009-09-19T19:57:00.000+02:00</published><updated>2009-09-19T19:58:09.715+02:00</updated><title type='text'>Nordkap</title><content type='html'>&lt;div style="TEXT-ALIGN: center; MARGIN: 0px auto 10px"&gt;&lt;a href="http://1.bp.blogspot.com/_9I62B4X3fK0/SrUbsGZFXUI/AAAAAAAAA1Y/CFw6GXZ0GpI/s1600-h/CIMG0534.JPG"&gt;&lt;img border="0" alt="" src="http://1.bp.blogspot.com/_9I62B4X3fK0/SrUbsGZFXUI/AAAAAAAAA1Y/CFw6GXZ0GpI/s400/CIMG0534.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;Und ja, ich war am Nordkap :)&lt;/div&gt;&lt;div style='clear:both; text-align:CENTER'&gt;&lt;a href='http://picasa.google.com/blogger/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbp.gif' alt='Posted by Picasa' style='border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;' align='middle' border='0' /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-8688938316576261641?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/8688938316576261641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=8688938316576261641' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8688938316576261641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8688938316576261641'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2009/09/nordkap.html' title='Nordkap'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_9I62B4X3fK0/SrUbsGZFXUI/AAAAAAAAA1Y/CFw6GXZ0GpI/s72-c/CIMG0534.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-7389471362791581131</id><published>2009-09-19T18:40:00.000+02:00</published><updated>2009-09-19T18:40:55.925+02:00</updated><title type='text'>Norwegen mit dem Schiff</title><content type='html'>&lt;div style="TEXT-ALIGN: center; MARGIN: 0px auto 10px"&gt;&lt;a href="http://4.bp.blogspot.com/_9I62B4X3fK0/SrUJlowO9JI/AAAAAAAAAak/o99MCSCxJgw/s1600-h/CIMG0465.JPG"&gt;&lt;img border="0" alt="" src="http://4.bp.blogspot.com/_9I62B4X3fK0/SrUJlowO9JI/AAAAAAAAAak/o99MCSCxJgw/s320/CIMG0465.JPG" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;So nun können wir endlich mitreden und haben auch mal eine Kreuzfahrt gemacht. Das Essen war lecker und wir waren extrem faul. Doch der Alltag hat uns schon wieder und der Urlaub war wie immer zu kurz ...&lt;div style='clear:both; text-align:CENTER'&gt;&lt;a href='http://picasa.google.com/blogger/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbp.gif' alt='Posted by Picasa' style='border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;' align='middle' border='0' /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-7389471362791581131?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/7389471362791581131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=7389471362791581131' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/7389471362791581131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/7389471362791581131'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2009/09/norwegen-mit-dem-schiff.html' title='Norwegen mit dem Schiff'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_9I62B4X3fK0/SrUJlowO9JI/AAAAAAAAAak/o99MCSCxJgw/s72-c/CIMG0465.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-5219189996131304757</id><published>2009-09-10T18:11:00.002+02:00</published><updated>2009-09-10T18:16:05.944+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='java7'/><title type='text'>Java is still cool to me</title><content type='html'>These days I read a lot about Scala and other new languages. I didn't get in too deep with these things, although they appear sometimes nice to me. But some days ago I once again dreamed about coding in Java ( I might not be a very clean developer, I think I suffer still from my C64 style coding when I started off with software development). When I read about whats coming up with Java7 I'm sometimes a little disappointed, I truly did expect some more of the cool features that have been discussed. But we have very nice free tools availably and there is great software around, though I think software development still needs prgamatic evolution. But over all I love coding in Java and I hope I can do that for some years to come. What do you think, do we need revolution or evolution ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-5219189996131304757?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/5219189996131304757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=5219189996131304757' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/5219189996131304757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/5219189996131304757'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2009/09/java-is-still-cool-to-me.html' title='Java is still cool to me'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-7846057297436991917</id><published>2009-08-02T17:18:00.002+02:00</published><updated>2009-08-02T17:24:06.866+02:00</updated><title type='text'>68 Downloads, where is my community ?</title><content type='html'>For the last release (0.9.5) of our Mango project sourceforge counted 68 downloads for the windows-client. Thats quite impressive to me, I still remember how long it took from the first to the second installation and how much effort I had to put in there. At least some people are now having a look at what we are doing. We put some classic business operational tools uner GPL. I still wonder if this will ever work out in terms of business (up to now it surely does not). Still most companies with software like ours have some classic licensing model. We hope that some people will be willing to pay for a support contract, but heaven knows if we find enough to make it through. Its still an experimental state of mind. My wife always smiles and asks me why I wonder that I don't make money with open source.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-7846057297436991917?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/7846057297436991917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=7846057297436991917' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/7846057297436991917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/7846057297436991917'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2009/08/68-downloads-where-is-my-community.html' title='68 Downloads, where is my community ?'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-3931598565698531367</id><published>2009-08-02T17:04:00.002+02:00</published><updated>2009-08-02T17:14:51.752+02:00</updated><title type='text'>New home, new plans</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_9I62B4X3fK0/SnWtT-lmO6I/AAAAAAAAACs/v0xJD2uZTAg/s1600-h/CIMG0427_klein.JPG"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 300px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5365385089811626914" border="0" alt="" src="http://1.bp.blogspot.com/_9I62B4X3fK0/SnWtT-lmO6I/AAAAAAAAACs/v0xJD2uZTAg/s400/CIMG0427_klein.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;We silently moved to a new address in Hamburg. We moved into a small house right at the corner of Hamburg, if we cross the street the forest begins. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Its quite a ride to my office now, but we enjoy having space inside and outside. It has been some time since I posted here, so here we go. Integrating our Publisher Software Mango with JFire didn't really work out. Technology differences could have been overcome, but I finally threw the towel woth the JFire Build system, which made me so unproductive that I sometimes didn't write a line of code for days. So we once again have no solution for how we do ERP inside of Mango. I had a look at the Lexware (quite popular in Germany) interfaces, but theres not enough room for us either. So we implemented some basic accounting functionality on our own, but that cannot compete with other solutions. Open Source ERP is in the wild, I can't make up my mind with that.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I did some new stuff on ad-management for Mango, many of the magazine-publishers stopped looking at our project whenever I told them that we do not have it by now. So now we have some basics and I hope for feedback from our small community so that things keep moving.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-3931598565698531367?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/3931598565698531367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=3931598565698531367' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3931598565698531367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3931598565698531367'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2009/08/new-home-new-plans.html' title='New home, new plans'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_9I62B4X3fK0/SnWtT-lmO6I/AAAAAAAAACs/v0xJD2uZTAg/s72-c/CIMG0427_klein.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-3651649144642637266</id><published>2009-03-12T14:39:00.002+01:00</published><updated>2009-03-12T14:44:23.256+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rcp'/><category scheme='http://www.blogger.com/atom/ns#' term='jpa'/><category scheme='http://www.blogger.com/atom/ns#' term='migration'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='jdo'/><title type='text'>Migrating a whole project from hibernate to datanucleus and other implications</title><content type='html'>Whenever one Project decides to join with another one (which is the way we want to go, we decided to migrate our code to be integrated into the JFire ERP Project) there are some hurdles to be taken in architecture. &lt;span style="font-weight: bold;"&gt;Architectural decisions are sometimes defined to be hard or impossible to change or revert.&lt;/span&gt; I took a long walk through the existing ERP Solutions to find that Jfire is as close to our architecture that an integration attempt could be made.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Jboss&lt;/span&gt;&lt;br /&gt;Jfire Server runs on Jboss with EJB 2.x Components. Mango (our project, see http://www.eiswind.de) up to now had a monolithic J2SE Server based on pure Spring solutions. It took me a day to migrate the Spring RMI Services to EJB Stateless beans, mostly by replacing the Spring Annotations with EJB3 counterparts. Concepts are mostly the same, only name changes. Some little more effort still needs to be taken to deploy Jackrabbit as a Jboss Service. What turns out to be the hardest thing is that we need an xmpp server component ready. With Mango I already had a hard time in integrating OpenFire in the monolith, and as I know the hell inside the openfire distribution jars (sorry for that, I had to say it) I will give up on openfire and try to deploy tigase on jboss. I still don’t have a conrete solution for that, guess it will still need some hacking, staring with JNDI configuration for the datasource.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Backend: From hibernate to datanucleus:&lt;/span&gt;&lt;br /&gt;Jfire uses datanucleus JDO on the backend side (generated with xdoclet), mango has annotated JPA inside with hibernate. This should have been no greater issue, if we didn’t use hibernate search and hibernate validator. Hibernate search will be replaced with compass http://www.compass-project.org/ which at least can manage the lucene index on our objects. Need to change Annotations here to, concepts are similar. For now I will leave the hibernate valdator stuff in the model as its used in the client for validation in the ui. Still have to think if we need another validation layer in the server at all, and when so if we build a bridge to datanuclues. Why we change the backend at all? We found that even if JDO has a little outdated taste it has some strengths compared to hibernate when it comes to client-server computing (see all the crazy discussions on remote lazy loading that come up with hibernate.) With hibernate you can define EAGER or LAZY but you have to decide. With JDO you can have mutliple fetch plans defined and load only what you need for the moment. To me that’s the groundbreaker to move away from hibernate. Hibernate is made for web apps, that what I always thought. But I simply didn’t know better and I’m keen to find out about the possibilities datanuclues will open up.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Eclipse RCP&lt;/span&gt;&lt;br /&gt;On the client side I still fight with the target platform. Jfire compiles against a 3.3 target, and we need at least 3.4 for Mango client to compile. I still did’nt manage to setup a clean target platform that will satisfy Jfire dependencies as in the Jfire code there seem to be bo feature sets defined that declare the dependencies (folks at nightlabs correct me if I’m wrong). From the Code side its really simple, I just replaced the Spring RMI Stub lookubs with JNDI lookups.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The hell: data migration.&lt;/span&gt;&lt;br /&gt;What will be a tough part is to migrate data from existing installations into the jfire database. I hope that I will be able to hack our model code generator to be able to generate mappings that both fit to the old database and the new ones.&lt;br /&gt;&lt;br /&gt;But all in all its something we can do within reasonable time. Life is magic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-3651649144642637266?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/3651649144642637266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=3651649144642637266' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3651649144642637266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/3651649144642637266'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2009/03/migrating-whole-project-from-hibernate.html' title='Migrating a whole project from hibernate to datanucleus and other implications'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-6235086400863608770</id><published>2009-01-24T17:00:00.003+01:00</published><updated>2009-01-24T17:11:32.439+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='xmpp'/><category scheme='http://www.blogger.com/atom/ns#' term='ecf'/><title type='text'>XMPP in Client Server Application</title><content type='html'>Recently I stumbled across some readings on XMPP usage scenarios that divert from pure Instant messaging. I started some experimenting with it and I think it's really great for client-server apps as Mango is. I always had some headache with server to client notifications as RMI (and most other more modern service options) has no callback option.&lt;br /&gt;&lt;br /&gt;I had some trouble setting up OpenFire to run embedded in my Server environment. But after two days of hazzle its finally working now. I did not want to have a standalone solution, because it would make overall installation of my server too complicated. Now it comes up with the main server process and serves the xmpp communication.&lt;br /&gt;&lt;br /&gt;Now one of the first things I wanted to see was who's online which was quite easy after I found out that Rosters need to be registered with the JID and not anly the user name. Makes sense, but I needed some time to get it.&lt;br /&gt;&lt;br /&gt;Then I cut of and ugly polling mechanisms for Reminder notification and replaced it with a central job on the server side that sends an xmpp Message to the client whenever a notification is available. Thats a great step forward in overall architecture to me, as simple as it looks in the first place. The clients don't need any polling any more, as they get notified whenever needed.&lt;br /&gt;&lt;br /&gt;I tried to solve this before with a JMS approach, but XMPP looks like its much more up to the problem. The documentation I found on the Smack API is lacking many details. Next step may be to step up to ECF, but I will see if I implement some new feauters first :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-6235086400863608770?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/6235086400863608770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=6235086400863608770' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/6235086400863608770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/6235086400863608770'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2009/01/xmpp-in-client-server-application.html' title='XMPP in Client Server Application'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-4336094807336455684</id><published>2008-12-31T14:44:00.005+01:00</published><updated>2008-12-31T15:20:51.465+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rich client'/><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='deployment'/><category scheme='http://www.blogger.com/atom/ns#' term='equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='enterpise applications'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>P2 deployment in enterprise applications</title><content type='html'>So many times I asked people I met, why they have choosen a browser based solution for their business applications that are never meant to appear on the internet. And, as was to be expected, most of the time I didn't hear many meaningful arguments. One of the arguments that people tell in almost any cases is "no trouble with deployment".&lt;br /&gt;&lt;br /&gt;I remember trying different strategies for rich client apps deployment. Some  years ago we used webstart with a Windows shortcut, which sometimes made some trouble (I never made it deeper into it) when it didn't get the changes and started from its cache instead of downloading the updates.&lt;br /&gt;&lt;br /&gt;In a client server environment it's critical that clients are synced when service api breaking changes are made on the server side. So after many years I came back to the problem with my project Mango (its about publishing business btw.) which is implemented on Eclipse RCP for the sake that I believe its the best platform we have in java-land. For sometime (as with many projects) we had only a single production installation and I didn't put much effort in installation issues. I told the admins what was to do to get it running.&lt;br /&gt;&lt;br /&gt;But times changing and installation count is rising, I noticed that I had to improve things around deployment. Typical update scenarios that eclipse mechanisms adress don't match truly what we need, because we can't update from a central point since client and server updates must be synced. As for now I decided against an automated server update (which I may rethink...).&lt;br /&gt;&lt;br /&gt;But with some effort (had to do some minor but hard to find tweaks on the current p2 implementation) we now install the p2 repository for our client on an embedded webserver in our server installation. With again some tweaking I made the p2 installer app webstartable and you guess, it too comes with the server installation.&lt;br /&gt;&lt;br /&gt;Now its a single selfextracing jar, that updates the server platform, and runs all needed changes (database schema changes, sometimes data needs to be converted etc). For a single turn users need to be emailed the link to the installer jnlp to get the current client installed on their boxes. From now on (it cost me some days, my wife can tell it was tricky...) whenever one of our users decides to update his installation to the current release, its a simple one liner to update the whole scenario.&lt;br /&gt;&lt;br /&gt;As I ran out of time its a little q&amp;amp;d trick on the client, as it simply starts up with a null perspective and disabled menus when server api has changed. It then updates itself from the p2 repository and needs to be restarted.&lt;br /&gt;&lt;br /&gt;Things that still need to be done is notifing running clients when the server goes down for maintenance, but that could gives us room for new ideas in any way.&lt;br /&gt;&lt;br /&gt;So to say, what I guess I will hear now is, that in big client installation count this will still need high network traffic when on monday mornings people fire up their clients and all request an update at nearly the same time. But without having scientific proof I guess that with p2 we can update to the point what needs to be updated. So actual download size (in our case, the client code is actually quite small compared to the base platform plugins it depends on) won't be more than some megs.&lt;br /&gt;&lt;br /&gt;So next time I stumble across the above arguments, I think I'll have something up the sleeve.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-4336094807336455684?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/4336094807336455684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=4336094807336455684' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4336094807336455684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4336094807336455684'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2008/12/p2-deployment-in-enterprise.html' title='P2 deployment in enterprise applications'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-8644837205899179591</id><published>2008-12-10T16:10:00.002+01:00</published><updated>2008-12-10T16:15:05.476+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='ui'/><title type='text'>UI programming - state of the universe</title><content type='html'>I'm currently doing some investigations on state of the art ui  development. In my own project I choose RCP for many reasons. I cross posted this on the eclipse.platform newsgroup.&lt;br /&gt;&lt;br /&gt;The general state of the universe seems to me like we are still  experimenting in many areas. I've been so happy with the arrival of  databinding, but it still needs a lot of coding.&lt;br /&gt;&lt;br /&gt;I stumbled across gooey&lt;br /&gt;&lt;a class="moz-txt-link-freetext" href="https://aptframework.dev.java.net/gooey/gooeyController.html"&gt;https://aptframework.dev.java.net/gooey/gooeyController.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;they have some interesting ideas. For e.g.&lt;br /&gt;&lt;br /&gt;automtic binding by convention (perhaps overidden by annotations)&lt;br /&gt;&lt;br /&gt;they suggest to have some mechanisms like&lt;br /&gt;&lt;br /&gt;@Event void ok() {&lt;br /&gt;to implement a listener for a button thats named okButton.&lt;br /&gt;&lt;br /&gt;and some other nice ideas. Wether this plain java approach is a good  idea or if there are better ways - I will leave that to be discussed.&lt;br /&gt;&lt;br /&gt;I'm not solving the puzzle (at least not by now &lt;span class="moz-smiley-s1"&gt;&lt;span&gt; :) &lt;/span&gt;&lt;/span&gt; but I agree with many  voices that coding ui's by current api's is sometimes comlicated and ugly.&lt;br /&gt;&lt;br /&gt;I can see two approaches:&lt;br /&gt;Markup (Xaml?) and DSLs (JavaFX, glimmer etc)&lt;br /&gt;&lt;br /&gt;the problem I see with markup is that its great for building tools  around, but it's getting bad when you need bridges to code (With  Microsoft blend beeing nice, a so called UI Designer still has to know  method names and blend doesnt help him thereby afaics) XUL has been  araound a while but I don't know anyone who uses it.&lt;br /&gt;&lt;br /&gt;The web guys come up with EL there and once again you have some kind of  code in your view definition. I would prefer to see a button, and the  magic behind the button (its behaviour) should be defined in a  controller. Even if you disagree and allow some code in the view  definition, it still hard to validate and refactor. The problem with  markup is, that its hard to reference from code, and even if you do that  (by id conventions, by xpath or something else) it strikes you when you  want to refactor somehing.&lt;br /&gt;&lt;br /&gt;I tend to like the dsl approach more, as it can be compiled, maybe it  can be typesafe and have tight java integration. And it would be even  better if we had cross language refactoring tools. the glimmer approach  implies groovy, and maybe I didnt understand it right, but I think its  still some effort to cleanly use groovy objects from java.&lt;br /&gt;&lt;br /&gt;All in all i would like to see a clean separation of the visual  definition and actual behaviour that should be in code anyway.&lt;br /&gt;&lt;br /&gt;One nice idea I saw from the .NET guys is the concept of a visual state  manager.&lt;br /&gt;&lt;a class="moz-txt-link-freetext" href="http://timheuer.com/blog/archive/2008/06/04/silverlight-introduces-visual-state-manager-vsm.aspx"&gt;http://timheuer.com/blog/archive/2008/06/04/silverlight-introduces-visual-state-manager-vsm.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I think I like the idea. Coding state changes and their dependencies is  sometimes not trivial and mostly always hard to understand when you look  at the code only. So the idea of having&lt;br /&gt;&lt;br /&gt;visual declarative elements (be it markup os dsl)&lt;br /&gt;style information for the elements (oh no, not css)&lt;br /&gt;different defined states of the declared elements&lt;br /&gt;binding of elements to domain models&lt;br /&gt;actual behaviour (aka the controller)&lt;br /&gt;&lt;br /&gt;as separate concepts has some appeal to me.&lt;br /&gt;&lt;br /&gt;If we could cleanly reference visual elements in a straightforward way  some things will get easier (think you declared a button in the visual  layer, how is it referenced in the controller?) a typical mess we have  today is when it comes to ui test automation. Look at the SWTBot  approach, coding names for the elements to make them testable. Thats  2008, I guess (sorry for beeing sarcastic, I have hard times with my UI  tests)&lt;br /&gt;&lt;br /&gt;I think we still have lots of room for improvement. I'm just trying to  get some pieces together. I would be glad if you let me know what you think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-8644837205899179591?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/8644837205899179591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=8644837205899179591' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8644837205899179591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8644837205899179591'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2008/12/ui-programming-state-of-universe.html' title='UI programming - state of the universe'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-808804962162849353</id><published>2008-10-26T10:53:00.002+01:00</published><updated>2008-10-26T11:17:11.776+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='rcp'/><title type='text'>Giving open source a unusual try</title><content type='html'>Open source is great! Thats what I truly think.&lt;br /&gt;But there are still many areas that are quite untouched by the open source model, or where it is at least not really successful. For example I did some amount of research on open source ERP software in the last months and I came to the conclusion that theres nothing in open source land out there I would really recommend . (You are welcome to correct me there :)&lt;br /&gt;Open source is very successful on components right now. But what about business software in general or software for special business lines ?  I am running a small RCP based project in business software specialized for publishing companies. At least I'm trying to get it started. We are still in an early stage, and theres lots of stuff still missing. But whats the hardest point up to now is growing a community. I don't mean a developer community, but a user community that gives feedback. When I started to work actively on public relations for the project, I found out that many of my potential users had no clue about open source and got at least very suspicious when I told them that the software is free. For me I think that an open source model could be a great opportunity for industries to build software of many kinds in a collaborative way. But time has to tell if managers out there are getting the ideas. I'm still positive, we have three production installation by today and I hope it will grow.&lt;br /&gt;&lt;br /&gt;When you invest in a so called "standard software" product today, what many companies find out is, that standard business software needs customization (oh yeah) and the real cost of going live is something vendors (don't want to blame anyone) don't really tell. In many cases you are tied to experts that come at high rates from the vendors. If companies can gather up to a community, they could have much more influence and control over the software they are going to use, they could have they're own in house know how if they wish to -from the beginning- and they could fix a bug when they need to. And not have to wait for the next major release (if the bug got fied at all). I could count up many more advantages. So what do you think, will open source be a model for "standard business software products"  ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-808804962162849353?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/808804962162849353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=808804962162849353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/808804962162849353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/808804962162849353'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2008/10/giving-open-source-unusual-try.html' title='Giving open source a unusual try'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-8388903970243448288</id><published>2008-09-11T14:39:00.003+02:00</published><updated>2008-09-11T14:42:20.804+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jpa'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><title type='text'>Modular JPA</title><content type='html'>I had some time thinking about modular databases. There comes wonderful modularity when we work with OSGi, but what about our databases. Think of a server plugin that will need some Tables. It should contribute them in eclipse style to the EntityManagerFactory. As this looks very static maybe we could have an extensible Configuration for the factory. Or has someone an idea how to achieve something like that ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-8388903970243448288?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/8388903970243448288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=8388903970243448288' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8388903970243448288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8388903970243448288'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2008/09/modular-jpa.html' title='Modular JPA'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-6700465528477678419</id><published>2008-07-18T09:17:00.002+02:00</published><updated>2008-07-18T09:44:18.517+02:00</updated><title type='text'>Why to become an IT-Manager</title><content type='html'>the title could also be "Why I engage in open source".&lt;br /&gt;&lt;br /&gt;I'm into software development for ovber 25 years now. I started as many of us with the ZX81, followed by the best ever C64. Now I do mostly eclipse related stuff on machines with Gigabytes of Ram. Wow. But still I thin in terms of software technology we live in the stone age.&lt;br /&gt;&lt;br /&gt;But thats not my poit today. I have seen many software projects, since I work as trainer too, I have the chance to see even more companies that engage in software. But let me say it once, what I see most of the time is horrifying.&lt;br /&gt;&lt;br /&gt;From time to time one can read discussions about what good software means. I personally think good code is code thats so easy to understand that it needs no further documentation. But what one can see out there is far from that in most if not nearly all cases.&lt;br /&gt;&lt;br /&gt;I talked to a business man yesterday, who promotes an Open Source ERP project (don't want to blame anyone here) in Germany. He once reminded me of one thing. Those who make decisions about software in most cases don't have much technical clue. What he said that its all about marketing. You don't need a good product. You need a good marketing department.&lt;br /&gt;&lt;br /&gt;Some years ago I participated in a business plan game. After some days in the game, our team had the best product at the best price on the market. But we didnt win the game, because another team had better marketing.&lt;br /&gt;&lt;br /&gt;Whenever I have some free time I invest it in my little Open Source Company Eiswind. We have a small budget for marketing. But why I do it is because of my personal philosophy. At least in one place I want to try my best in software. Thats the whole point in Eiswind, we want to do outstanding quality, as we think having proven quality in code pays off in the long term. We have typical application life cycles of more than 10 years. You have to maintain your code. Thats what you get when you engage  Eiswind. Not a manager that will have a new job in three years. We care about what we do. Today and tomorrow.&lt;br /&gt;&lt;br /&gt;So what I see goes with the talk I had yesterday. Those who make decisions, those who are interested in power are most of the time not the same as those who are interested in software quality. What counts in there is your personal motivation. IN the last project i was for making some money I urgently needed, ALL of the coders had resigned against their personal motivation because of the disastreous managament decisions they had to follow.&lt;br /&gt;&lt;br /&gt;Every one of us has to make a living. I dream of making a living with software still after all theese years. But its getting harder to see whats going on out there. I left the last project after three weeks last time, simply because of I coudn't stand what was going on there.&lt;br /&gt;&lt;br /&gt;So sometimes I fear what to do with my future. I'm not 21 anymore and I'm even not so impressed be socalled leaders. I have my own opinion on software. So sometimes I think the best would be to become a good software manager or team lead. But where to find the company that would engage someone like me ?&lt;br /&gt;&lt;br /&gt;In germany companies tend to put you in the place you always have been. I applied for one or the other management position, but what they always tell me is that I have not enough experience. But where shall this experience come from when noone lets me make it ? I dont know how it is in other countries, but thats the way it goes in germany.&lt;br /&gt;&lt;br /&gt;You can be a project leader when you come from a business university even when you have absolutely no clue about software. What counts is the numbers.&lt;br /&gt;&lt;br /&gt;But if you have plenty of experience, you may be able to know what you are talking about. And thats something managers don't like. Or do they ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-6700465528477678419?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/6700465528477678419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=6700465528477678419' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/6700465528477678419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/6700465528477678419'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2008/07/why-to-become-it-manager.html' title='Why to become an IT-Manager'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-4329378479378012629</id><published>2008-07-18T08:44:00.002+02:00</published><updated>2008-07-18T08:58:32.925+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='lucene'/><title type='text'>Hibernate &amp; Lucene - a new ui experience</title><content type='html'>I was working on my little open source project Mango some months ago when I stumbled across hibernate search. Hiibernate search gives you the ability to manage a full-text lucene index on your relational database. This looked interesting to me so I gave it a try.&lt;br /&gt;&lt;br /&gt;What can I tell you about my experiences ? First it came to me that I can handle the german umlaut problem with a special tokenizer. So searching for Müller gives you Müller as well as Mueller, something that is hard to to in plain HQL/SQL. But thats not the point. By having a fulltext index I could throw away all the UI parts where users could query the database for objects. They became completely obselete, because of now we have a central single database query that consists of a single text field as you know it from google for e.g. Thats all we need in the whole application to query the database. I needed to revamp the whole application ui, but it really was worth the effort in means of user experience. We all know UIs for database queries. We don't have them anymore because of the lucene index on the database. The user types in a keyword and lucene gives him all the objects, no matter what type that match his query.&lt;br /&gt;&lt;br /&gt;I'm currently thinking of building a more sophisticated query assistant, so that users are more easily empowered of all the lucene query possibilities. For know I had to explain some of the core features of lucene queries to my users, but that could even be easier with a simple assistant.&lt;br /&gt;&lt;br /&gt;For a second I wished that we had a relational database that has this ability built in, but that doesn't make sense because of the heterogenuous query results.&lt;br /&gt;&lt;br /&gt;I really think that hibernate search should be much more popular, as it revolutionizes user experience on database centric applications. There are some features I still miss, but what we have up to now is ready for the real world.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-4329378479378012629?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/4329378479378012629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=4329378479378012629' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4329378479378012629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4329378479378012629'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2008/07/hibernate-lucene-new-ui-experience.html' title='Hibernate &amp; Lucene - a new ui experience'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-8921543244729175355</id><published>2008-05-19T14:21:00.003+02:00</published><updated>2008-05-19T14:34:41.734+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='client-server'/><category scheme='http://www.blogger.com/atom/ns#' term='remote'/><title type='text'>Remote lazy loading in client server environments</title><content type='html'>I made some steps yesterday with hibernate in regards to realizing a remote lazy loading feature. I read &lt;a href="http://forum.hibernate.org/viewtopic.php?t=930457&amp;amp;highlight=remote+lazy+loading"&gt;Gavin Kings opinion&lt;/a&gt; on that in a forum entries, he arguments that remote lazy loading is a no go as it breaks transaction isolation. I came across &lt;a href="http://h3t.sourceforge.net/"&gt;h3t &lt;/a&gt;which uses jboss-aop and that comes which a javaagent thats not useful in the osgi environment (or does anyone know to make it). So I started off on my own and try to adopt an old &lt;a href="http://www.hibernate.org/377.html"&gt;example &lt;/a&gt;from the hibernate site. So far so good, the example expects that the remote call has access to the former calls session. Another no go. I dived into the hibernate code and all I found is that lazy loading is so tightly coupled to the hibernate session that theres no chance to make it in a day. I thought of Gavin's arguments and I cant see the point. In my environment there is no transaction cotext at all. I retrieve objects from the server side, mainpulate them and sen them back. Inbetween theres not a glimpse of a transaction, so I do not see why it shouldnt be allowed to split ob the fetch aka lazy load the object graph when desirable. Theres many situations and many people out there that broke their head upon that. Maybe I should head on to Eike Steppers &lt;a href="http://wiki.eclipse.org/CDO"&gt;CDO&lt;/a&gt; anyway.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-8921543244729175355?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/8921543244729175355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=8921543244729175355' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8921543244729175355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8921543244729175355'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2008/05/remote-lazy-loading-in-client-server.html' title='Remote lazy loading in client server environments'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-8954661922953913025</id><published>2008-05-18T08:17:00.002+02:00</published><updated>2008-05-18T08:30:39.329+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='EMF'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Distributed P2P EMF</title><content type='html'>What I write today is as ever truly iunfinished vision.&lt;br /&gt; inspired by three things, &lt;a href="http://wiki.eclipse.org/index.php/JFace_Data_Binding"&gt;JFace Databinding&lt;/a&gt;, Eike Steppers work on &lt;a href="http://wiki.eclipse.org/CDO"&gt;CDO&lt;/a&gt;&lt;br /&gt;and some thougts I had while while reading Scott Rosenbergs &lt;a href="http://www.dreamingincode.com/"&gt;Dreaming in code&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;What if we had a distributed object model (based on EMF) thats connected through a peer to peer network, may with a central persistence repository like CDO is. It would be "quite" language neutral as we can think of an EMF implementation in other languages as Scala or even C#. (I have some trouble with NET4J there, have to think of that). What if we promote changes on the model as diffs in a p2p style to all the partial model instances out there ? I mean truly concurrent modification of an distributed object model. (I have some headache when you ask me for transactions, though) Wouldnt that be a nice programming model for multiuser applications ?&lt;br /&gt;&lt;br /&gt;I know this is not really new, other have dreamed of that before. But we have almost everything to do it. And EMF is agood platform for domain object model. It would be a complete different approach to the conventional OLTP ideas. Let me know what you think of it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-8954661922953913025?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/8954661922953913025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=8954661922953913025' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8954661922953913025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8954661922953913025'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2008/05/distributed-p2p-emf.html' title='Distributed P2P EMF'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-6150693165075863055</id><published>2008-05-17T10:55:00.002+02:00</published><updated>2008-05-17T11:10:57.885+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rcp'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='publishing'/><title type='text'>Open source for publishing companies</title><content type='html'>Today I can finally announce that Mango 0.5.2 ist out. Its a GPL'ed software suite based on Eclipse  for the publishing industry. Current features include: Complete CRM and Document management, Book management, Catalogue generator and mailing list integration. Feel free to have a look at it on &lt;a href="http://www.eiswind.de"&gt;http://www.eiswind.de&lt;/a&gt;. Feel free to ask questions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-6150693165075863055?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/6150693165075863055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=6150693165075863055' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/6150693165075863055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/6150693165075863055'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2008/05/open-source-for-publishing-companies.html' title='Open source for publishing companies'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-4917546108061800089</id><published>2008-05-16T12:20:00.002+02:00</published><updated>2008-05-16T12:26:54.794+02:00</updated><title type='text'>Do we need Transfer Objects ?</title><content type='html'>I came across &lt;a href="http://www.agimatec.de/blog/2008/05/transferobjects-generieren/"&gt;http://www.agimatec.de/blog/2008/05/transferobjects-generieren/&lt;/a&gt; today (in german). Roman (?) refers to &lt;a href="http://java.sun.com/blueprints/corej2eepatterns/Patterns/TransferObject.html"&gt;http://java.sun.com/blueprints/corej2eepatterns/Patterns/TransferObject.html&lt;/a&gt; the old transfer object pattern in j2ee. I don't see why we need this anymore with JPA/EJB3. I think theres nothing up to using a consistent domain model on both client an server side. Its the same reason why I dont use GWT, because I cannot transfer my JPA enitites to the client and would agein have to use annoying transfer objects. Maybe it will get better if GWT can handle current Java versions. I would like to hear arguments why one still should use Transfer Objects in a client server environment. IMHO I think its completely unnecessary and overcomplicating things. Comments ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-4917546108061800089?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/4917546108061800089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=4917546108061800089' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4917546108061800089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4917546108061800089'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2008/05/do-we-need-transfer-objects.html' title='Do we need Transfer Objects ?'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-7492729501065679728</id><published>2008-05-13T09:41:00.002+02:00</published><updated>2008-05-13T10:03:33.324+02:00</updated><title type='text'>@Deprecated: The Browser</title><content type='html'>In my last post I wondered loudly about whats going on out there. I thought of an application platform, today I want to put down some ongoing thoughts, inspired by the reactions mainly from David &lt;a href="http://coconut-palm-software.com/the_new_visual_editor/doku.php"&gt;http://coconut-palm-software.com/the_new_visual_editor/doku.php&lt;/a&gt; and Andrey &lt;a href="http://blogs.xored.com/e4/2008/04/swts-road-to-superprotability.html"&gt;http://blogs.xored.com/e4/2008/04/swts-road-to-superprotability.html&lt;/a&gt;. Lets remember what Sun somedays said to promote Java technology: The web is the computer. Still we work with dumb terminal applications, nowadays with technically completely horrifying Ajax hacks. What I think of is a truly web-enabled application platform with a seamless desktop integration. The JVM is I guess the best technology we have to make this possible. Guys, mark the browser as @Deprecated, use the Desktop instead. There was not much to hear about Java OS, as noone needed it. Let the jvm be the basis for the &lt;strong&gt;WEB OS&lt;/strong&gt;. Theres something to do that urgently needs to be done. As trevor noticed in his comment, Microsoft's working on Mesh, yes once again the right direction. We are working with applications, applications are working with data, be it some relational datastore (when will we invent something better there, think of modularity in databases ?) or in a filesystem (That needs to be reinvented too, like mesh tries to do). Today many things work but its still to complicated. For e4 I think we could do something on the application platfrom side. Equinox has already many things, security is in progress. Invent a deployment model, that's idiot proof. What we have now maybe fine for developers, but not for all those people out there that use powerpoint and outlook. It has to be a non - noticeable experience, to point to an URL and run an secure application on your desktop. I do not see the point why we should need another Browser plugin. Make your desktop a browser. And think of the ongoing success of Microsoft Office: Give applications a chance to integrate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-7492729501065679728?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/7492729501065679728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=7492729501065679728' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/7492729501065679728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/7492729501065679728'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2008/05/deprecated-browser.html' title='@Deprecated: The Browser'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-4890944619012693308</id><published>2008-05-11T16:51:00.004+02:00</published><updated>2008-05-11T17:19:17.842+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>The Web 2.0 - or are we going the wrong way ?</title><content type='html'>Developing software for 25 years I have seen many troubles. And still I'm learning every day. I followed some news around the eclipse e4 platform, and although it has nothing to do in special with eclipse I wonder where we're heading at. I have to admit that I'm no friend of web software development. I always preferred working with UI frameworks on the rich client side, not only that one gets a better user experience, but I always hated the programming models at least in the java world on the web side. When it comes to HTML I always think of the days when I did UIs on the IBM 3270 Terminal, I really think there not much difference. Now in the days of Ajax I'm completeley horrified of whats going on. Yes, we need rich UIs in the browser, I completely agree with that. I admit that i prototype with RAP right now. I also prototyped with GWT which is quit nice, but the Java 1.4 restriction made me throw it away. RAP at least gives me a somehow proper programming model with SWT. But whats going on behind the scenes, I cannot believe that this is state of the art software engineering. Does anyone even remeber the lessons about client-server computing ? When I look at eclipse e4 I guess the guys wonder the same as I do, which way to go these days. Although I don't have clear technical insight, I see Microsofts Silverlight coming up. Am I provocative enough when I say that we need to throw away the HTML stuff completely ? What we need is a application plattform thats web enabled. In my eyes thats what we really need to invent. Do we ? I always cite webstart when it comes to this point and I wonder why so little folks out there use it. In my own little point of view we need to get rid of the "browser" application. The web has to be integrated in the operating system, wether its windows or linux or anything else. We need to have a consistent rich user experience, we need an integrated application platform on the OS level where the user doesnt even notice deployment. To me all that we have at the moment is a more ore less dirty workaround. We have two dominant runtimes, Microsofts CLI (and although I lead an open source company I like many of their ideas) and the Java VM. But thats not enough, we need an application platform, say like eclipse, that already there on the computers like a browser is today. we need deployment mechanisms that are secure and not even noticable to the users out there. I installed Office, it takes an endless time ! Why make a difference between a web and a desktop application ? In my eyes the future is an integrated platform. Dont build the platform on browser technology. Build a platform and integrate a good old browser for the non believers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-4890944619012693308?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/4890944619012693308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=4890944619012693308' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4890944619012693308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/4890944619012693308'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2008/05/web-20-or-are-we-going-wrong-way.html' title='The Web 2.0 - or are we going the wrong way ?'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-2339837127398336642</id><published>2008-04-07T10:53:00.009+02:00</published><updated>2008-11-13T18:17:28.891+01:00</updated><title type='text'>Generic ValueLists and their defaults</title><content type='html'>&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/_9I62B4X3fK0/R_niH53eb3I/AAAAAAAAAAc/7mYRGPENelY/s1600-h/value.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5186425071314300786" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_9I62B4X3fK0/R_niH53eb3I/AAAAAAAAAAc/7mYRGPENelY/s320/value.jpg" border="0" /&gt;&lt;/a&gt; I came across a typical problem yesterday: I have some domain objects modeled for hibernate/jpa. Above that I have a service layer. The domain objects shouldnt have access to the service layer. Now guess I have a generic model for ValueLists and Values. Everywhere in the model where I need a valueList I simply reference a generic Value. Now the model doesnt know wich ValueList ist references. Now I set the default values on each newly created entity with some generic code: &lt;div&gt;&lt;div&gt;&lt;img id="BLOGGER_PHOTO_ID_5186426278200110978" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_9I62B4X3fK0/R_njOJ3eb4I/AAAAAAAAAAk/ZKnD5cfVUrM/s400/annotation.jpg" border="0" /&gt;So each ValueList has a default Value which I want to be set in the UI o for e.g. on a combo. One way would be to make the different ValueLists different types ( I saw that before) but that means generating a new Type for every new ValueList. So I came to a different solution. I annotate each entity-to-value relation with the name of the corresponding ValueList as you can see. On each new entity I set the default values with some simple generic reflection code as you can see below.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_9I62B4X3fK0/R_nkMJ3eb5I/AAAAAAAAAAs/jD208bKeqBY/s1600-h/CODE.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;for (Method m : o.getClass().getMethods()) {&lt;br /&gt; Annotation a = m.getAnnotation(ValueListName.class);&lt;br /&gt; if (a != null) {&lt;br /&gt;  ValueListName valuelistname = (ValueListName) a;&lt;br /&gt;  ValueList list = service.getValueList(valuelistname.name().name());&lt;br /&gt;  Value defaultValue = list.getDefaultValue();&lt;br /&gt;  if (defaultValue != null) {&lt;br /&gt;    String getterName = m.getName();&lt;br /&gt;    String setterName = "s" + getterName.substring(1);&lt;br /&gt;&lt;br /&gt;    Method setter = o.getClass().getMethod(setterName,Value.class);&lt;br /&gt;    setter.invoke(o, defaultValue);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-2339837127398336642?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/2339837127398336642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=2339837127398336642' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/2339837127398336642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/2339837127398336642'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2008/04/generic-valuelists-and-their-defaults.html' title='Generic ValueLists and their defaults'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_9I62B4X3fK0/R_niH53eb3I/AAAAAAAAAAc/7mYRGPENelY/s72-c/value.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-1733891996845999274</id><published>2008-01-28T15:35:00.000+01:00</published><updated>2008-01-28T15:41:30.663+01:00</updated><title type='text'>Remote Collaboration</title><content type='html'>How many of us leave home on monday and stay in a dumb hotel for the week ? I can't believe it. When I set of in the morning all those business people on the train. I really wonder why its so hard for the customers to do remote contracts. All the open source projects demonstrate us that its working perfectly. And tool support (think of Jazz) is getting better all the time. I made some experience with remote collaboration last year and it was really great. We met every two weeks, we had phone conferences all the time and the rest was up to bugzilla. I do not understand why all those folks outside are willing to do this kind of job. No matter what, you cant give me enough money to stay away from my family all week long. Its just business I know, but if we would simply refuse to do it, maybe the market recognizes ... :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-1733891996845999274?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/1733891996845999274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=1733891996845999274' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/1733891996845999274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/1733891996845999274'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2008/01/remote-collaboration.html' title='Remote Collaboration'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4243137685413731189.post-8820007487649478182</id><published>2008-01-28T12:52:00.000+01:00</published><updated>2008-01-28T13:01:39.000+01:00</updated><title type='text'>Xtext first steps</title><content type='html'>Yep, this weekend I started out a prototype for my domain model generation with XText (part of openArchitectureWare). Up to now I have the JPA Entities/ JavaBeans (Databinding) generated with HiberObjects but as my model grew bigger it came to some limitations in performance and usability. So I had some experiments with UML model, but I was not satisfied as its very annoying to attach all those stereotypes and tagged values needed for JPA generation. So I came across XText and started to build my own DSL for this matter. I had some trouble getting started, as the generator doesn't alwas work nice,had to delete everything and start from scratch many times. Once I had some understanding of the BNF notation Xtext uses I quickly had a simple prototype for declaring JPA entities. As Xtext generates an EMF model from the model script, it easy to build a code generator on that, at least if you have an idea of the Xpand language. So I will put some more work in the language and if everything works as nicely as up to now I will model my domain with the new language and drop Hiberobjects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4243137685413731189-8820007487649478182?l=thomaskratz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thomaskratz.blogspot.com/feeds/8820007487649478182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4243137685413731189&amp;postID=8820007487649478182' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8820007487649478182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4243137685413731189/posts/default/8820007487649478182'/><link rel='alternate' type='text/html' href='http://thomaskratz.blogspot.com/2008/01/xtext-first-steps.html' title='Xtext first steps'/><author><name>Thomas Kratz</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-TlQ7lq6rp3Q/AAAAAAAAAAI/AAAAAAAADSI/lGeCI6834t8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
