<?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-1013943301267331946</id><updated>2012-01-23T09:41:08.628+01:00</updated><category term='Python'/><category term='Mockito'/><category term='Mocking'/><category term='Bamboo'/><category term='GWT'/><category term='OSGi'/><category term='Profiling'/><category term='EMF'/><category term='Clojure'/><category term='Logging'/><category term='UML'/><category term='maven'/><category term='JDT'/><category term='PDE'/><category term='XRay'/><category term='Java'/><category term='Software Visualization'/><category term='Groovy'/><category term='Testing'/><category term='xUnit'/><category term='PHP'/><category term='Scala'/><category term='STS'/><category term='JMock'/><category term='Ruby'/><category term='AWK'/><category term='Eclipse'/><category term='OSGi agile'/><category term='Spring'/><category term='JUnit'/><category term='Design by Contract'/><title type='text'>Welcome to my scratchpad</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>76</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-7927658651396486111</id><published>2012-01-23T09:40:00.001+01:00</published><updated>2012-01-23T09:41:08.635+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Eclipse Equinox ECF Unpack *pack.gz</title><content type='html'>If you downloading Eclipse ECF as a ZIP file, the plugins folder in the ZIP contains pack200 compressed JAR files. The pack200 compressed files ends with *.pack.gz. The ECF ZIP distribution contains the same content like a normal Eclipse P2 update site. &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/-x9DrdOPQNCI/Tx0b1zoRRQI/AAAAAAAAA8M/vzcrARZdxGo/s1600/ECF-Plugins-Content.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="299" src="http://4.bp.blogspot.com/-x9DrdOPQNCI/Tx0b1zoRRQI/AAAAAAAAA8M/vzcrARZdxGo/s400/ECF-Plugins-Content.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;If you like to use Eclipse Equinix ECF bundles without P2 or Eclipse you must unpack the pack200 OSGi bundels. For that eclipse provides a tool called "org.eclipse.equinox.p2.jarprocessor". Here a small bash script to show how to extract the OSGi bundles from the pack200 files. &lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1661775.js?file=ecf-unpack.sh"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Eclipse Pack200 Documentation - &lt;a href="http://wiki.eclipse.org/Pack200"&gt;http://wiki.eclipse.org/Pack200&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Eclipse ECF Download Page - &lt;a href="http://www.eclipse.org/ecf/downloads.php"&gt;http://www.eclipse.org/ecf/downloads.php&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-7927658651396486111?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/7927658651396486111/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2012/01/eclipse-equinox-ecf-unpack-packgz.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7927658651396486111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7927658651396486111'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2012/01/eclipse-equinox-ecf-unpack-packgz.html' title='Eclipse Equinox ECF Unpack *pack.gz'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-x9DrdOPQNCI/Tx0b1zoRRQI/AAAAAAAAA8M/vzcrARZdxGo/s72-c/ECF-Plugins-Content.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-316770726721727598</id><published>2011-12-10T13:46:00.001+01:00</published><updated>2011-12-10T13:47:19.064+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Mockito'/><category scheme='http://www.blogger.com/atom/ns#' term='Mocking'/><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><title type='text'>Mockito the Java Standard Mocking Framework?</title><content type='html'>I used a long time JMock and I really love it, I also used a lot EasyMock because of the answer and capture feature. About a year ago I found the mocking framework mockito. After that I was able to inspire a few work colleagues to use mockito in their projets. I play around with it again and my conclusion is: Mockito is at the moment the best mocking framework for Java and I'm not alone.&lt;br /&gt;&lt;br /&gt;"&lt;i&gt;We decided during the main conference that we should use JUnit 4 and Mockito because we think they are the future of TDD and mocking in Java&lt;/i&gt;" - Dan North, the originator of BDD&lt;br /&gt;&lt;br /&gt;Mockito has a clean syntax and the patterns and ideas behind mockito make tests more maintainable. Mockito has the power of EasyMock but a smarter syntax.  Today I build for my self a simple JUnit test as mockito cheat sheet. So you convince yourself with Mockito and the smart API see the demo test bellow.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1455067.js?file=EchoTest.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;b&gt;Links&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mockito Project Site &lt;br /&gt;http://code.google.com/p/mockito/&lt;/li&gt;&lt;li&gt;Documentation Mockito &lt;br /&gt;http://docs.mockito.googlecode.com/hg/latest/org/mockito/Mockito.html&lt;/li&gt;&lt;li&gt;GitHub Project with the Cheat Sheet Test &lt;br /&gt;https://github.com/tux2323/mockito-cheat-sheet&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-316770726721727598?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/316770726721727598/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/12/mockito-java-standard-mocking-framework.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/316770726721727598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/316770726721727598'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/12/mockito-java-standard-mocking-framework.html' title='Mockito the Java Standard Mocking Framework?'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-1663911742434403110</id><published>2011-11-23T09:49:00.001+01:00</published><updated>2011-11-23T09:52:26.355+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mocking'/><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><title type='text'>Test Doubles and Mocking Patterns</title><content type='html'>Yesterday I refactored a unit test with over 2000 lines of code, now the test has around 900 lines of code. One pattern I found in the test was that for every kind of test double a mock object was used. &lt;br /&gt;&lt;br /&gt;I prefer the following test design rule for mock objects and test doubles. Object which contains logic e.g. of type service, factory or repository should be mocked instead of DTOs, value objects or entities (plain Java Beans) with getters and setters e.g. configuration objects this kind of object should never be mocked.  &lt;br /&gt;&lt;br /&gt;Here small example, a test with to much mocking, please don't write such kind of tests:&lt;br /&gt;&lt;script src="https://gist.github.com/1388179.js?file=SaleServiceImplTest.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;This simple unit test above has to much mocking logic and should be refactored to this test:&lt;br /&gt;&lt;script src="https://gist.github.com/1388202.js?file=SaleServiceImplTest.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;If you like you could use the builder pattern for the simple objects like sale to get the test a little bit nicer (see the links for eclipse tooling).  A smell is when you need to mock classes, in most cases then you should use another test double pattern for this kind of objects, or something with the design of the SUT is wrong. &lt;br /&gt;&lt;br /&gt;What I like to say is you should not always use our preferred mocking framework to create a mock object as test double for everything. There are situations where mock object I believe are a test design anti pattern / smell.  Think about stubs and dummy object before creating a mock object and read the great xUnit test pattern book “xUnit Test Patterns” from Gerard Meszaros. Then you are on the right way to get an agile tester ;-)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;xUnit Paterns - &lt;a href="http://xunitpatterns.com/"&gt;http://xunitpatterns.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Test Double - &lt;a href="http://xunitpatterns.com/Test%20Double.html"&gt;http://xunitpatterns.com/Test%20Double.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Builder Eclipse Plugin - &lt;a href="http://code.google.com/p/fluent-builders-generator-eclipse-plugin/"&gt;http://code.google.com/p/fluent-builders-generator-eclipse-plugin/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-1663911742434403110?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/1663911742434403110/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/11/test-doubles-and-mocking-patterns.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/1663911742434403110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/1663911742434403110'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/11/test-doubles-and-mocking-patterns.html' title='Test Doubles and Mocking Patterns'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-8509810420244865439</id><published>2011-11-17T13:00:00.003+01:00</published><updated>2011-11-17T13:43:45.311+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><title type='text'>OSGi Users' Forum Germany Community Event 2011</title><content type='html'>This year the OSGi UFG Event was based in Cologne. The event was great a lot of new input. My favorite topics were PojoSR and OBR (OSGi Bundle Repository). A great podiums discussion on OBR there was a great discussion about commercial bundle repositories "App Store for Bundles".&lt;br /&gt;&lt;br /&gt;Richard Nicholson (OSGi Alliance President) could not make it to event, because he has an important meeting in UK . So we shortly changed the Keynote "OSGi Alliance Update" to "OSGi Community Update". In this session I tried to give an overview what happens in the OSGi World/Community in the year 2011. I believe I missed a lot of stuff, but when I prepared the session I become the feeling 2011 was a lot of work in OSGi Community done. I think OSGi was not much in the news but a lot of new open source projects and also a lot of progress in the OSGi specification was done.  For example the enterprise specification was finished, the OSGi Core specification 4.3 was released in April, the package admin is now deprecated, we have now a much better API the Wire API. Also in the tooling area much happens in this year. I think BNDTools could become the standard tooling for OSGi. Hope Neil well release the BNDTools Version 1.0.0 this week ;-)&lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px" id="__ss_10182459"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/OSGiUsers/osgi-alliance-update-10182459" title="OSGi Community Update" target="_blank"&gt;OSGi Community Update&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/10182459" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/OSGiUsers" target="_blank"&gt;OSGiUsers&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;The first session on the UFG was about OSGI in Healthcare applications and smart cards. The talk covers the n-pad product which is used for the German "Gesundheitkarte".  Stephan Hoffmann-Emden and Andreas Klotz shows in short live demo how there OSGi based smartcard reader works. They have built a PKI Service for their OSGi platform. Is there a standard for PKI / crypto handling in OSGi?&lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px" id="__ss_10182592"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/OSGiUsers/osgi-userforum-ndesign" title="n-pat: Modulare Anwendungsplattform mit Smartcards" target="_blank"&gt;n-pat: Modulare Anwendungsplattform mit Smartcards&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/10182592" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/OSGiUsers" target="_blank"&gt;OSGiUsers&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;In the next session Andreas Kraft cover the topic "OSGi in the Residential Market". Andreas gives a good overview which topics will be in the OSGi  Residential specification. The talks give also a short introduction in the OSGi Alliance Processes  e.g. what is an RFP and so on.&lt;br /&gt;&lt;br /&gt;After a small coffee break Holger Hoffstätte gives a really nice overview on OBR. His statement the important thing about OBR is the model. I think OBR will fix a lot of problems in OSGi tooling and deployment. I think it will also play a rule in the SEITENBAU OSGi projects. OBR solves a lot of problems we have at SEITENBAU and we now have solved by custom solutions. So we need it right now.   &lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px" id="__ss_10192111"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/OSGiUsers/hilf-mir-obr-du-bist-meine-letzte-hoffnung" title="Hilf mir, OBR - Du bist meine letzte Hoffnung!" target="_blank"&gt;Hilf mir, OBR - Du bist meine letzte Hoffnung!&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/10192111" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/OSGiUsers" target="_blank"&gt;OSGiUsers&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;In the podiums discussion "OSGi Bundle Repository versus Apache Maven Repository" we have lot of good discussion. Okay the title was not perfect ;-).&lt;br /&gt;&lt;br /&gt;First session in the second track after launch was PojoSR my favorite session. Karl Pauls explains why we need PojoSR and how to migrate Projects to OSGi by using PojoSR. He also covers very well the problems when migrating existing projects to OSGi. I think Pauls statement is absolute true  PojoSR brings µServices to the rest of us.&lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px" id="__ss_10185575"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/OSGiUsers/pojosr-or-osgi-services-for-the-rest-of-us" title="PojoSR or OSGi (µ)Services For the Rest of Us" target="_blank"&gt;PojoSR or OSGi (µ)Services For the Rest of Us&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/10185575" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/OSGiUsers" target="_blank"&gt;OSGiUsers&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Ralf Sternberg and Frank Appel shows with a great live demo how to use RAP with OSGi. They also explains how RAP application benefit by using OSGi. I didn’t know the actual RAP Version is based on OSGi services and do not use the eclipse plugin registry. I hope will have a little free time to try and play around with the actual RAP version. In the session Ralf and Frank shows also a RAP based smartphone client.&lt;br /&gt;&lt;br /&gt;After the RAP session Stefan Kachel introduce the eclipse project Riena. Riena makes the SWT UI development much easier. There is also an eclipse toolbox provided by the Riena project, which makes the development of Riena based applications much easier. Stefan shows how to use Riena by a running example application. &lt;br /&gt;&lt;br /&gt;Kai Hackbarth gives a session about "OSGi for In-Vehicle Systems". He explains how car sellers benefit  by using OSGi as basic platform for the products. In the session Kai gives also a nice overview of the alternative platforms like android which are used in vehicle systems. Good news there are already OSGi deployments, Kai gives some examples where OSGi is already deployed.&lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px" id="__ss_10187608"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/OSGiUsers/osgi-for-invehicle-systems" title="OSGi for In-Vehicle Systems " target="_blank"&gt;OSGi for In-Vehicle Systems &lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/10187608" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/OSGiUsers" target="_blank"&gt;OSGiUsers&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Last but not least a really cool session on the topic how normal web application could benefit by using OSGi from Jan Ehrhardt. Jan shows the reality, the problems and why in many cases normal web applications not benefit by using OSGi. In the second part of his session he shows in which situations and how web application could benefit by using OSGi. In the last part of his session he shows how OSGi could be used in different Java EE environments e.g. embedded in tomcat, next generation EE applications server or OSGi as standalone application e.g. by using Apache Karaf.&lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px" id="__ss_10200028"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/derjan1982/erweiterbare-webanwendungen-mit-osgi" title="Erweiterbare Webanwendungen mit OSGi" target="_blank"&gt;Erweiterbare Webanwendungen mit OSGi&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/10200028" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/derjan1982" target="_blank"&gt;Jan Ehrhardt&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Was again a great Users Forum Germany community event with great sessions thanks to the audience and the speakers. Only the date was not perfect chosen there where parallel in London UK a face to face meeting. Next time we will make it better I believe ;-) &lt;br /&gt;&lt;br /&gt;In next couple of day I will make the last slides available I hope via slideshare and I will also linkt the link to the slides from the UFG website.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links&lt;/b&gt;&lt;br /&gt;&lt;a href="http://germany.osgiusers.org/Main/OSGiUFGTreffen2011"&gt;http://germany.osgiusers.org/Main/OSGiUFGTreffen2011&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.slideshare.net/OSGiUsers/presentations"&gt;http://www.slideshare.net/OSGiUsers&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-8509810420244865439?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/8509810420244865439/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/11/osgi-users-forum-germany-community.html#comment-form' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/8509810420244865439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/8509810420244865439'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/11/osgi-users-forum-germany-community.html' title='OSGi Users&apos; Forum Germany Community Event 2011'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-2323535093600817304</id><published>2011-10-30T18:29:00.003+01:00</published><updated>2011-10-30T18:32:05.719+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Spring Dependencies Structure</title><content type='html'>Based on the &lt;a href="http://ogrigas.eu/spring/2009/12/diagram-of-spring-3-0-module-dependencies"&gt;"Diagram of Spring 3.0 module dependencies" from Osvaldas Grigas&lt;/a&gt; and the spring poms  I made a simple yUML diagram.  The diagram gives a short overview of the spring components and there dependencies. The green marked component is the core functionality of spring. The blue marked components provides functions based on the spring core.  &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Bz44uGnwvJQ/Tq2H1otujGI/AAAAAAAAA4o/clGSMpip5Qk/s1600/Spring+Framework+Overview.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-Bz44uGnwvJQ/Tq2H1otujGI/AAAAAAAAA4o/clGSMpip5Qk/s1600/Spring+Framework+Overview.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Here the source of the yUML diagram, if you like to add some aspects or change something feel free and reuse it.&lt;br /&gt;&lt;script src="https://gist.github.com/1326151.js?file=spring.yuml"&gt;&lt;/script&gt;&lt;br /&gt;&lt;b&gt;Links&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Osvaldas Grigas,&amp;nbsp;Diagram of Spring 3.0 module dependencies - &lt;a href="http://ogrigas.eu/spring/2009/12/diagram-of-spring-3-0-module-dependencies"&gt;http://ogrigas.eu/spring/2009/12/diagram-of-spring-3-0-module-dependencies&lt;/a&gt;&lt;/li&gt;&lt;li&gt;yUML - &lt;a href="http://yuml.me/"&gt;http://yuml.me&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-2323535093600817304?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/2323535093600817304/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/10/spring-dependencies-structure.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2323535093600817304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2323535093600817304'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/10/spring-dependencies-structure.html' title='Spring Dependencies Structure'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Bz44uGnwvJQ/Tq2H1otujGI/AAAAAAAAA4o/clGSMpip5Qk/s72-c/Spring+Framework+Overview.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-5999581183669233015</id><published>2011-10-27T20:45:00.000+02:00</published><updated>2011-10-27T20:45:59.631+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Spring Customize Annotation Scanning</title><content type='html'>A really nice feature in Spring 3.0 is to have custom annotation. Why do you like to have own annotations? Because you could provide some semantic details about the component types. For example when you have a spring bean which is facade, why not use a annotation with the name facade?&lt;br /&gt; &lt;br /&gt;Here the spring wiring for beans with the annotation facade: &lt;br /&gt;&lt;script src="https://gist.github.com/1320423.js?file=customize-context.xml"&gt;&lt;/script&gt;&lt;br /&gt;The facade annotation:&lt;br /&gt;&lt;script src="https://gist.github.com/1320429.js?file=Facade.java"&gt;&lt;/script&gt;&lt;br /&gt;And here a demo facade spring bean:&lt;br /&gt;&lt;script src="https://gist.github.com/1320433.js?file=AddressFacadeImpl%20.java"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-5999581183669233015?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/5999581183669233015/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/10/spring-customize-annotation-scanning.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/5999581183669233015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/5999581183669233015'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/10/spring-customize-annotation-scanning.html' title='Spring Customize Annotation Scanning'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-8954378160422027852</id><published>2011-10-27T20:23:00.002+02:00</published><updated>2011-10-27T20:30:08.410+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Spring DI with Java Standard Annotations</title><content type='html'>In Spring it is easy to use the Java annotations for dependency injection (JSR 330), the Java annotation for post construct and pre destroy (JSR 250) and the Java API and Annotations for validation (JSR 303). &lt;br /&gt;&lt;br /&gt;Why should I use this standard APIs and annotation in a Spring based application? Because when using this standards, the code has only dependency on standard APIs (javax). And the code could also be used in another implementation e.g. of the JSR 330.&lt;br /&gt;&lt;br /&gt;Here a simple code snippet, which shows how to use this three Java standards in a spring bean.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1320360.js?file=PersonServiceImpl.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;And here the spring context configuration.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1320368.js?file=core-context.xml"&gt;&lt;/script&gt;&lt;br /&gt;You could also mix the Spring annotations with the JSR 330 annotation. I think a good strategy is to use the JSR 330 annotation when every its possible and makes sense. In some cases you would use the spring specific annotations.&lt;br /&gt;&lt;br /&gt;Which annotations do you prefer to use in a Spring application?&lt;br /&gt;&lt;br /&gt;For more details see the spring documentation:&lt;br /&gt;&lt;a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/"&gt;http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-8954378160422027852?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/8954378160422027852/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/10/spring-di-with-java-standard.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/8954378160422027852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/8954378160422027852'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/10/spring-di-with-java-standard.html' title='Spring DI with Java Standard Annotations'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-165113199966809174</id><published>2011-10-25T22:41:00.002+02:00</published><updated>2011-10-26T13:22:01.581+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><title type='text'>OSGi - How to get the Bundle Context in a Java Object Instance</title><content type='html'>In most cases I use DS components, when I need the bundle context instance, the DS Framework injects me the bundle context in the activation method of my component. In most components I don’t like to have a dependency on OSGi APIs in my DS components, but thats another topic. &lt;br /&gt;&lt;br /&gt;But sometimes I need an OSGi service or the BundleContext also in non OSGi / DS controlled class. E.g. when I like to write a JAX-WS web service class. There are many ways to get the Bundle Context into this type of Objects. One is to get the Bundle Context from the ClassLoader (which should implements the BundleReference interface). Here a short demo code snippet how to get the bundle API and also the bundle context of a class.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1314120.js?file=MyDemoClass.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Comment: "However, this requires the code to have the permission to access the class loader." OSGi Core Specification see section 3.8.9.&lt;br /&gt;&lt;br /&gt;Better implementation (thanks at Holger for the hint) is by using the OSGi FrameworkUtil class. See the second code snippet:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1316073.js?file=MyDemoClass.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Another solution could be a holder class with a static field, which holds the actual bundle context instance. This also works when the code does not have the permission to access the class loader.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-165113199966809174?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/165113199966809174/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/10/osgi-how-to-get-bundle-context-in-java.html#comment-form' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/165113199966809174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/165113199966809174'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/10/osgi-how-to-get-bundle-context-in-java.html' title='OSGi - How to get the Bundle Context in a Java Object Instance'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-7750627648933178629</id><published>2011-10-17T11:21:00.000+02:00</published><updated>2011-10-17T11:21:05.290+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><title type='text'>OSGi RFC-0172 Declarative Services Annotations Runtime?</title><content type='html'>I had with Peter Kriens and Neil Bartlett on Twitter an interesting discussion about "Why the DS annotations in the DRAFT RFC-0172 Declarative Services Annotations should be process at runtime or compile time". &lt;br /&gt;&lt;br /&gt;Here in this post I like to show my opinion why to process annotations at runtime.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Runtime Annotations kills DS lazyness?&lt;/b&gt;&lt;br /&gt;Peter says at twitter "One of the best things about DS is its lazyness, we do not want to kill this". &lt;br /&gt;&lt;br /&gt;My option is that with runtime annotations we do not kill the DS lazyness.&lt;br /&gt;I think we do not need to scan the bundles classes and load them all, to find the DS components in the system.&amp;nbsp;The simplest solution is to have the components with the full qualified class name in the bundle MANIFEST.MF here a sample code snippet:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1286639.js?file=MANIFEST.MF"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;The next thing is we need a way to read the annotations without loading the class into the class loader to support bundles e.g. with "Bundle-ActivationPolicy: lazy". All information for the DS model is in the system in the byte code (when we use runtime annotations). Because of that, we can read the information for the DS components from the bytecode. Reading annotations from the bytecode is a simple way to provide all the lazyness we have with the XML model. To show this I create a very simple prototype which use the javassist library to process the annotation at runtime in a OSGi framework see &lt;a href="https://github.com/tux2323/annotation.processing.osgi/"&gt;https://github.com/tux2323/annotation.processing.osgi/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Reading Annotations at Runtime is a Performance Issue?&lt;/b&gt;&lt;br /&gt;Peter says: "So byte code scanning does not take any time?"&lt;br /&gt;&lt;br /&gt;XML reading at runtime does also take time; do you think reading XML can be done faster than reading byte code? All information are in the byte code is reading the byte code really a performance issue? I believe we could make reading the information for the DS components from the byte code almost as fast as reading it from the XML files.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Detect errors early?&lt;/b&gt;&lt;br /&gt;Another statement from Peter pro XML model for DS is "Detect errors early".&lt;br /&gt;&lt;br /&gt;Yes when the annotation is process at runtime, we won’t also have a static testing tool like bnd which checks at compile time, if everything is okay with the model and shows the problems in the IDE. Why do we need the XML model for doing this?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Why runtime Annotation?&lt;/b&gt;&lt;br /&gt;Neil asked me on Twitter "Why would you do at runtime what you can do better at build time?".&lt;br /&gt;&lt;br /&gt;My statement is:  I would like to process the annotations at runtime, because I don't like to have information in two places in my system, only when there are technical reasons, for doing this. Because of that I think it would be nice to have runtime annotations.&lt;br /&gt;&lt;br /&gt;When we have runtime annotations then the SCR Implementation can also decide to support them at runtime or generate at build time the XML Model e.g. via bnd. The most Java frameworks (EJB3, JAXB, JAX-RS...) use runtime annotations for their components, why do OSGi like to go a different way?"&lt;br /&gt;&lt;br /&gt;&lt;b&gt;XML and Annotations&lt;/b&gt;&lt;br /&gt;Neil asks me on twitter "Sorry I don't understand. You want the runtime to look at both the annotations *and* the XML?"&lt;br /&gt;&lt;br /&gt;Short answer: yes. &lt;br /&gt;&lt;br /&gt;Long answer: When we support runtime annotations to describe DS components, which should be process at runtime, we must also support the old XML way to be backward compatible. So I like to have both XML and annotations like in the Spring framework. In Spring you could describe a bean via XML and if you like you can describe the spring bean by annotations.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Thanks&lt;/b&gt;&lt;br /&gt;Thanks at Neil and Peter for the great discussion. At this point again I would like to say when you use at the moment DS you should use the cool annotations from BND. This is at the moment the best way to develop DS components, I think.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;RFC-0172 Declarative Services Annotations -&amp;nbsp;&lt;a href="http://www.osgi.org/download/osgi-early-draft-2011-09.pdf"&gt;http://www.osgi.org/download/osgi-early-draft-2011-09.pdf&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Neil Bartlett @twitter&amp;nbsp;&amp;nbsp;-&lt;a href="http://twitter.com/#!/njbartlett"&gt; http://twitter.com/#!/njbartlett&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Peter Kriens&amp;nbsp;@twitter&amp;nbsp;- &lt;a href="http://twitter.com/#!/pkriens"&gt;http://twitter.com/#!/pkriens&lt;/a&gt;&lt;/li&gt;&lt;li&gt;javassist - &lt;a href="http://www.jboss.org/javassist"&gt;http://www.jboss.org/javassist&lt;/a&gt;&lt;/li&gt;&lt;li&gt;BND - &lt;a href="http://www.aqute.biz/Bnd/Bnd"&gt;http://www.aqute.biz/Bnd/Bnd&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Simple OSGi&amp;nbsp;Annotation&amp;nbsp;Processing&amp;nbsp;Prototype - &lt;a href="https://github.com/tux2323/annotation.processing.osgi/tree/master/annotation.processing.osgi"&gt;https://github.com/tux2323/annotation.processing.osgi/tree/master/annotation.processing.osgi&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-7750627648933178629?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/7750627648933178629/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/10/osgi-rfc-0172-declarative-services.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7750627648933178629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7750627648933178629'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/10/osgi-rfc-0172-declarative-services.html' title='OSGi RFC-0172 Declarative Services Annotations Runtime?'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-6428685837387220657</id><published>2011-10-15T16:41:00.000+02:00</published><updated>2011-10-15T16:41:02.351+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><title type='text'>JUnit &gt; 4.10 Rules</title><content type='html'>It's been a long time ago that I last wrote about JUnit. A number of improvements and releases have been made. There have been lot improvements around the topic JUnit rules added. Today I had little bit free time to look into this new JUnit features.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Class Rules&lt;/span&gt;&lt;br /&gt;Now there are also class rules in JUnit. A class rule extends the idea of test method-level rules and can be used to add logic, which should be invoked for or after all test methods. A simple use-case could be, when you need a HTTP server in the test, you could have a class rule to start and stop the server. Here a simple code snippet that starts and stops a HTTP server. &lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1289639.js?file=ServerTest.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Test Sequence&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Start HTTP Server&lt;/li&gt;&lt;li&gt;Run Test : invokeServletWithRequestOne()&lt;/li&gt;&lt;li&gt;Run Test : invokeServletWithRequestTwo()&lt;/li&gt;&lt;li&gt;Stop HTTP Server&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Composition of JUnit Rules with RuleChain Feature&lt;/span&gt;&lt;br /&gt;In JUnit 4.10 now you can order rules via a rule chain. This is really nice to reuse rules and combine them. Here a simple RuleChain code snippet.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1289643.js?file=ServletTest.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Test Sequence&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Start new Jetty Server (rule = ServerRule)&lt;/li&gt;&lt;li&gt;Create new Servlet Instance and add it to the Server (rule = ServletRule)&lt;/li&gt;&lt;li&gt;Run Test : invokeServletWithRequestOne()&lt;/li&gt;&lt;li&gt;Remove Servlet from Server (rule = ServletRule)&lt;/li&gt;&lt;li&gt;Stop Jetty Server (rule = ServerRule)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Start new Jetty Server (rule = ServerRule)&lt;/li&gt;&lt;li&gt;Create new Servlet Instance and add it to the Server (rule = ServletRule)&lt;/li&gt;&lt;li&gt;Run Test : invokeServletWithRequestTwo()&lt;/li&gt;&lt;li&gt;Remove Servlet from Server (rule = ServletRule)&lt;/li&gt;&lt;li&gt;Stop Jetty Server (rule = ServerRule)&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Interface MethodRule is deprecated&lt;/span&gt;&lt;br /&gt;The type MethodRule is now deprecated because the name makes no sense anymore because now we have class and method-level rules. A rule now should be of the type TestRule. &lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Thanks&lt;/span&gt;&lt;br /&gt;Thanks at David Saff and Kent Beck for the work on JUnit and the cool rule features we have now in JUnit.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;JUnit GitHub Project - &lt;a href="https://github.com/KentBeck/junit"&gt;https://github.com/KentBeck/junit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;JUnit Portal - &lt;a href="http://www.junit.org/"&gt;http://www.junit.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Blog Post about JUnit Rule and Logging - &lt;a href="http://tux2323.blogspot.com/2011/06/test-logging-via-junit-rule.html"&gt;http://tux2323.blogspot.com/2011/06/test-logging-via-junit-rule.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-6428685837387220657?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/6428685837387220657/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/10/junit-410-rules.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/6428685837387220657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/6428685837387220657'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/10/junit-410-rules.html' title='JUnit &gt; 4.10 Rules'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-4723875065104767101</id><published>2011-10-13T23:50:00.001+02:00</published><updated>2011-10-13T23:52:07.676+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><title type='text'>OSGi Declarative Service Naming and Implementation Patterns</title><content type='html'>Here some simple OSGi declarative service (DS) naming and implementation patterns I prefer to use.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;1. Naming Pattern - Component Name&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;A DS component name should end with Component &lt;i&gt;e.g. RobotComponent&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;public&lt;/b&gt; &lt;b&gt;class&lt;/b&gt; RobotComponent &lt;b&gt;implements&lt;/b&gt; Robot {}&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;2. Naming Pattern - Start and Stop Method&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;For methods, which should be called on, activate or deactivate a DS component the following names should be used:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;start(…) and stop(…)&lt;/li&gt;&lt;li&gt;startup(…) and shutdown(…)&lt;/li&gt;&lt;li&gt;initialize(…) and deinitialize (…)&lt;/li&gt;&lt;li&gt;activate(…) and deactivate(…)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;b&gt;public&lt;/b&gt;&amp;nbsp;&lt;b&gt;class&lt;/b&gt;&amp;nbsp;RobotComponent&amp;nbsp;&lt;b&gt;implements&lt;/b&gt;&amp;nbsp;Robot&amp;nbsp;&lt;/i&gt;&lt;i&gt;{&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;b&gt;public&lt;/b&gt;&amp;nbsp;&lt;b&gt;void&lt;/b&gt;&amp;nbsp;&lt;/i&gt;activate&lt;i&gt;(){...}&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;b&gt;public&lt;/b&gt;&amp;nbsp;&lt;b&gt;void&lt;/b&gt;&amp;nbsp;&lt;/i&gt;deactivate&lt;i&gt;()&lt;/i&gt;&lt;i&gt;{...}&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;}&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;3. Naming Pattern - Service Lifecycle Methods&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;For the service lifecycle method the following method name patterns should be uses:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;bind${serviceName}(…) and unbind${serviceName}(…)&lt;/li&gt;&lt;li&gt;set${serviceName}(…) and unset${serviceName}(…)&lt;/li&gt;&lt;li&gt;add${serviceName}(…) and remove${serviceName}(…)&lt;/li&gt;&lt;/ul&gt;&lt;i&gt;e.g. void bindRobot(Robot robot) and unbindRobot(Robot robot)&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;DS method name for bind more then one service instance 0..n or 1..n should become the name add* and remove*.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;i&gt;&lt;b&gt;public&lt;/b&gt;&amp;nbsp;&lt;b&gt;class&lt;/b&gt;&amp;nbsp;RobotComponent&amp;nbsp;&lt;b&gt;implements&lt;/b&gt;&amp;nbsp;Robot&amp;nbsp;&lt;/i&gt;&lt;i&gt;{&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;public&lt;/b&gt; &lt;b&gt;void&lt;/b&gt; setEngine(Engine engine){...}&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;b&gt;public&lt;/b&gt; &lt;b&gt;void&lt;/b&gt; unsetEngine(Engine engine)&lt;/i&gt;&lt;i&gt;{...}&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;b&gt;public&lt;/b&gt; &lt;b&gt;void&lt;/b&gt; addSensor(Sensor sensor)&lt;/i&gt;&lt;i&gt;{...}&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;b&gt;public&lt;/b&gt; &lt;b&gt;void&lt;/b&gt; removeSensor(Sensor sensor)&lt;/i&gt;&lt;i&gt;{...}&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;}&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;4. Implementation Pattern - Behavior Symmetry&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;When there is logic for start (activate) or set something there should always be logic for stopping or unset.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;5. Implementation Pattern - Avoid Implicit Immediate Components&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;When a DS component not provide a Service then the component is immediate activate when all reference service are available. When the code is changed and the component know provide a service, then the component is activated when the first client component like to use the service. When a component should be activate immediate then I think avoid implicitly immediate components add always immediate=true.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;6. Implementation Pattern - Use Annotations for DS Components&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Use BND or Apache Felix SCR annotations to describe DS components.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Links&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Apache Felix Maven SCR - &lt;a href="http://felix.apache.org/site/apache-felix-maven-scr-plugin.html"&gt;http://felix.apache.org/site/apache-felix-maven-scr-plugin.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;BND Annotation - &lt;a href="http://www.aqute.biz/Bnd/Components"&gt;http://www.aqute.biz/Bnd/Components&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-4723875065104767101?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/4723875065104767101/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/10/osgi-declarative-service-naming-and.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/4723875065104767101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/4723875065104767101'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/10/osgi-declarative-service-naming-and.html' title='OSGi Declarative Service Naming and Implementation Patterns'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-2922264392430443998</id><published>2011-10-12T09:33:00.003+02:00</published><updated>2011-10-12T09:35:08.936+02:00</updated><title type='text'>10 min - Domain Driven Design (lightning talk )</title><content type='html'>Here my slides from my lightning talk about Domain Driven Design. The slides I have not really needed in the lightning talk. Because my notebook crashed and I only could show slide number one. And because of that I only used the first slide. With the first slide I give a 10 minutes overview of domain driven design, keywords, patterns and core ideas. I think this basics ideas behind domain driven design every software developer should know. &lt;br /&gt;&lt;br /&gt;&lt;div id="__ss_9646364" style="width: 425px;"&gt;&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/tux2323/domain-driven-design-10min" target="_blank" title="Domain Driven Design - 10min"&gt;Domain Driven Design - 10min&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/9646364" width="425"&gt;&lt;/iframe&gt; &lt;br /&gt;&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/tux2323" target="_blank"&gt;Christian Baranowski&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;I think the following patterns, keywords and ideas should be known by everyone how developed OO software:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ubiquitous Language&lt;/li&gt;&lt;li&gt;Domain&lt;/li&gt;&lt;li&gt;Domain Layer&lt;/li&gt;&lt;li&gt;Entities&lt;/li&gt;&lt;li&gt;Value Object&lt;/li&gt;&lt;li&gt;Repository&lt;/li&gt;&lt;li&gt;Aggregate&lt;/li&gt;&lt;li&gt;Service&lt;/li&gt;&lt;li&gt;Factory (e.g. Dependency Injection, Spring, Google Guice...)&lt;/li&gt;&lt;li&gt;Assertion&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;For those who could not be in my lighting talk, should have a look at the domain driven demo application. Everyone should have read the book by Eric Evans about Domain Driven Design. Okay the book is not update at all, but I think the most stuff in the book is still correct.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links and Ressources&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Glossary of Domain-Driven Design Terms -&amp;nbsp;&lt;a href="http://domaindrivendesign.org/resources/ddd_terms"&gt;http://domaindrivendesign.org/resources/ddd_terms&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Eric Evans - Domain-Driven Design: Tackling Complexity in the Heart of Software -2003&lt;/li&gt;&lt;li&gt;Domain Driven Design Community - &lt;a href="http://domaindrivendesign.org/"&gt;http://domaindrivendesign.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;DDD Demo Application - &lt;a href="http://dddsample.sourceforge.net/"&gt;http://dddsample.sourceforge.net/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&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/1013943301267331946-2922264392430443998?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/2922264392430443998/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/10/10-min-domain-driven-design-lightning.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2922264392430443998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2922264392430443998'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/10/10-min-domain-driven-design-lightning.html' title='10 min - Domain Driven Design (lightning talk )'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-7653108735385183686</id><published>2011-09-24T20:26:00.000+02:00</published><updated>2011-09-24T20:26:36.251+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scala'/><title type='text'>Seitenbau Developer Convention 2011 -  Getting started with Scala</title><content type='html'>A week ends now the SDC = Seitenbau Developer Convention is over. Was a cool event again learned a lot about web development html5 with  boilerplate, CouchDB, oAuth2, Android development, Gerrit and Skali.&lt;br /&gt;&lt;br /&gt;Together with Dennis, I told a bit about the Scala language. Here are the slides of this Scala session&lt;br /&gt;&lt;br /&gt;&lt;div id="__ss_9407510" style="width: 425px;"&gt;&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/tux2323/sdc-einfhrung-in-scala" target="_blank" title="SDC - Einführung in Scala"&gt;SDC - Einführung in Scala&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/9407510" width="425"&gt;&lt;/iframe&gt; &lt;br /&gt;&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/tux2323" target="_blank"&gt;Christian Baranowski&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;More about the SDC can be found here (there is also an android app in the android market)&lt;br /&gt;&lt;a href="https://www.seitenbau.com/sdc/timetable"&gt;https://www.seitenbau.com/sdc/timetable&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-7653108735385183686?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/7653108735385183686/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/09/seitenbau-developer-convention-2011.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7653108735385183686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7653108735385183686'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/09/seitenbau-developer-convention-2011.html' title='Seitenbau Developer Convention 2011 -  Getting started with Scala'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-4452924438252101224</id><published>2011-09-24T20:10:00.000+02:00</published><updated>2011-09-24T20:10:02.902+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><title type='text'>Getting started with OSGi using a 3D OSGi Robot at OSGi Community Event 2011</title><content type='html'>The OSGi Community Event 2011 in Darmstadt was a really cool OSGi conference at all. Thanks for the organizationof this nice Event and the lots of new ideas, comments and inputs from all the participants.&lt;br /&gt;&lt;br /&gt;Here the slides of Jochen and my Mars Robot session.&lt;br /&gt;&lt;div id="__ss_9366640" style="width: 425px;"&gt;&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/mfrancis/getting-started-with-os-gi-using-a-3-d-osgi-robot-sample-application-christian-baranowski-jochen-hiller" target="_blank" title="Getting started with OSGi using a 3D OSGi Robot sample application - Christian Baranowski + Jochen Hiller"&gt;Getting started with OSGi using a 3D OSGi Robot sample application - Christian Baranowski + Jochen Hiller&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/9366640" width="425"&gt;&lt;/iframe&gt; &lt;br /&gt;&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/mfrancis" target="_blank"&gt;mfrancis&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;And here the slides from the session about the Platform O.N.E.&lt;br /&gt;&lt;div id="__ss_9366634" style="width: 425px;"&gt;&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/mfrancis/platform-one-deutsche-telekoms-os-gi-based-application-platform-for-third-party-enabling-elmar-brauch-christian-baranowski" target="_blank" title="Platform O.N.E. - Deutsche Telekom’s OSGi based Application Platform for Third Party Enabling - Elmar Brauch &amp;amp; Christian Baranowski"&gt;Platform O.N.E. - Deutsche Telekom’s OSGi based Application Platform for Third Party Enabling - Elmar Brauch &amp;amp; Christian Baranowski&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/9366634" width="425"&gt;&lt;/iframe&gt; &lt;br /&gt;&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/mfrancis" target="_blank"&gt;mfrancis&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;More information’s about the sessions and also the slides can be found here &lt;br /&gt;&lt;a href="http://www.osgi.org/CommunityEvent2011/Agenda"&gt;http://www.osgi.org/CommunityEvent2011/Agenda&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-4452924438252101224?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/4452924438252101224/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/09/getting-started-with-osgi-using-3d-osgi.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/4452924438252101224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/4452924438252101224'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/09/getting-started-with-osgi-using-3d-osgi.html' title='Getting started with OSGi using a 3D OSGi Robot at OSGi Community Event 2011'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-1303869933738638063</id><published>2011-07-31T12:07:00.000+02:00</published><updated>2011-07-31T12:07:15.118+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='JMock'/><title type='text'>JMock HasProperty Expectations</title><content type='html'>Took me a while to define JMock expectations which verifies that a argument of mocked method has a defined set of properties with values. &lt;br /&gt;&lt;br /&gt;Here my JMock based JUnit test:&lt;br /&gt;&lt;script src="https://gist.github.com/1116658.js?file=TrackServiceTest.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Is there no better way to do this in JMock?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-1303869933738638063?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/1303869933738638063/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/07/jmock-hasproperty-expectations.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/1303869933738638063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/1303869933738638063'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/07/jmock-hasproperty-expectations.html' title='JMock HasProperty Expectations'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-7948742964683588783</id><published>2011-06-16T20:18:00.001+02:00</published><updated>2011-10-14T00:09:28.891+02:00</updated><title type='text'>Top 10 Software Engineering Books – Must Read</title><content type='html'>Today I gave a lighting talk at &lt;a href="http://www.seitenbau.com/"&gt;SEITENBAU&lt;/a&gt;, about my favorite top ten software engineering books. Here my top ten list of books, which every developer should read:&lt;br /&gt;&lt;br /&gt;#1 - Andrew Hunt, David Thomas - The Pragmatic Programmer - From Journeyman to Master&lt;br /&gt;&lt;br /&gt;#2 - Erich Gamma, Richard Helm, Ralph E. Johnson, John Vlissides - Design Patterns&lt;br /&gt;&lt;br /&gt;#3 - Martin Fowler - Refactoring -Improving the Design of Existing Code&lt;br /&gt;&lt;br /&gt;#4 - Eric Evans - Domain Driven Design&lt;br /&gt;&lt;br /&gt;#5 - Kent Beck - Test Driven Development by Example&lt;br /&gt;&lt;br /&gt;#6 - Alistair Cockburn - Writing Effective Use Cases&lt;br /&gt;&lt;br /&gt;#7 - Scott Berkun - The Art of Project Management&lt;br /&gt;&lt;br /&gt;#8 - Martin Fowler - Patterns of Enterprise Application Architecture&lt;br /&gt;&lt;br /&gt;#9 - Joshua Bloch - Effective Java&lt;br /&gt;&lt;br /&gt;#10 - Gerard Meszaros - xUnit Test Patterns&lt;br /&gt;&lt;br /&gt;I think there are more books you should read as a professional developer, but this list is at the moment my top ten list of books I think should have read.&lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px" id="__ss_9684059"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/tux2323/top10-software-engineering-books" title="Top10- Software Engineering Books" target="_blank"&gt;Top10- Software Engineering Books&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/9684059" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/tux2323" target="_blank"&gt;Christian Baranowski&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;What are your favorite software engineering books? Send me comments or write me via &lt;a href="http://twitter.com/tux2323"&gt;Twitter&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Stackoverflow&amp;nbsp;recommended books for software engineering-&amp;nbsp;&lt;a href="http://stackoverflow.com/questions/131571/recommended-books-for-software-engineering"&gt;http://stackoverflow.com/questions/131571/recommended-books-for-software-engineering&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Top 100 Best Software Engineering Books- &lt;a href="http://knol.google.com/k/top-100-best-software-engineering-books-ever"&gt;http://knol.google.com/k/top-100-best-software-engineering-books-ever&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-7948742964683588783?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/7948742964683588783/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/06/top-10-software-engineering-books-must.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7948742964683588783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7948742964683588783'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/06/top-10-software-engineering-books-must.html' title='Top 10 Software Engineering Books – Must Read'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-4955142438839610024</id><published>2011-06-05T16:52:00.001+02:00</published><updated>2011-06-05T16:53:36.349+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><title type='text'>Sikuli – GUI Test Automation with Java Robot API and Images</title><content type='html'>The Sikuli project provides a simple tool for automate and test graphical user interfaces (GUI) using images (screenshots). The idea is to find an element on the screen by a screenshot and not by XPath or ID. The tool can be used for all GUIs also web applications. It’s a nice idea below you can see a simple example.&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/-javapqYyQ14/TeuXSdZsBcI/AAAAAAAAAkA/9GI0GwbDp7I/s1600/Sikuli.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="433" src="http://3.bp.blogspot.com/-javapqYyQ14/TeuXSdZsBcI/AAAAAAAAAkA/9GI0GwbDp7I/s640/Sikuli.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The SIKULI project is based on the Java VM and also provides an API for writing the automation in Java here a JUnit sample test.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1009011.js?file=GoogleDemoTest.java"&gt;&lt;/script&gt;&lt;br /&gt;For real world web testing it is not the right tool I think, because it depends on the style of the elements. When the button style changed you need a new screenshot of the button. But it is a nice tool for simple automation tasks. Have also a look at screen casts on the project homepage.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links:&lt;/b&gt;&lt;br /&gt;- Project Home - &lt;a href="http://sikuli.org/"&gt;http://sikuli.org/&lt;/a&gt;&lt;br /&gt;- How to use Sikuli Script in your JAVA programs - &lt;a href="http://sikuli.org/docx/faq/030-java-dev.html"&gt;http://sikuli.org/docx/faq/030-java-dev.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-4955142438839610024?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/4955142438839610024/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/06/sikuli-gui-test-automation-with-java.html#comment-form' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/4955142438839610024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/4955142438839610024'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/06/sikuli-gui-test-automation-with-java.html' title='Sikuli – GUI Test Automation with Java Robot API and Images'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-javapqYyQ14/TeuXSdZsBcI/AAAAAAAAAkA/9GI0GwbDp7I/s72-c/Sikuli.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-6106883326886652846</id><published>2011-06-05T14:12:00.005+02:00</published><updated>2011-06-06T15:31:08.782+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scala'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='AWK'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Convert a simple CSV File with Groovy, Java, Scala, awk, Ruby, Python, PHP or Bash?</title><content type='html'>&lt;b&gt;Change Log:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;05.06.2011 1:30 pm -&amp;nbsp;Initial&amp;nbsp;created Post with &amp;nbsp;Groovy, Java, Scala, awk, Ruby, Python Implementation&lt;/li&gt;&lt;li&gt;05.06.2011 4:00 pm - Add PHP implementation and update voting (now you can vote for PHP).&lt;/li&gt;&lt;li&gt;06.06.2011 4:00 pm - Add Bash implementation and update voting (now you can also vote for Bash)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Which is the best programming language for converting a simple CSV into another format?&lt;br /&gt;&lt;br /&gt;First I blogged three Java VM based solutions written in Groovy, Java and Scala to convert a simple CSV file into another format. Rainer sends me the Java based solution, yesterday Axel Knauf sends an awk based solution, Niko sends Ruby based solution, Hendrik sends a Python based solution, Sebastian sends me a PHP implementation and Julien sends a Bash version. Now there are a Groovy, Java, Scala, awk, Ruby, Python, PHP and Bash implementation.&lt;br /&gt;&lt;br /&gt;Now here again a complete overview of the different implementations:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Groovy Implementation:&lt;/b&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1005960.js?file=csvconvertor.groovy"&gt;&lt;/script&gt;&lt;br /&gt;&lt;b&gt;The Java Implementation:&lt;/b&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1008227.js?file=CsvConvertor.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;b&gt;The Scala Implementation:&lt;/b&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1008110.js?file=CsvConvertor.scala"&gt;&lt;/script&gt;&lt;br /&gt;&lt;b&gt;Here the shell command and awk script:&lt;/b&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1008828.js?file=convert.awk"&gt;&lt;/script&gt;&lt;br /&gt;&lt;b&gt;The pure Ruby Implementation:&lt;/b&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1008877.js?file=pure.rb"&gt;&lt;/script&gt;&lt;br /&gt;&lt;b&gt;The Python Implementation:&lt;/b&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1008881.js?file=CsvConverter.py"&gt;&lt;/script&gt;&lt;br /&gt;&lt;b&gt;The pure PHP Implementation:&lt;/b&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1008966.js?file=csv-format-pure.php"&gt;&lt;/script&gt;&lt;br /&gt;&lt;b&gt;The Bash Implementation:&lt;/b&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1009420.js?file=converter.sh"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;I'm curious whether there are other implementation proposals (Clojure, Perl, PHP, …), if you have one you could send me the script via Twitter or leave a comment here…&lt;br /&gt;&lt;br /&gt;I am also curious which implementation Groovy, Java, Scala, awk or Ruby you like and why? I have create voting here:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;script src="http://www.surveymonkey.com/jsEmbed.aspx?sm=Q6FieviBdIrVaruT1GPa_2fw_3d_3d"&gt;&lt;/script&gt;&lt;/div&gt;&lt;br /&gt;Thanks &lt;a href="https://twitter.com/#!/inforw"&gt;Rainer&lt;/a&gt;, &lt;a href="https://twitter.com/#!/kopfkind"&gt;Axel Knauf&lt;/a&gt;, &lt;a href="https://twitter.com/#!/ende42"&gt;Niko Dittmann&lt;/a&gt;, &lt;a href="https://twitter.com/#!/hheimbuerger"&gt;Hendrik Heimbuerger&lt;/a&gt; &lt;a href="http://twitter.com/#!/tauven"&gt;S.Barthenheier&lt;/a&gt; and &lt;a href="http://twitter.com/#!/kistenjunge"&gt;Julien Guitton&lt;/a&gt; for the Java, awk, Ruby Python, PHP and Bash implementation.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Java (Rainer) - &lt;a href="https://gist.github.com/1006757"&gt;https://gist.github.com/1006757&lt;/a&gt;&lt;/li&gt;&lt;li&gt;awk (Axel Knauf) - &lt;a href="https://twitter.com/#!/kopfkind/status/77288701725638656"&gt;https://twitter.com/#!/kopfkind/status/77288701725638656&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Ruby (Niko) - &lt;a href="https://gist.github.com/1008877"&gt;https://gist.github.com/1008877&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Python (Hendrik) - &lt;a href="https://gist.github.com/1008881"&gt;https://gist.github.com/1008881&lt;/a&gt;&lt;/li&gt;&lt;li&gt;PHP (Sebastian) -&amp;nbsp;&lt;a href="https://gist.github.com/1008966"&gt;https://gist.github.com/1008966&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Bash (Julien) -&amp;nbsp;&lt;a href="https://gist.github.com/1009420"&gt;https://gist.github.com/1009420&lt;/a&gt;&lt;/li&gt;&lt;li&gt;old blog post: Convert a CSV File with awk - &lt;a href="http://goo.gl/U7onj"&gt;http://goo.gl/U7onj&lt;/a&gt;&lt;/li&gt;&lt;li&gt;old blog post: Convert a CSV File in Groovy, Java or Scala? -&amp;nbsp;&lt;a href="http://goo.gl/AAE17"&gt;http://goo.gl/AAE17&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-6106883326886652846?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/6106883326886652846/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/06/convert-simple-csv-file-with-groovy.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/6106883326886652846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/6106883326886652846'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/06/convert-simple-csv-file-with-groovy.html' title='Convert a simple CSV File with Groovy, Java, Scala, awk, Ruby, Python, PHP or Bash?'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-3850021381374504101</id><published>2011-06-05T12:00:00.005+02:00</published><updated>2011-06-05T12:07:14.548+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AWK'/><title type='text'>Convert a CSV File with awk</title><content type='html'>Yesterday I post three Java VM based solutions written in Groovy, Java and Scala to convert a simple CSV file into another format. Today kopfkind sends me via Twitter a awk based solution.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Here the shell command and awk script to convert the CSV file:&lt;/b&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1008828.js?file=convert.awk"&gt;&lt;/script&gt;&lt;br /&gt;Thanks a lot @kopfkind for this simple solution. I'm curious whether there are other implementation proposals (Python, Clojure, Perl, Bash, PHP, …), if you have one you could send me the solution via Twitter or leave a comment here. &lt;br /&gt;&lt;br /&gt;I am also curious which implementation Groovy, Java, Scala or awk you like and why?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;See also:&lt;/b&gt;&amp;nbsp;&lt;a href="http://tux2323.blogspot.com/2011/06/convert-csv-file-in-groovy-java-or.html"&gt;Convert a CSV File in Groovy, Java or Scala?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-3850021381374504101?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/3850021381374504101/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/06/convert-csv-file-with-awk.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/3850021381374504101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/3850021381374504101'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/06/convert-csv-file-with-awk.html' title='Convert a CSV File with awk'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-7492223581323000328</id><published>2011-06-04T21:26:00.001+02:00</published><updated>2011-06-05T13:32:34.675+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scala'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><title type='text'>Convert a CSV File in Groovy, Java or Scala?</title><content type='html'>Last week I have simple task I must convert a simple CSV file into another CSV format. My first solution was a simple Groovy script. Then inforw sends me a Java solution, to show me that with Java it is no much more code then the Groovy implementation is. Today I wrote just for fun a solution in Scala, to see how the code looks in Scala. My favorite of the three implementations is at the moment the Groovy one. But I think the Scala implementation has the best readability. Below you see the three implementations. &lt;br /&gt;&lt;br /&gt;I'm curious what you like, feel free for comments? And I would be glad if someone contributes even further implementation in Clojure, Python, Perl,… or even a better Scala, Java or Groovy implementation.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Groovy Implementation:&lt;/b&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1005960.js?file=csvconvertor.groovy"&gt;&lt;/script&gt;&lt;br /&gt;&lt;b&gt;The Java Implementation:&lt;/b&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1008227.js?file=CsvConvertor.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;b&gt;The Scala Implementation:&lt;/b&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1008110.js?file=CsvConvertor.scala"&gt;&lt;/script&gt;&lt;br /&gt;Thanks @inforw for the discussion and the Java implementation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-7492223581323000328?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/7492223581323000328/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/06/convert-csv-file-in-groovy-java-or.html#comment-form' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7492223581323000328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7492223581323000328'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/06/convert-csv-file-in-groovy-java-or.html' title='Convert a CSV File in Groovy, Java or Scala?'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-1276519986370292598</id><published>2011-06-03T09:10:00.002+02:00</published><updated>2011-06-03T09:31:39.306+02:00</updated><title type='text'>Test Logging via JUnit Rule</title><content type='html'>In most cases it is not necessary to test logging, but in some situations you wont to check in a JUnit test that a log statement will be written, e.g in special error cases. When you use logback as logging framework the test can setup a ListAppender for a Logger and can implement a assert method which checks that the expected log statement is in the ListAppender list. But then the test is logback specific and has dependency on logback! When you use this approache in many JUnit test classes the test source has a hard dependency on logback and when you wont to change the logging framework all tests must also be changed. To remove this hard dependency you can use a JUnit rule, which capsulate the logback framework from the test source. The example here shows how a test and such a JUnit rule can look like.&lt;br /&gt;&lt;br /&gt;Here the sample test for verify logging:&lt;br /&gt;&lt;script src="https://gist.github.com/1005990.js?file=SimpleStackTest.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;And here the logback specific rule:&lt;br /&gt;&lt;script src="https://gist.github.com/1005996.js?file=LogStub.java"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-1276519986370292598?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/1276519986370292598/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/06/test-logging-via-junit-rule.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/1276519986370292598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/1276519986370292598'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/06/test-logging-via-junit-rule.html' title='Test Logging via JUnit Rule'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-2545685876238424390</id><published>2011-06-02T11:36:00.001+02:00</published><updated>2011-06-02T11:43:50.396+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Logging'/><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><title type='text'>Logging in JUnit Tests</title><content type='html'>With a JUnit 4.7 rules it is easy to add logging support in JUnit tests. The example test bellow shows how to add simple logging for each test method and the result of the test.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1004172.js?file=SampleStackTest.java"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;For more details about logging in JUnit tests see the blog post "&lt;a href="http://www.catosplace.net/blogs/personal/?p=442"&gt;JUnit 4 Test Logging Tips using SLF4J&lt;/a&gt;".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-2545685876238424390?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/2545685876238424390/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2011/06/logging-in-junit-tests.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2545685876238424390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2545685876238424390'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2011/06/logging-in-junit-tests.html' title='Logging in JUnit Tests'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-7347242149387736212</id><published>2010-11-06T15:33:00.000+01:00</published><updated>2010-11-06T15:33:38.567+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi agile'/><title type='text'>Slides Agiles Lernen und Software Entwicklung das OSGi Code Camp</title><content type='html'>Here the slides from the talk "Agiles Lernen und Software Entwicklung das OSGi Code Camp" which we have at OSGi Users Forum Meeting 2010.&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;div id="__ss_5686505" style="width: 425px;"&gt;&lt;object height="355" id="__sse5686505" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=agileslernenundsoftwareentwicklungdasosgicodecamp-draftv2-101106092951-phpapp01&amp;stripped_title=agiles-lernen-und-software-entwicklung-das-osgi-code-camp-2010&amp;userName=tux2323" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse5686505" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=agileslernenundsoftwareentwicklungdasosgicodecamp-draftv2-101106092951-phpapp01&amp;stripped_title=agiles-lernen-und-software-entwicklung-das-osgi-code-camp-2010&amp;userName=tux2323" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Links&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;OSGi Users Forum Meeting Programm -&amp;nbsp;&lt;a href="http://germany.osgiusers.org/Main/OSGiUFGTreffen2010"&gt;http://germany.osgiusers.org/Main/OSGiUFGTreffen2010&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Summer OCC 2010 Website - &lt;a href="http://germany.osgiusers.org/Main/SummerOCC2010"&gt;http://germany.osgiusers.org/Main/SummerOCC2010&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://germany.osgiusers.org/Main/OSGiUFGTreffen2010"&gt;&lt;/a&gt;Gource is a version control visualization tool. &amp;nbsp;- &lt;a href="http://code.google.com/p/gource/"&gt;http://code.google.com/p/gource/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-7347242149387736212?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/7347242149387736212/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/11/slides-agiles-lernen-und-software.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7347242149387736212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7347242149387736212'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/11/slides-agiles-lernen-und-software.html' title='Slides Agiles Lernen und Software Entwicklung das OSGi Code Camp'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-3759171953205848526</id><published>2010-10-16T17:38:00.001+02:00</published><updated>2010-10-16T17:40:31.783+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Sonatype Maven Shell and Parallel builds in Maven 3</title><content type='html'>&lt;style type="text/css"&gt;.nobr br { display: none }table {border-collapse: collapse;}td { border:1px solid #000; vertical-align:top; padding: 10px 10px 10px 10px; }th { border:1px solid #000; vertical-align:top; padding: 10px 10px 10px 10px; background: lightgray}&lt;/style&gt;&lt;br /&gt;Today I played around with the parallel build feature from Maven 3 and with the sonatype maven shell. The sonatype maven shell is based (required) on Maven 3. Here my first build performance results.&lt;br /&gt;&lt;br /&gt;&lt;div class="nobr"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;     &lt;th&gt;&lt;/th&gt;     &lt;th&gt;Maven 3&lt;/th&gt;     &lt;th&gt;Maven 3 (mvn -T 10)&lt;/th&gt;     &lt;th&gt;Maven 3 (mvn -T 1.5C)&lt;/th&gt;     &lt;th&gt;Maven Shell&lt;/th&gt;   &lt;/tr&gt;&lt;tr&gt;     &lt;td&gt;mvn clean compile&lt;/td&gt;     &lt;td&gt;ca. 5 sec&lt;/td&gt;     &lt;td&gt;ca. 3 sec&lt;/td&gt;     &lt;td&gt;ca. 4 sec&lt;/td&gt;     &lt;td&gt;ca. 2 sec&lt;/td&gt;   &lt;/tr&gt;&lt;tr&gt;     &lt;td&gt;mvn clean package&lt;/td&gt;     &lt;td&gt;ca. 12 sec&lt;/td&gt;     &lt;td&gt;ca. 10 sec&lt;/td&gt;     &lt;td&gt;ca. 10 sec&lt;/td&gt;     &lt;td&gt;ca. 7 sec&lt;/td&gt;   &lt;/tr&gt;&lt;tr&gt;     &lt;td&gt;mvn package&lt;/td&gt;     &lt;td&gt;ca. 7 sec&lt;/td&gt;     &lt;td&gt;ca. 6 sec&lt;/td&gt;     &lt;td&gt;ca. 6 sec&lt;/td&gt;     &lt;td&gt;ca. 3 sec&lt;/td&gt;   &lt;/tr&gt;&lt;tr&gt;     &lt;td&gt;mvn clean site&lt;/td&gt;     &lt;td&gt;ca. 4 min&lt;/td&gt;     &lt;td&gt;ca. 4 min&lt;/td&gt;     &lt;td&gt;ca. 4 min&lt;/td&gt; &lt;td&gt;crashed&lt;/td&gt;    &lt;/tr&gt;&lt;tr&gt;     &lt;td&gt;mvn javadoc:javadoc&lt;/td&gt;     &lt;td&gt;ca. 56 sec&lt;/td&gt;     &lt;td&gt;ca. 29 sec&lt;/td&gt;     &lt;td&gt;ca. 29 sec&lt;/td&gt;     &lt;td&gt;ca. 27 sec&lt;/td&gt;   &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;More about parallel builds in Maven 3 here:&lt;br /&gt;&lt;a href="https://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3"&gt;https://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;More about the maven shell from sonatype here:&lt;br /&gt;&lt;a href="http://shell.sonatype.org/index.html"&gt;http://shell.sonatype.org/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-3759171953205848526?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/3759171953205848526/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/10/sonatype-maven-shell-and-parallel.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/3759171953205848526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/3759171953205848526'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/10/sonatype-maven-shell-and-parallel.html' title='Sonatype Maven Shell and Parallel builds in Maven 3'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-8907526886797852340</id><published>2010-10-16T16:57:00.000+02:00</published><updated>2010-10-16T16:57:35.346+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Apache Maven 3 and the Maven Site Plugin</title><content type='html'>Today I have a look on maven 3 features, when I start to build the maven site of my project it always failed. Because the configuration for the maven site was changed in the maven version 3.X. Here my first maven site configuration that worked for my project:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/629861.js?file=pom.xml"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;More about the maven site plugin configuration version for maven version 3.X here:&lt;br /&gt;&lt;a href="https://cwiki.apache.org/MAVEN/maven-3x-and-site-plugin.html"&gt;https://cwiki.apache.org/MAVEN/maven-3x-and-site-plugin.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-8907526886797852340?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/8907526886797852340/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/10/apache-maven-3-and-maven-site-plugin.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/8907526886797852340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/8907526886797852340'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/10/apache-maven-3-and-maven-site-plugin.html' title='Apache Maven 3 and the Maven Site Plugin'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-5785165558132744957</id><published>2010-09-12T22:25:00.000+02:00</published><updated>2010-09-12T22:25:40.751+02:00</updated><title type='text'>MS Paint Design Process</title><content type='html'>Nice video how MS Paint was build.&lt;br /&gt;&lt;br /&gt;&lt;object height="385" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Hxx2KcPWWZg&amp;color1=0xb1b1b1&amp;color2=0xd0d0d0&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Hxx2KcPWWZg&amp;color1=0xb1b1b1&amp;color2=0xd0d0d0&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-5785165558132744957?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/5785165558132744957/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/09/ms-paint-design-process.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/5785165558132744957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/5785165558132744957'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/09/ms-paint-design-process.html' title='MS Paint Design Process'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-7424561680333519232</id><published>2010-08-24T12:45:00.002+02:00</published><updated>2010-08-24T18:10:54.366+02:00</updated><title type='text'>OSGi Bundle Quality or Bundle Information Repository</title><content type='html'>A lot of projects build their JARs as OSGi bundles e.g. Jersey. The quality varies from very good bundles up to the bundles they do not work they only generate a MANIFEST file. Often you spend a lot of time until you have your frameworks running in an OSGi environment. Even if these frameworks JARs are offered as OSGi bundles already. So Neil Bartlett came up at Twitter with the idea to build a portal where you can find information about the quality of OSGi bundles.&lt;br /&gt;&lt;br /&gt;After the twitter post from Neil, I think about such a portal and here are my first ideas about such a information portal. I think first we need a small command line tool which implements a set of &lt;i&gt;&lt;b&gt;static and dynamic tests for OSGi bundles&lt;/b&gt;&lt;/i&gt;. Nice would be a set of plugins which integrate the tool into your build tool (e.g. maven, ant) or favorite IDE.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What kind of static tests should this bundle test tool support?&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Check if the to test JAR (bundle) have a valid MANIFEST e.g. to check via Peter Kriens BND lib.&lt;/li&gt;&lt;li&gt;Check some MANIFEST pattern e.g. do the bundle import the exported packages, which is a OSGi best practice.&lt;/li&gt;&lt;li&gt;Do the bundle describe e.g. via extra configuration where to get the runtime dependencies e.g. via maven pom.xml? Provide this dependencies (JARs) all of the imported packages.&lt;/li&gt;&lt;li&gt;Use the bundle a framework for declarative services? E.g. do the bundle use DS, Blue Print, iPOJO, Pearbeary...&lt;/li&gt;&lt;li&gt;Which OSGi services does the bundle use e.g. configuration service, logging service etc.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;What kind of dynamic test should the test tool provided?&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Check if the bundle can be deployed in an OSGi container (equinox, felix,… therefore the pax runner can be used for implementation). The bundle should ship a reference set of runtime dependencies or provided a configuration file which describes where to get these dependencies e.g. via maven or ivy. The order in which the runtime dependencies will be started can be determined via a static test on each bundle (for implementation the BND lib can be used, or pax runner do this already?). In addition to the runtime dependencies it should be a possibility that a bundle can describe a set of system properties.&lt;/li&gt;&lt;li&gt;Test that the exported packages can be used from a bundle. There for a test bundle can be generated which use the exported package resources of the bundle under test.&lt;/li&gt;&lt;li&gt;Check that if a started OSGi bundle provides OSGi services.&lt;/li&gt;&lt;li&gt;When a bundle use a framework for declarative services e.g. DS, verify that the decelerated services are up and running in the service registry.&lt;/li&gt;&lt;li&gt;Check that a bundle restart works. Service is down and will be started again etc.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;When we have such a tool to automatically verify the quality of an OSGi bundle and get a set of information about the bundle. A central information portal/repository would be very nice where you can submit your bundles and the checks will be run on your bundle and published.  Where you can search for bundles and you get information where to download the bundle and a set of information of the quality of the bundle. I think such an information repository about OSGi bundles and there quality should be hosted under www.osgi.org.&lt;br /&gt;&lt;br /&gt;Here some ideas how to submit a bundle into such an information repository/portal? I think the portal should provide a REST service and web form to submit bundles to check and to add to the repository. The runtime dependencies can submit as ZIP or as maven pom.xml or ivy configuration. For the REST service plugins for build tools and IDEs would be nice. E.g. a plugin for maven which will be bind to the deploy phase of maven, could automatically deploy the bundle to check also to the bundle information repository.&lt;br /&gt;&lt;br /&gt;Is anyone interested to build the testing tool with me as an open source project? Or is there a cool tool out there which can do such tests? Please contact me or write a comment to the post?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;OSGi Compliance Levels - Neil Bartlett&lt;br /&gt;&lt;a href="http://njbartlett.name/2010/08/24/osgi-compliance-levels.html%20"&gt; http://njbartlett.name/2010/08/24/osgi-compliance-levels.html &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-7424561680333519232?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/7424561680333519232/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/08/osgi-bundle-quality-or-bundle.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7424561680333519232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7424561680333519232'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/08/osgi-bundle-quality-or-bundle.html' title='OSGi Bundle Quality or Bundle Information Repository'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-6330932526798809328</id><published>2010-08-15T13:43:00.001+02:00</published><updated>2010-08-15T13:46:50.239+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='STS'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Eclipse Tipp Reloaded - Disable STS Dashboard On Startup</title><content type='html'>Last year I wrote a blog entry how to disable the STS (Spring Tool Suite) dashboard on eclipse startup see &lt;a href="http://tux2323.blogspot.com/2009/11/eclipse-tipp-disable-sts-dashboard-on.html"&gt;here&lt;/a&gt;. In newer version of STS the option is now in the preference dialog of STS see the screenshot bellow.&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/_zXKc-SRU8qo/TGfS5UDaXlI/AAAAAAAAAe0/t-zY-FtJ2do/s1600/Bildschirmfoto+2010-08-15+um+13.22.07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/TGfS5UDaXlI/AAAAAAAAAe0/t-zY-FtJ2do/s640/Bildschirmfoto+2010-08-15+um+13.22.07.png" width="628" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Links&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;http://tux2323.blogspot.com/2009/11/eclipse-tipp-disable-sts-dashboard-on.html&lt;/li&gt;&lt;li&gt;http://www.springsource.com/developer/sts&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-6330932526798809328?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/6330932526798809328/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/08/eclipse-tipp-reloaded-disable-sts.html#comment-form' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/6330932526798809328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/6330932526798809328'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/08/eclipse-tipp-reloaded-disable-sts.html' title='Eclipse Tipp Reloaded - Disable STS Dashboard On Startup'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zXKc-SRU8qo/TGfS5UDaXlI/AAAAAAAAAe0/t-zY-FtJ2do/s72-c/Bildschirmfoto+2010-08-15+um+13.22.07.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-5725394891763887590</id><published>2010-08-15T11:45:00.001+02:00</published><updated>2010-08-15T13:47:30.374+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Clojure'/><title type='text'>Import a Clojure Leiningen Project into Eclipse</title><content type='html'>To import a leiningen project in the Eclipse IDE add the eclipse leiningen plugin in the project.clj as dev-dependency.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/525296.js?file=project.clj"&gt;&lt;/script&gt; &lt;br /&gt;When you now invoke the command "&lt;i&gt;lein help&lt;/i&gt;" there is a new task called eclipse. Invoke the leiningen task eclipse via "&lt;b&gt;&lt;i&gt;lein eclipse&lt;/i&gt;&lt;/b&gt;". The eclipse leiningen tasks creates the eclipse projects files ".project" and ".classpath".&lt;br /&gt;&lt;br /&gt;Now you can import the project in the eclipse IDE, therefore you can use the import eclipse wizard. Therefore select "File-&amp;gt;Import-&amp;gt;Existing Project into Workspace" then click the next button and select the leiningen project as root directory now you can import the project via click on the finish button.&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/_zXKc-SRU8qo/TGe2V-kZGrI/AAAAAAAAAek/FSJ8Czb5Z9E/s1600/Bildschirmfoto+2010-08-15+um+11.32.48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="358" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/TGe2V-kZGrI/AAAAAAAAAek/FSJ8Czb5Z9E/s400/Bildschirmfoto+2010-08-15+um+11.32.48.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;When you have installed the eclipse plugin counterclockwise you can know develop with syntax highlighting, run the project and debug the project from the eclipse IDE.&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/_zXKc-SRU8qo/TGe2duXrt7I/AAAAAAAAAes/O8Yeux2-XzI/s1600/Bildschirmfoto+2010-08-15+um+11.36.57.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/TGe2duXrt7I/AAAAAAAAAes/O8Yeux2-XzI/s640/Bildschirmfoto+2010-08-15+um+11.36.57.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://github.com/abrenk/lein-eclipse"&gt;http://github.com/abrenk/lein-eclipse&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://github.com/technomancy/leiningen"&gt;http://github.com/technomancy/leiningen&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/counterclockwise/"&gt;http://code.google.com/p/counterclockwise/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-5725394891763887590?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/5725394891763887590/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/08/import-clojure-leiningen-project-into.html#comment-form' title='7 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/5725394891763887590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/5725394891763887590'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/08/import-clojure-leiningen-project-into.html' title='Import a Clojure Leiningen Project into Eclipse'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_zXKc-SRU8qo/TGe2V-kZGrI/AAAAAAAAAek/FSJ8Czb5Z9E/s72-c/Bildschirmfoto+2010-08-15+um+11.32.48.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-1709048791830490845</id><published>2010-08-14T17:16:00.001+02:00</published><updated>2010-08-15T13:47:44.966+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Clojure'/><title type='text'>My first Clojure Web Application</title><content type='html'>I’m a fan of LISP, so I'm known a fan of Clojure, because Clojure brings LISP features to the Java platform. I don’t know if Clojure is good programming language for production use or for my daily work, but it makes a lot of fun to develop in Clojure, just try it. My first step was to write in clojure a simple hello world web application. &lt;br /&gt;&lt;br /&gt;I choose leinigen as build and dependency management tool and the clojure web framework Compojure to develop a super simple hello world web application.&lt;br /&gt;&lt;br /&gt;Here are the steps how I create my first hello world web application in clojure in 3 minutes:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1.) Download Leiningen&lt;/b&gt;&lt;br /&gt;Download the lein bash script from:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;http://github.com/technomancy/leiningen/raw/stable/bin/lein &lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2.) Install Leiningen&lt;/b&gt;&lt;br /&gt;Invoke the bash script with the follow command:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;lein self-install&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3.) Create a New Clojure Project&lt;/b&gt;&lt;br /&gt;Creating a new project with leinigen, therefore invoke the follow command:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;lein new helloworld-webapp&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4.) Add Compojure Dependency&lt;/b&gt;&lt;br /&gt;Add the compojure dependency to the project, therefore add the follow dependecies to the project.clj file.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/524381.js?file=project.clj"&gt;&lt;/script&gt;&lt;br /&gt;&lt;b&gt;5.) Create the Hello World Application&lt;/b&gt;&lt;br /&gt;Add the follow lines of code in "src/helloworld_webapp/core.clj"&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/524386.js?file=webapp.clj"&gt;&lt;/script&gt;&lt;br /&gt;&lt;b&gt;6.) Run the Web Application&lt;/b&gt;&lt;br /&gt;To start the hello world web application invoke the follow command:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;lein test&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;7.) Invoke the Application&lt;/b&gt;&lt;br /&gt;Now you can use the simple web application in your favorite browser open the URL:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;http://localhost:8080/&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Source Code&lt;/b&gt;&lt;br /&gt;The source code of this simple demo can be found on GitHub:&lt;br /&gt;&lt;a href="http://github.com/tux2323/clojure-helloworld-webapp"&gt;http://github.com/tux2323/clojure-helloworld-webapp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://github.com/technomancy/leiningen"&gt;http://github.com/technomancy/leiningen&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://github.com/weavejester/compojure"&gt;http://github.com/weavejester/compojure&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://weavejester.github.com/compojure/docs/getting-started.html"&gt;http://weavejester.github.com/compojure/docs/getting-started.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-1709048791830490845?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/1709048791830490845/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/08/my-first-clojure-web-application.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/1709048791830490845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/1709048791830490845'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/08/my-first-clojure-web-application.html' title='My first Clojure Web Application'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-6843664271558799074</id><published>2010-07-19T23:55:00.001+02:00</published><updated>2010-07-20T00:48:13.519+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Visualization'/><title type='text'>Gource - SCM Visualization</title><content type='html'>&lt;p&gt;Gource is a cool open source tool under GPL v3 for version control visualization.  With Gource you can visualize the commit history of the project as an animated tree. Its cool to see how a project grows over the time and which people are involved in the project. Here a sample video of the SVN log of the OSGi sample project mars robot from the Summer OSGi Code Camp 2010.&lt;/p&gt;&lt;br /&gt;&lt;object width="691" height="518"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13468846&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=13468846&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="691" height="518"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Links:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Gource Project site - &lt;a href="http://code.google.com/p/gource/"&gt;http://code.google.com/p/gource/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;SVN Visualization with Gource - &lt;a href="http://code.google.com/p/gource/wiki/SVN"&gt;http://code.google.com/p/gource/wiki/SVN&lt;/a&gt;&lt;/li&gt;&lt;li&gt;MAC Gource Support&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/%20http://code.google.com/p/gource/wiki/SVN"&gt; http://code.google.com/p/gource/wiki/SVN&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://matthewhutchinson.net/2009/12/8/gource-on-osx-snow-leopard"&gt;http://matthewhutchinson.net/2009/12/8/gource-on-osx-snow-leopard&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Mars Robot OSGi Sample Project - &lt;a href="http://code.google.com/a/eclipselabs.org/p/occ2010/%20"&gt;http://code.google.com/a/eclipselabs.org/p/occ2010/ &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-6843664271558799074?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/6843664271558799074/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/07/gource-scm-visualization.html#comment-form' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/6843664271558799074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/6843664271558799074'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/07/gource-scm-visualization.html' title='Gource - SCM Visualization'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-4325696121580380154</id><published>2010-07-18T00:15:00.002+02:00</published><updated>2010-07-20T00:00:23.189+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><title type='text'>Summer OSGi Code Camp 2010 Konstanz</title><content type='html'>Very nice code camp about OSGi topics with real &lt;a href="http://manifesto.softwarecraftsmanship.org/"&gt;craftsmanship&lt;/a&gt;, thanks to all participants.&lt;br /&gt;&lt;br /&gt;&lt;embed flashvars="host=picasaweb.google.de&amp;amp;hl=de&amp;amp;feat=flashalbum&amp;amp;RGB=0x000000&amp;amp;feed=http%3A%2F%2Fpicasaweb.google.de%2Fdata%2Ffeed%2Fapi%2Fuser%2FFvUndRaecher%2Falbumid%2F5494997398217167601%3Falt%3Drss%26kind%3Dphoto%26hl%3Dde" height="400" pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://picasaweb.google.de/s/c/bin/slideshow.swf" type="application/x-shockwave-flash" width="600"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;More Information about the Campe here:&lt;br /&gt;&lt;a href="http://germany.osgiusers.org/Main/SummerOCC2010"&gt;http://germany.osgiusers.org/Main/SummerOCC2010&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-4325696121580380154?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/4325696121580380154/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/07/summer-osgi-code-camp-2010-am-bodensee.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/4325696121580380154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/4325696121580380154'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/07/summer-osgi-code-camp-2010-am-bodensee.html' title='Summer OSGi Code Camp 2010 Konstanz'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-8251839419107929521</id><published>2010-07-08T22:36:00.003+02:00</published><updated>2010-07-08T22:41:37.035+02:00</updated><title type='text'>Eclipse Key Scheme Version 0.0.1</title><content type='html'>The Version 0.0.1 Plugin can be downloaded here: &lt;br /&gt;&lt;a href="http://github.com/tux2323/com.github.tux2323.eclipse.keyscheme/downloads"&gt;http://github.com/tux2323/com.github.tux2323.eclipse.keyscheme/downloads&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Key scheme extends the default eclipse key scheme and adds the follow shortcuts: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;STRG+SHIFT+P Show Perspective dialog&lt;/li&gt;&lt;li&gt;STRG+SHIFT+S G Generate Getter and Setter&lt;/li&gt;&lt;li&gt;STRG+SHIFT+S T Generate toString()&lt;/li&gt;&lt;li&gt;STRG+SHIFT+S D Generate Delegate methods&lt;/li&gt;&lt;li&gt;STRG+SHIFT+S C Generate Constructor using fields&lt;/li&gt;&lt;li&gt;STRG+SHIFT+S H Generate hashCode() and equals()&lt;/li&gt;&lt;li&gt;STRG+ALT+X+R Run...&lt;/li&gt;&lt;li&gt;STRG+ALT+X+D Debug...&lt;/li&gt;&lt;/ul&gt;Activate the key scheme in the eclipse preferences:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_zXKc-SRU8qo/TDY2aDAf8pI/AAAAAAAAAa8/HMq6oj98A48/s1600/Bildschirmfoto+2010-07-08+um+22.18.04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="428" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/TDY2aDAf8pI/AAAAAAAAAa8/HMq6oj98A48/s640/Bildschirmfoto+2010-07-08+um+22.18.04.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;/ul&gt;STRG+SHIFT+S &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_zXKc-SRU8qo/TDY1yR2BpuI/AAAAAAAAAas/0TSt6XzVP0c/s1600/Bildschirmfoto+2010-07-08+um+22.13.49.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/TDY1yR2BpuI/AAAAAAAAAas/0TSt6XzVP0c/s320/Bildschirmfoto+2010-07-08+um+22.13.49.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;STRG+ALT+X&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_zXKc-SRU8qo/TDY2Ef6r2OI/AAAAAAAAAa0/1zv8ghbAIsY/s1600/Bildschirmfoto+2010-07-08+um+22.13.39.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/TDY2Ef6r2OI/AAAAAAAAAa0/1zv8ghbAIsY/s320/Bildschirmfoto+2010-07-08+um+22.13.39.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;See also my post call for shortcuts here: &lt;/b&gt;&lt;br /&gt;&lt;a href="http://tux2323.blogspot.com/2010/07/eclipse-key-scheme-call-for-shortcuts.html"&gt;http://tux2323.blogspot.com/2010/07/eclipse-key-scheme-call-for-shortcuts.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-8251839419107929521?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/8251839419107929521/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/07/eclipse-key-scheme-version-001.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/8251839419107929521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/8251839419107929521'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/07/eclipse-key-scheme-version-001.html' title='Eclipse Key Scheme Version 0.0.1'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zXKc-SRU8qo/TDY2aDAf8pI/AAAAAAAAAa8/HMq6oj98A48/s72-c/Bildschirmfoto+2010-07-08+um+22.18.04.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-5810999833502902269</id><published>2010-07-06T15:13:00.002+02:00</published><updated>2010-07-06T15:33:53.193+02:00</updated><title type='text'>Eclipse Key Scheme – Call for Shortcuts</title><content type='html'>In order to work efficiently in a development environment, I think you need an environment, which allows you to work exclusive with the keyboard. And you are rarely forced by the environment to switch back to mouse. Therefore in eclipse a cool set of keyboard shortcuts exists e.g. CTRL+1 for quick fix or refactoring rename CRTL+ALT+R. But some functions in eclipse have no default shortcut, for this function I defined always my own shortcuts. But often I forget to share these settings between my different eclipse installations and eclipse workspaces. Since I have some time I would now like to create my own key scheme plugin (&lt;a href="http://github.com/tux2323/com.github.tux2323.eclipse.keyscheme"&gt;see github&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;To create a key scheme in eclipse, you must create a new eclipse plugin and use the extension point "org.eclipse.ui.bindings", see the sample plugin.xml below.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/465360.js?file=Eclipse%20Key%20Scheme%20Plugin.xml"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;If you have any good ideas of missing eclipse shortcuts, feel free to write a comment with the idea thx...&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-5810999833502902269?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/5810999833502902269/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/07/eclipse-key-scheme-call-for-shortcuts.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/5810999833502902269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/5810999833502902269'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/07/eclipse-key-scheme-call-for-shortcuts.html' title='Eclipse Key Scheme – Call for Shortcuts'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-6072860674197559705</id><published>2010-06-27T11:00:00.004+02:00</published><updated>2010-06-27T12:13:33.787+02:00</updated><title type='text'>Drawing and Creativity (German Post)</title><content type='html'>Just reading slide:ology by Nancy Duarte and I come across with a nice quote from Bill McDonough. Unfortunately, I have the German edition of the book slide:ology, because of that the post is written in German.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Was machen wir in unserem Bildungssystem nur mit der Kreativität unserer Kinder? &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;„&lt;i&gt;Wenn ich in einem Raum voller Sechsjähriger betrete und frage: „Wer kann hier zeichnen?“, heben alle die Hand und schreien: „Ich kann’s“.  „Ich kann alles mögliche Zeichnen“. Und wenn ich in einem Raum voller diplomierter Akademiker komme und frage: „Wer kann hier zeichnen?“, findet sich kein Einziger. Was ist das nur für eine Art von Bildungssystem?“&amp;nbsp;&lt;/i&gt;- Bill McDonough&lt;br /&gt;&lt;br /&gt;Ich kann das Zitat nur unterschreiben, meine Tochter kann eigentlich alles zeichnen, ich hingegen tue mir schwer mal schnell etwas zu skizzieren um einen Sachverhalt in einer Besprechung durch eine Grafik besser darlegen zu können. Aber ich arbeite so oft wie möglich dran damit ich wieder an die Leistungen meiner vierjährigen Tochter anschließen kann.&lt;br /&gt;&lt;br /&gt;Die große Frage für mich ist wie kommt es dass viele die Begeisterung am zeichnen verlieren, die wir als Kind hatten? Und oft eine menge Text einer kleinen Skizze in einer Besprechung oder in einem Dokument vorziehen?&lt;br /&gt;&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/_zXKc-SRU8qo/TCcfDt4d5vI/AAAAAAAAAZ8/KY8Gwgv1jc4/s1600/Bildschirmfoto+2010-06-27+um+11.50.09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="170" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/TCcfDt4d5vI/AAAAAAAAAZ8/KY8Gwgv1jc4/s400/Bildschirmfoto+2010-06-27+um+11.50.09.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ich glaube oft ist nur Angst, dass ein Dokument nicht professionell aussehen könnte. Meine Meinung ist, Inhalte müssen wieder im Vordergrund stehen, anstatt geschleckter Präsentation und Dokumente ohne Aussagekraft. Ich kenne sehr gute Dokumente die im Wesentlichen aus etwas Text und abfotografierten Zeichnungen aus einem Meeting bestehen die wesentlich mehr Inhalt haben als manch lange Spezifikation.  &lt;br /&gt;&lt;br /&gt;Dieser Post ist ein JA für mehr handgemachte Zeichnungen, Grafiken und weiniger Text, Bla Bla in Meetings und Dokumenten. Auch wenn die Zeichnungen keinen Künstlerischenwert haben, wenn Sie helfen Inhalte effizient zu vermitteln war es nie ein Fehler den Stift in einer Besprechung in die Hand zu nehmen egal wie die Zeichnung danach aussieht.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-6072860674197559705?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/6072860674197559705/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/06/drawing-and-creativity-german-post.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/6072860674197559705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/6072860674197559705'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/06/drawing-and-creativity-german-post.html' title='Drawing and Creativity (German Post)'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zXKc-SRU8qo/TCcfDt4d5vI/AAAAAAAAAZ8/KY8Gwgv1jc4/s72-c/Bildschirmfoto+2010-06-27+um+11.50.09.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-5896711352910825381</id><published>2010-06-14T23:44:00.001+02:00</published><updated>2010-06-14T23:45:15.198+02:00</updated><title type='text'>Regular Expression with Comments Java</title><content type='html'>Here a simple RegEx in Java with embedded comments.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/438345.js?file=gistfile1.pde"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-5896711352910825381?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/5896711352910825381/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/06/regular-expression-with-comments-java.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/5896711352910825381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/5896711352910825381'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/06/regular-expression-with-comments-java.html' title='Regular Expression with Comments Java'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-2630430919682319818</id><published>2010-06-13T01:46:00.013+02:00</published><updated>2010-06-14T22:43:32.230+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JDT'/><category scheme='http://www.blogger.com/atom/ns#' term='PDE'/><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'>Review Eclipse Helios RC4</title><content type='html'>&lt;b&gt;Change Log&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;2010-06-14 - Add section about drag drop files as link in package explorer&lt;/li&gt;&lt;li&gt;2010-06-14 - Add screen shot to JDT open implementation section&lt;/li&gt;&lt;li&gt;2010-06-14 - Add a new section about the JDT code formatter on/off via comment tag.&lt;/li&gt;&lt;li&gt;2010-06-13 - Initial create the review post&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a href="http://www.eclipse.org/helios/"&gt;Eclipse Helios&lt;/a&gt; is the annual release of Eclipse projects in 2010; this year 39 projects are part of the release. And here is my first contribution to the Helios Blogathon, more details on the Blogathon can be found &lt;a href="http://www.eclipse.org/helios/blogathon/reviews.php"&gt;here&lt;/a&gt;. Helios is the code name for this year collecting Eclipse release. The idea of such a release is to be simultaneously release a large quantity of eclipse sub projects at the same time. This gives the user an Eclipse platform with well-coordinated projects, which works together.&lt;br /&gt;&lt;br /&gt;My blog entry should only gives an overview of my favorite Eclipse projects and what new feature I really liked in the Helios release of Eclipse. The projects in my post are only a very small sub set of the Helios release, see here &lt;a href="http://www.eclipse.org/helios/projects.php"&gt;all projects&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Preliminary first a big praise to the Eclipse developers and the community, Helios is again another great milestone and the best development environment we ever had. Ok I know there are other great IDE’s out there (Netbeans and IntelliJ) but how? I am in love with Eclipse, so please no flame war here. And also Eclipse is more then a IDE.&lt;br /&gt;&lt;br /&gt;The Helios RC3 was for me already so stable, that I've had it in my daily work. E.g. I have used the RC3 coding in a workshop with customers and I can tell Helios runs on my Mac Book as stable as any Eclipse version has before. First important point Helios seems to run very stable! Initial tests on Windows 7 also showed significant improvements have been made for SWT and Windows 7. But on Windows7 and Eclipse I will not actually talk here because I’m a Mac user!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;1. Eclipse Workbench&amp;nbsp;&lt;/span&gt;&lt;br /&gt;First a look at the basic Eclipse platform and what is new and what what pleases me.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Drag and Drop Files&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;In Helios you can drag and drop files and folders from the operating system in the Package Explorer, Project Explorer or Navigator view then a dialog popup where you can choose to copy the files or import the files as link. &lt;br /&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_zXKc-SRU8qo/TBaUMvYCvdI/AAAAAAAAAZ0/qhMZji74gsw/s1600/Bildschirmfoto+2010-06-14+um+22.42.12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="203" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/TBaUMvYCvdI/AAAAAAAAAZ0/qhMZji74gsw/s400/Bildschirmfoto+2010-06-14+um+22.42.12.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Resource Filter&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;File system resources can now be filtered for each project.&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/_zXKc-SRU8qo/TBQUXLUrfmI/AAAAAAAAAUc/8aFfgRZD73E/s1600/Bildschirmfoto+2010-06-12+um+22.46.35.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="440" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/TBQUXLUrfmI/AAAAAAAAAUc/8aFfgRZD73E/s640/Bildschirmfoto+2010-06-12+um+22.46.35.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Linked Resources&lt;/b&gt;&lt;br /&gt;Linked resources can now be defined their locations relative to users defined variables.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_zXKc-SRU8qo/TBQUjXlHt9I/AAAAAAAAAUk/rIYVZCB1_ek/s1600/Bildschirmfoto+2010-06-12+um+22.50.18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="420" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/TBQUjXlHt9I/AAAAAAAAAUk/rIYVZCB1_ek/s640/Bildschirmfoto+2010-06-12+um+22.50.18.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Virtual folders&lt;/b&gt;&lt;br /&gt;Virtual folders are a very cool new feature in Helios. A virtual folders is a new type of resource that exist only in the workspace and not in the backed directory in your file system. The function can be found in the advanced menu in the eclipse new folder wizard.&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/_zXKc-SRU8qo/TBQUuV8jkYI/AAAAAAAAAUs/sTv0GtvBHHw/s1600/Bildschirmfoto+2010-06-12+um+22.54.15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/TBQUuV8jkYI/AAAAAAAAAUs/sTv0GtvBHHw/s400/Bildschirmfoto+2010-06-12+um+22.54.15.png" width="305" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;UNIX file permissions&lt;/b&gt;&lt;br /&gt;Nice feature for Linux and Mac users. The full set of UNIX file permissions are now supported in the eclipse properties dialog of a resource.&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/_zXKc-SRU8qo/TBQU4zxZOzI/AAAAAAAAAU0/0HcToj_6cHs/s1600/Bildschirmfoto+2010-06-12+um+22.56.04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="436" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/TBQU4zxZOzI/AAAAAAAAAU0/0HcToj_6cHs/s640/Bildschirmfoto+2010-06-12+um+22.56.04.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Key bindings in Quick Access&lt;/b&gt;&lt;br /&gt;The eclipse quick access (E.g. CMD+3 or CTRL+3) shows now the key bindings.&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/_zXKc-SRU8qo/TBQVEuT9QkI/AAAAAAAAAU8/ZmogFXLZPys/s1600/Bildschirmfoto+2010-06-12+um+22.59.05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/TBQVEuT9QkI/AAAAAAAAAU8/ZmogFXLZPys/s400/Bildschirmfoto+2010-06-12+um+22.59.05.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Comparing configurations in the Installation History&lt;/b&gt;&lt;br /&gt;Now it is possible to compare the installation history, to see which plug-ins are installed and which are removed.&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/_zXKc-SRU8qo/TBQVSipy9KI/AAAAAAAAAVE/dwFN4UTxFEQ/s1600/Bildschirmfoto+2010-06-12+um+23.01.29.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="416" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/TBQVSipy9KI/AAAAAAAAAVE/dwFN4UTxFEQ/s640/Bildschirmfoto+2010-06-12+um+23.01.29.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;2. Eclipse Workbench Team&lt;/span&gt;&lt;br /&gt;The eclipse runtime comes with a basic set of views, editors and wizards for SCM they will be used for CVS, SVN and GIT integration or other SCM systems.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Open With in Compare editor&lt;/b&gt;&lt;br /&gt;Now there is a Menu Item open with in the context menu in the compare editor.&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/_zXKc-SRU8qo/TBQVjXoKkdI/AAAAAAAAAVM/jK_QndNUOtk/s1600/Bildschirmfoto+2010-06-12+um+23.07.14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="366" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/TBQVjXoKkdI/AAAAAAAAAVM/jK_QndNUOtk/s400/Bildschirmfoto+2010-06-12+um+23.07.14.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;3. Eclipse Workbench Debug&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Breakpoint Properties&lt;/b&gt;&lt;br /&gt;The breakpoints view now provides detail panel to display and edit the breakpoint properties.&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/_zXKc-SRU8qo/TBQVyUhAChI/AAAAAAAAAVU/jDQ_6MbpU2E/s1600/Bildschirmfoto+2010-06-12+um+23.23.53.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="136" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/TBQVyUhAChI/AAAAAAAAAVU/jDQ_6MbpU2E/s400/Bildschirmfoto+2010-06-12+um+23.23.53.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;4. Eclipse JDT&lt;/span&gt;&lt;br /&gt;The Java Development Tools are a very cool set of views and editors for java development, refactoring, debug and testing. Here the new feature I love in Helios version of JDT.&lt;br /&gt;&lt;br /&gt;A nice overview off the new JDT features gives the eclipse Live screen cast &lt;a href="http://live.eclipse.org/node/908"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Open Implementation&lt;/b&gt;&lt;br /&gt;Was a new feature in the eclipse Galileo release, now the function is also in the navigation menu and a key binding can be assigned.&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/_zXKc-SRU8qo/TBaR4JJuJTI/AAAAAAAAAZs/ZfO7GVk3M5I/s1600/Bildschirmfoto+2010-06-14+um+22.31.03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="395" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/TBaR4JJuJTI/AAAAAAAAAZs/ZfO7GVk3M5I/s640/Bildschirmfoto+2010-06-14+um+22.31.03.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code Style On/Off Tags&amp;nbsp;&lt;/b&gt;&lt;br /&gt;Now there is new tab in the code formatter options of your code style. The tab is called “On/off Tags”, when you enable this feature you can specify regions in your code, which should not be touch, by the auto formatter. &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/_zXKc-SRU8qo/TBZ4k5RHLAI/AAAAAAAAAZc/7sLhHdTdJ9k/s1600/Bildschirmfoto+2010-06-14+um+20.37.10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="368" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/TBZ4k5RHLAI/AAAAAAAAAZc/7sLhHdTdJ9k/s640/Bildschirmfoto+2010-06-14+um+20.37.10.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&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/_zXKc-SRU8qo/TBZ4p-lqdXI/AAAAAAAAAZk/n1Iab2MsFn4/s1600/Bildschirmfoto+2010-06-14+um+20.43.42.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/TBZ4p-lqdXI/AAAAAAAAAZk/n1Iab2MsFn4/s640/Bildschirmfoto+2010-06-14+um+20.43.42.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Content assist for getter and setter&lt;/b&gt;&lt;br /&gt;Now the getter and setter for field can be create via the content assist a good alternative to quick assist via CMD+1 (CTRL +1).&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/_zXKc-SRU8qo/TBQWU0FAjCI/AAAAAAAAAVc/x_S398510VQ/s1600/Bildschirmfoto+2010-06-12+um+23.31.40.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/TBQWU0FAjCI/AAAAAAAAAVc/x_S398510VQ/s320/Bildschirmfoto+2010-06-12+um+23.31.40.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;New Refactoring Pattern - Move type to new file&lt;/b&gt;&lt;br /&gt;Now a private class can be moved to a file see the example in screen shot. A pattern I not often need but some times it is cool you can develop all in a file and then use this pattern.&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/_zXKc-SRU8qo/TBQWfTZQFCI/AAAAAAAAAVk/-_gVNu9A5Ok/s1600/Bildschirmfoto+2010-06-12+um+23.35.34.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/TBQWfTZQFCI/AAAAAAAAAVk/-_gVNu9A5Ok/s320/Bildschirmfoto+2010-06-12+um+23.35.34.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Java Compiler Report missing @Override&lt;/b&gt;&lt;br /&gt;When you have a Java 1.6 project the java compiler now reports missing override annotations that’s very cool. The feature must be activated in the compiler settings.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_zXKc-SRU8qo/TBQWp033QhI/AAAAAAAAAVs/7FhzA4cAYr4/s1600/Bildschirmfoto+2010-06-12+um+23.40.15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="70" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/TBQWp033QhI/AAAAAAAAAVs/7FhzA4cAYr4/s640/Bildschirmfoto+2010-06-12+um+23.40.15.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_zXKc-SRU8qo/TBQWuwOCCxI/AAAAAAAAAV0/6f9u3u9JXeA/s1600/Bildschirmfoto+2010-06-12+um+23.41.02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="201" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/TBQWuwOCCxI/AAAAAAAAAV0/6f9u3u9JXeA/s640/Bildschirmfoto+2010-06-12+um+23.41.02.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Compiler Setting Import / Export&lt;/b&gt;&lt;br /&gt;The settings of the Java compiler can now be exported and imported. That’s a cool feature when you work with more then one workspace and on different machines.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_zXKc-SRU8qo/TBQW-JmU1pI/AAAAAAAAAV8/l2sK1Fz2saQ/s1600/Bildschirmfoto+2010-06-12+um+23.43.12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/TBQW-JmU1pI/AAAAAAAAAV8/l2sK1Fz2saQ/s400/Bildschirmfoto+2010-06-12+um+23.43.12.png" width="351" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;New Build Path Error Decorator&lt;/b&gt;&lt;br /&gt;Build Path error is now shown by an extra icon as decorator. That’s very cool when I for got to set the Maven Classpath Variable in my Eclipse I see its not a compile problem something with my build path do not work great feature.&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/_zXKc-SRU8qo/TBQXLo0vjvI/AAAAAAAAAWE/iaOEB0dZat4/s1600/Bildschirmfoto+2010-06-12+um+23.47.18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/TBQXLo0vjvI/AAAAAAAAAWE/iaOEB0dZat4/s320/Bildschirmfoto+2010-06-12+um+23.47.18.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Type Hierarchy&lt;/b&gt;&lt;br /&gt;The Type Hierarchy has now the option that can be sent to the background.&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/_zXKc-SRU8qo/TBQXVz4I2fI/AAAAAAAAAWM/bKy-chOFGCk/s1600/Bildschirmfoto+2010-06-12+um+23.49.20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="158" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/TBQXVz4I2fI/AAAAAAAAAWM/bKy-chOFGCk/s400/Bildschirmfoto+2010-06-12+um+23.49.20.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Debugging Instance Counts&lt;/b&gt;&lt;br /&gt;The Variables view has now a new column displaying the number of instances of a variable.&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/_zXKc-SRU8qo/TBQXl80a4BI/AAAAAAAAAWU/8vvjIXR65tg/s1600/Bildschirmfoto+2010-06-12+um+23.53.55.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="214" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/TBQXl80a4BI/AAAAAAAAAWU/8vvjIXR65tg/s640/Bildschirmfoto+2010-06-12+um+23.53.55.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;JUnit Result Import form URL&lt;/b&gt;&lt;br /&gt;JUnit results can be import form a URL e.g. form a build server that’s cool.&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/_zXKc-SRU8qo/TBQX2lSPWeI/AAAAAAAAAWc/XrnMYQpQ8-0/s1600/Bildschirmfoto+2010-06-12+um+23.56.24.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="162" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/TBQX2lSPWeI/AAAAAAAAAWc/XrnMYQpQ8-0/s400/Bildschirmfoto+2010-06-12+um+23.56.24.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;JUnit Launcher Test Method&lt;/b&gt;&lt;br /&gt;Now the test method can be set in the JUnit launcher. That’s cool when you like to run one test, in eclipse Galileo this works also but not over the launch configuration.&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/_zXKc-SRU8qo/TBQYEg8lRiI/AAAAAAAAAWk/Hm1D38vksVY/s1600/Bildschirmfoto+2010-06-12+um+23.58.57.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="620" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/TBQYEg8lRiI/AAAAAAAAAWk/Hm1D38vksVY/s640/Bildschirmfoto+2010-06-12+um+23.58.57.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;5. Eclipse PDE&lt;/span&gt;&lt;br /&gt;PDE is the eclipse plug-in development tool suite.  Because every eclipse plug-in is also an OSGi bundle PDE provides also a great tool suite for development of OSGi based applications. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Eclipse OSGi console&lt;/b&gt;&lt;br /&gt;An OSGi console is now available for the running eclipse framework.&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/_zXKc-SRU8qo/TBQYWfDjFGI/AAAAAAAAAWs/NtnVbaPi1pk/s1600/Bildschirmfoto+2010-06-13+um+00.11.36.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="236" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/TBQYWfDjFGI/AAAAAAAAAWs/NtnVbaPi1pk/s640/Bildschirmfoto+2010-06-13+um+00.11.36.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Export Target Content&lt;/b&gt;&lt;br /&gt;It's now possible to export the contents of the target platform into a directory.&lt;br /&gt;Cool feature to share a platform.&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/_zXKc-SRU8qo/TBQYmBtaTiI/AAAAAAAAAW0/No9c1I2d98k/s1600/Bildschirmfoto+2010-06-13+um+00.21.58.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/TBQYmBtaTiI/AAAAAAAAAW0/No9c1I2d98k/s320/Bildschirmfoto+2010-06-13+um+00.21.58.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_zXKc-SRU8qo/TBQYrZHs1-I/AAAAAAAAAW8/0Ko4c8q1Fm4/s1600/Bildschirmfoto+2010-06-13+um+00.22.15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/TBQYrZHs1-I/AAAAAAAAAW8/0Ko4c8q1Fm4/s320/Bildschirmfoto+2010-06-13+um+00.22.15.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;6. Eclipse Modeling (EMF, GMF…)&lt;/span&gt;&lt;br /&gt;Eclipse Helios comes with a big suite of tools for model driven development. An overview of the cool tools is not scope of this post. Here the new feature in the eclipse modeling project I love.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Text Editor for EMF &lt;/b&gt;&lt;br /&gt;Now in Helios there is really cool text based editor for EMF models.&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/_zXKc-SRU8qo/TBQY_Q38ARI/AAAAAAAAAXE/jEhSuso8SDs/s1600/Bildschirmfoto+2010-06-13+um+00.32.04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="404" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/TBQY_Q38ARI/AAAAAAAAAXE/jEhSuso8SDs/s640/Bildschirmfoto+2010-06-13+um+00.32.04.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;EMF Tree Editor&lt;/b&gt;&lt;br /&gt;There is new generic EMF Tree based editor in Helios with a integrated properties view.&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/_zXKc-SRU8qo/TBQZdNmKMQI/AAAAAAAAAXM/TATAQEVbIbY/s1600/Bildschirmfoto+2010-06-13+um+01.33.59.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="454" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/TBQZdNmKMQI/AAAAAAAAAXM/TATAQEVbIbY/s640/Bildschirmfoto+2010-06-13+um+01.33.59.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;EMF Compare&lt;/b&gt;&lt;br /&gt;I cannot remember what I commemorated it there since Galileo, but a played around with the EMF generic model comparing tools and it looks great. You can use the EMF compare tool for all EMF based models also your own models which are based on EMF Ecore.&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/_zXKc-SRU8qo/TBQZ2eYEN9I/AAAAAAAAAXU/Uq-lDsBFxq8/s1600/Bildschirmfoto+2010-06-13+um+00.37.01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="262" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/TBQZ2eYEN9I/AAAAAAAAAXU/Uq-lDsBFxq8/s640/Bildschirmfoto+2010-06-13+um+00.37.01.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Eclipse GMF&lt;/b&gt;&lt;br /&gt;Cool project I worked a longtime ago with it, when you like to create a graphical DSL this model driven tool is your fist choice I think. GMF provides a model driven approaches to create graphical editors for eclipse, which are based on EMF and GEF.  &lt;br /&gt;&lt;br /&gt;I don’t have the really review the Helios version, I created a small editor all works but I don’t find new feature compared to Galileo version. But I don’t spend much time in the review. What I can say that the basic functions works fine in RC4. And you can use the new EMF modeling editors to create the models but this not a GMF feature.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_zXKc-SRU8qo/TBQaYWK5wBI/AAAAAAAAAXc/rTKq_HYAm-I/s1600/Bildschirmfoto+2010-06-13+um+00.46.55.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="282" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/TBQaYWK5wBI/AAAAAAAAAXc/rTKq_HYAm-I/s640/Bildschirmfoto+2010-06-13+um+00.46.55.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;7. Eclipse Mylyn&lt;/span&gt;&lt;br /&gt;Mylyn is a great eclipse tool for management tasks.&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/_zXKc-SRU8qo/TBTIyx72OjI/AAAAAAAAAYc/0sstzsUrCaI/s1600/Bildschirmfoto+2010-06-13+um+14.01.24.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="313" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/TBTIyx72OjI/AAAAAAAAAYc/0sstzsUrCaI/s640/Bildschirmfoto+2010-06-13+um+14.01.24.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Mylyn WikiText&lt;/b&gt;&lt;br /&gt;Mylyn provides now a cool WikiText editor, the editor can be used in Mylyn but also standalone or in any eclipse based application.&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/_zXKc-SRU8qo/TBQbVTAP09I/AAAAAAAAAXk/-1Q86ATTrfQ/s1600/Bildschirmfoto+2010-06-13+um+01.41.29.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/TBQbVTAP09I/AAAAAAAAAXk/-1Q86ATTrfQ/s400/Bildschirmfoto+2010-06-13+um+01.41.29.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_zXKc-SRU8qo/TBQbbzCJdoI/AAAAAAAAAXs/7gBZc1fCGEo/s1600/Bildschirmfoto+2010-06-13+um+01.41.46.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/TBQbbzCJdoI/AAAAAAAAAXs/7gBZc1fCGEo/s400/Bildschirmfoto+2010-06-13+um+01.41.46.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;8. Eclipse Memory Analyzer&lt;/span&gt;&lt;br /&gt;This is cool eclipse plug-in for memory analyzes to find memory bugs.&lt;br /&gt;&lt;br /&gt;When you like to use the Eclipse Memory Analyzer the first step is to create a Java heap dump. This can be done when you have a server application over JMX see the screen shot, or over the default Java VM options to create a heap dump (therefore see the Java VM documentation).&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/_zXKc-SRU8qo/TBTNLoZP3tI/AAAAAAAAAYk/PCPse2zGRtQ/s1600/Bildschirmfoto+2010-06-13+um+14.20.49.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="475" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/TBTNLoZP3tI/AAAAAAAAAYk/PCPse2zGRtQ/s640/Bildschirmfoto+2010-06-13+um+14.20.49.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;When you have a heap dump you open it and then you can analyze the dump with the Eclipse Memory Analyzer. More details see the Memory Analyzer tutorial in eclipse help.&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/_zXKc-SRU8qo/TBTOcVES4II/AAAAAAAAAY0/k7EDapKAyfI/s1600/Bildschirmfoto+2010-06-13+um+14.26.07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="242" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/TBTOcVES4II/AAAAAAAAAY0/k7EDapKAyfI/s400/Bildschirmfoto+2010-06-13+um+14.26.07.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&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/_zXKc-SRU8qo/TBTNSXbKVYI/AAAAAAAAAYs/9vra6cfDw5w/s1600/Bildschirmfoto+2010-06-13+um+14.19.04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="360" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/TBTNSXbKVYI/AAAAAAAAAYs/9vra6cfDw5w/s640/Bildschirmfoto+2010-06-13+um+14.19.04.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;9. EGit &lt;/span&gt;&lt;br /&gt;First time in simultaneous release of eclipse a EGit. EGit is GIT SCM integration in eclipse. The basic features are implemented. What is not in EGit 0.8.1 is a team synchronization view, but I hope in version 1.0.0 which comes at the end of the year I think, this is also implemented. I think the EGit developers do a very good job in such a short time such a cool integration respect and thanks.&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/_zXKc-SRU8qo/TBQcDuXSaRI/AAAAAAAAAX0/uQ31M76cXzs/s1600/Bildschirmfoto+2010-06-13+um+01.00.23.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/TBQcDuXSaRI/AAAAAAAAAX0/uQ31M76cXzs/s640/Bildschirmfoto+2010-06-13+um+01.00.23.png" width="444" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;10. Eclipse WTP&lt;/span&gt;&lt;br /&gt;The WTP project provides a huge set of tools for web development specially tools for J2EE web development.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Web Modules 3.0 and JSF 2.0&lt;/b&gt;&lt;br /&gt;WTP now supports web modules version 3.0, JSF 2.0 and for e.g. apache tomcat 7.0&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/_zXKc-SRU8qo/TBSsho918TI/AAAAAAAAAX8/2jgiFtW83yI/s1600/Bildschirmfoto+2010-06-13+um+11.07.01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/TBSsho918TI/AAAAAAAAAX8/2jgiFtW83yI/s400/Bildschirmfoto+2010-06-13+um+11.07.01.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_zXKc-SRU8qo/TBSspIPPCCI/AAAAAAAAAYE/W1XtDJPAnew/s1600/Bildschirmfoto+2010-06-13+um+11.08.42.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/TBSspIPPCCI/AAAAAAAAAYE/W1XtDJPAnew/s320/Bildschirmfoto+2010-06-13+um+11.08.42.png" width="313" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Web Deployment Assembly&lt;/b&gt;&lt;br /&gt;In the Helios WTP version is now a preference dialog to configure the mappings of the project folder to the deployment structure. That’s a very import feature in Galileo I do this in the project settings files by hand or mvn eclipse does it for me, but there was no dialog for it. This new dialog replaced also the buggy Java EE module dependencies from Galileo dialog.&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/_zXKc-SRU8qo/TBSs0S6I7AI/AAAAAAAAAYM/aTMkQe19gAI/s1600/Bildschirmfoto+2010-06-13+um+11.24.16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="444" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/TBSs0S6I7AI/AAAAAAAAAYM/aTMkQe19gAI/s640/Bildschirmfoto+2010-06-13+um+11.24.16.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;JSF Facelet Support&lt;/b&gt;&lt;br /&gt;The HTML editor supports know JSF Facelet, which are also part of the JSF 2.0 specification. Now the content assist in the HTML can be used to select the JSF components.&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/_zXKc-SRU8qo/TBSs8vCbPhI/AAAAAAAAAYU/pbRMoM-VZUk/s1600/Bildschirmfoto+2010-06-13+um+11.50.23.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="408" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/TBSs8vCbPhI/AAAAAAAAAYU/pbRMoM-VZUk/s640/Bildschirmfoto+2010-06-13+um+11.50.23.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;XPath 1.0 and 2.0 Processor&lt;/b&gt;&lt;br /&gt;Now there is a XPath 1.0 and 2.0 processor in WTP.&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/_zXKc-SRU8qo/TBTRCKkqpdI/AAAAAAAAAY8/V14XQyUGBc4/s1600/Bildschirmfoto+2010-06-13+um+14.34.28.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="332" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/TBTRCKkqpdI/AAAAAAAAAY8/V14XQyUGBc4/s640/Bildschirmfoto+2010-06-13+um+14.34.28.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;11. Remote System Explorer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The remote system explorer brings an eclipse integration for SCP, SSH and other cool tools to manage remote systems. I use the remote system explorer to edit configuration file on remote systems e.g. on the testing environment with my favorite eclipse editors e.g. for XML configuration files. The remote system explorer brings also a set of cool tools to work with your local system.&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/_zXKc-SRU8qo/TBTbTNKKQ3I/AAAAAAAAAZM/bOxANrfbpwk/s1600/Bildschirmfoto+2010-06-13+um+15.21.00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/TBTbTNKKQ3I/AAAAAAAAAZM/bOxANrfbpwk/s320/Bildschirmfoto+2010-06-13+um+15.21.00.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Local Console Integration&lt;/b&gt;&lt;br /&gt;Now there is integration of the local console e.g. bash in the Helios release. In Galieo I need to use for a local consol SSH now I use the bash native cool. &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/_zXKc-SRU8qo/TBTaxt4v0XI/AAAAAAAAAZE/4hWey5iqUmU/s1600/Bildschirmfoto+2010-06-13+um+15.11.09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="256" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/TBTaxt4v0XI/AAAAAAAAAZE/4hWey5iqUmU/s640/Bildschirmfoto+2010-06-13+um+15.11.09.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;An alternative is to use the local shell feature see the screen shout bellow from the RSE project, but in this shell the TAB feature from the bash do not work.  So I'm very happy about the new integration of my local bash in eclipse.&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/_zXKc-SRU8qo/TBTcvRUfG0I/AAAAAAAAAZU/arb0TvJViNU/s1600/Bildschirmfoto+2010-06-13+um+15.27.05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="260" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/TBTcvRUfG0I/AAAAAAAAAZU/arb0TvJViNU/s640/Bildschirmfoto+2010-06-13+um+15.27.05.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/1013943301267331946-2630430919682319818?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/2630430919682319818/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/06/review-eclipse-helios-rc4.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2630430919682319818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2630430919682319818'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/06/review-eclipse-helios-rc4.html' title='Review Eclipse Helios RC4'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zXKc-SRU8qo/TBaUMvYCvdI/AAAAAAAAAZ0/qhMZji74gsw/s72-c/Bildschirmfoto+2010-06-14+um+22.42.12.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-966434961977578034</id><published>2010-06-07T20:58:00.001+02:00</published><updated>2010-06-07T20:58:53.618+02:00</updated><title type='text'>OSGi Console Services and Filter</title><content type='html'>In the Equinox OSGi Console with the command &lt;i&gt;services&lt;/i&gt; all running services will be listed. When you like to filter you can use the OSGi &lt;a href="http://www.osgi.org/javadoc/r4v42/org/osgi/framework/Filter.html"&gt;Filter Syntax&lt;/a&gt;. The filter I use often is &lt;i&gt;services (objectClass=com.github.tux2323*)&lt;/i&gt; then all services which starts with the Java package com.github.tux2323 will be listed.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;pre class="prettyprint"&gt;osgi&amp;gt; services (objectClass=com.github.tux2323*)&lt;br /&gt;{com.github.tux2323.demo.chat.server.ChatServer}={service.id=26}&lt;br /&gt;  Registered by bundle: com.github.tux2323.demo.chat.server_1.0.0.qualifier [1]&lt;br /&gt;  No bundles using service.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;A nice german article from Heiko Seeberger about OSGi filter can be found &lt;a href="http://it-republik.de/jaxenter/artikel/Services-%E0-la-OSGi-2237.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-966434961977578034?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/966434961977578034/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/06/osgi-console-services-and-filter.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/966434961977578034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/966434961977578034'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/06/osgi-console-services-and-filter.html' title='OSGi Console Services and Filter'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-8089566158891267860</id><published>2010-04-21T21:51:00.001+02:00</published><updated>2010-04-22T08:45:30.846+02:00</updated><title type='text'>My first op4j code</title><content type='html'>I play around with op4j makes a lot of fun. Here my first op4j code:&lt;br /&gt;&lt;pre class="prettyprint"&gt;// Create a array with out null and 0 values&lt;br /&gt;Integer[] integers = Op.onArrayFor(1, 2, 3, null, 4, null, 0).removeAllNull().removeAllEqual(0).get();&lt;br /&gt;  &lt;br /&gt;// Assert&lt;br /&gt;for (Integer value : integers) {&lt;br /&gt;   assertNotNull(value);&lt;br /&gt;   assertNotSame(0, value);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Link:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.op4j.org/"&gt;www.op4j.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://martinfowler.com/bliki/FluentInterface.html"&gt;http://martinfowler.com/bliki/FluentInterface.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-8089566158891267860?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/8089566158891267860/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/04/my-first-op4j-code.html#comment-form' title='3 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/8089566158891267860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/8089566158891267860'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/04/my-first-op4j-code.html' title='My first op4j code'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-9071713336980135368</id><published>2010-04-19T19:39:00.003+02:00</published><updated>2010-04-19T19:43:13.276+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><title type='text'>UML Talk Infos and Links</title><content type='html'>Here some Infos around my german UML "&lt;i&gt;Einführung in die UML&lt;/i&gt;" talk. More details about SDC see &lt;a href="http://www.seitenbau.com/sdc/"&gt;http://www.seitenbau.com/sdc/&lt;/a&gt;.&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/_zXKc-SRU8qo/S8yTBoF6tKI/AAAAAAAAAT4/dhQFVhNOQPY/s1600/DSC_4554.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="425" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/S8yTBoF6tKI/AAAAAAAAAT4/dhQFVhNOQPY/s640/DSC_4554.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Here my slides:&lt;br /&gt;&lt;br /&gt;&lt;div id="__ss_3751565" style="width: 425px;"&gt;&lt;b style="display: block; margin: 12px 0pt 4px;"&gt;&lt;a href="http://www.slideshare.net/tux2323/2010-einfhrung-in-die-uml-seitenbau-developer-convention" title="2010 -  Einführung in die UML - Seitenbau Developer Convention"&gt;2010 -  Einführung in die UML - Seitenbau Developer Convention&lt;/a&gt;&lt;/b&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2010-04-16uml-sdc-100416151333-phpapp01&amp;stripped_title=2010-einfhrung-in-die-uml-seitenbau-developer-convention" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2010-04-16uml-sdc-100416151333-phpapp01&amp;stripped_title=2010-einfhrung-in-die-uml-seitenbau-developer-convention" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style="padding: 5px 0pt 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/tux2323"&gt;tux2323&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Here some Links to the topics from the talk:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://yuml.me/"&gt;http://yuml.me/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.umlgraph.org/%20"&gt;http://www.umlgraph.org/ &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.umlet.com/"&gt;http://www.umlet.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://domaindrivendesign.org/%20"&gt;http://domaindrivendesign.org/ &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://maven-plugins.sourceforge.net/maven-dotuml-plugin/"&gt;http://maven-plugins.sourceforge.net/maven-dotuml-plugin/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://maven.apache.org/plugins/maven-javadoc-plugin/examples/alternate-doclet.html"&gt;http://maven.apache.org/plugins/maven-javadoc-plugin/examples/alternate-doclet.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/apps/mediawiki/textuml/index.php?title=TextUML_Toolkit%20"&gt;http://sourceforge.net/apps/mediawiki/textuml/index.php?title=TextUML_Toolkit &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://plantuml.sourceforge.net/classes.html"&gt;http://plantuml.sourceforge.net/classes.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/modeling/mdt/?project=uml2"&gt;http://www.eclipse.org/modeling/mdt/?project=uml2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.vogella.de/articles/UML/article.html"&gt;http://www.vogella.de/articles/UML/article.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.powerpointsgratis.net/UML/1/%20"&gt;http://www.powerpointsgratis.net/UML/1/ &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://de.wikipedia.org/wiki/Class-Responsibility-Collaboration-Karten%20"&gt;http://de.wikipedia.org/wiki/Class-Responsibility-Collaboration-Karten &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest"&gt;http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-9071713336980135368?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/9071713336980135368/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/04/uml-talk-infos-and-links.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/9071713336980135368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/9071713336980135368'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/04/uml-talk-infos-and-links.html' title='UML Talk Infos and Links'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zXKc-SRU8qo/S8yTBoF6tKI/AAAAAAAAAT4/dhQFVhNOQPY/s72-c/DSC_4554.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-529338478122644237</id><published>2010-04-11T19:37:00.004+02:00</published><updated>2010-04-11T20:04:05.706+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><category scheme='http://www.blogger.com/atom/ns#' term='Profiling'/><title type='text'>jSonde – Generate a UML Sequence Diagram</title><content type='html'>The eclipse TPTP profiler has a very cool feature, create a UML sequence diagram from a profiling session. But the problem the TPTP profiling agent doesn’t run on my MacBook. So I looked for other free tools and I found jSonde an open source Java profiler (GPL).&lt;br /&gt;&lt;br /&gt;jSonde can be used to generate a UML sequence diagram from a java application by profiling the app e.g. this can be used to document the actual implementation of a use case. How a this can be done, I will show step by step here in this post:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 1.)&lt;/b&gt; Get jSonde from &lt;a href="http://www.jsonde.com/"&gt;http://www.jsonde.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 2.)&lt;/b&gt; Create a JUnit test case for the use case / function which you want to document, or when you do TDD look for an existing test... &lt;br /&gt;&lt;br /&gt;Here the example code of my test:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;@Test&lt;br /&gt; public void testPurchase() {&lt;br /&gt;&lt;br /&gt;  Seller sellerOne = kasse.getSeller(100);&lt;br /&gt;  Seller sellerTwo = kasse.getSeller(101);&lt;br /&gt;&lt;br /&gt;  Position hose = new Position();&lt;br /&gt;  hose.setDescription("Hose");&lt;br /&gt;  hose.setPrice(2150);&lt;br /&gt;  hose.setSeller(sellerOne);&lt;br /&gt;&lt;br /&gt;  Position kleid = new Position();&lt;br /&gt;  kleid.setDescription("Kleid");&lt;br /&gt;  kleid.setPrice(2150);&lt;br /&gt;  kleid.setSeller(sellerTwo);&lt;br /&gt;&lt;br /&gt;  Sale sale = new Sale();&lt;br /&gt;  sale.addPosition(hose);&lt;br /&gt;  sale.addPosition(kleid);&lt;br /&gt;&lt;br /&gt;  kasse.purchase(sale);&amp;nbsp; &lt;/pre&gt;&lt;pre class="prettyprint"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="prettyprint"&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Step 3.)&lt;/b&gt; Run the test e.g. in eclipse (or in other IDE) with the follow VM parameter: “-javaagent${JSONE_PATH}/lib/jsonde.agent-1.0.0.beta7.jar=60001”&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/_zXKc-SRU8qo/S8IJDOCGjNI/AAAAAAAAATw/h25Km-sFsAU/s1600/Bildschirmfoto+2010-04-11+um+19.15.26.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="427" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/S8IJDOCGjNI/AAAAAAAAATw/h25Km-sFsAU/s640/Bildschirmfoto+2010-04-11+um+19.15.26.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&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/_zXKc-SRU8qo/S8IIJP8b6yI/AAAAAAAAATQ/Ycc_0-irTR4/s1600/Bildschirmfoto+2010-04-11+um+19.19.07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="72" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/S8IIJP8b6yI/AAAAAAAAATQ/Ycc_0-irTR4/s640/Bildschirmfoto+2010-04-11+um+19.19.07.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 4.) &lt;/b&gt;Start jSonde and click File -&amp;gt; New Project&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/_zXKc-SRU8qo/S8IIc6EhZWI/AAAAAAAAATo/tREI4hT-Xek/s1600/Bildschirmfoto+2010-04-11+um+19.16.55.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/S8IIc6EhZWI/AAAAAAAAATo/tREI4hT-Xek/s320/Bildschirmfoto+2010-04-11+um+19.16.55.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 5.)&lt;/b&gt; Enter a project name and the namespace of the application then click Connect&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_zXKc-SRU8qo/S8IIX_GulwI/AAAAAAAAATY/S8aQgFQFMXQ/s1600/Bildschirmfoto+2010-04-11+um+19.18.17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/S8IIX_GulwI/AAAAAAAAATY/S8aQgFQFMXQ/s320/Bildschirmfoto+2010-04-11+um+19.18.17.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Step 6.)&lt;/b&gt; After the test is pass, click sequence diagram and select the test method in the tree view&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/_zXKc-SRU8qo/S8IIDN5gO2I/AAAAAAAAATI/FHyu1CyFhJI/s1600/Bildschirmfoto+2010-04-11+um+19.26.24.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="376" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/S8IIDN5gO2I/AAAAAAAAATI/FHyu1CyFhJI/s640/Bildschirmfoto+2010-04-11+um+19.26.24.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here the full UML sequence diagram for the "Purchase" test implementation:&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/_zXKc-SRU8qo/S8IH7Io-awI/AAAAAAAAATA/lF6hNbIt32I/s1600/Purchase.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/S8IH7Io-awI/AAAAAAAAATA/lF6hNbIt32I/s640/Purchase.png" width="392" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.jsonde.com/"&gt;http://www.jsonde.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/tptp/"&gt;http://www.eclipse.org/tptp/&lt;/a&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-529338478122644237?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/529338478122644237/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/04/jsonde-java-profiler-to-generate-uml.html#comment-form' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/529338478122644237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/529338478122644237'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/04/jsonde-java-profiler-to-generate-uml.html' title='jSonde – Generate a UML Sequence Diagram'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zXKc-SRU8qo/S8IJDOCGjNI/AAAAAAAAATw/h25Km-sFsAU/s72-c/Bildschirmfoto+2010-04-11+um+19.15.26.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-6814997197532251163</id><published>2010-03-18T08:58:00.000+01:00</published><updated>2010-03-18T08:58:57.707+01:00</updated><title type='text'>TwiP JUnit Test with more then one Parameter</title><content type='html'>Here a example, how a JUnit test which use TwiP, can use more then one test parameter.&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/875071.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;See also my previous contribution on TwiP &lt;a href="http://tux2323.blogspot.com/2010/03/twip-for-parameterized-junit-tests.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://twip.sourceforge.net/"&gt;http://twip.sourceforge.net/&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-6814997197532251163?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/6814997197532251163/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/03/twip-junit-test-with-more-then-one.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/6814997197532251163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/6814997197532251163'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/03/twip-junit-test-with-more-then-one.html' title='TwiP JUnit Test with more then one Parameter'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-8259136155586748971</id><published>2010-03-09T22:52:00.000+01:00</published><updated>2010-03-09T22:52:08.938+01:00</updated><title type='text'>proposal SnakeYAML - Annotation YAML Loader</title><content type='html'>Andrey posts a comment on my blog post "YAML with snakeyaml" with the following question: "But I recognize a need to help pure Java&lt;-&gt;YAML transformations.&lt;br /&gt;Do you have an idea how the API may look like ? (to say just 'as in XStream' does not help much...)"&lt;br /&gt;&lt;br /&gt;So here a first shot how a annotation based framework can look like:&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/862145.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;here the YAML code:&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/862147.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;and here a proposal for the API client code:&lt;br /&gt;&lt;br /&gt;&lt;script src='http://pastie.org/862151.js'&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Feel free for comments ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-8259136155586748971?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/8259136155586748971/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/03/proposal-snakeyaml-annotation-yaml.html#comment-form' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/8259136155586748971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/8259136155586748971'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/03/proposal-snakeyaml-annotation-yaml.html' title='proposal SnakeYAML - Annotation YAML Loader'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-7854361291672016035</id><published>2010-03-02T20:31:00.000+01:00</published><updated>2010-03-02T20:31:23.863+01:00</updated><title type='text'>TwiP for Parameterized JUnit Tests</title><content type='html'>The native parameterized JUnit 4.X tests allows only one data set per test. With TwiP you can define one data set per test method, thats cool. Here a example&amp;nbsp; parameterized JUnit test with TwiP:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastie.org/850377.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;What not works in TwiP is the tree navigation (tested only in eclipse), because the mapping between the test tree result and the test methods is done by the name in the result tree. But TwiP add the paramter of the run in the name and then the mapping don't work :-( see the screenshot bellow, when you click on a test method you become a error dialog:&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/_zXKc-SRU8qo/S41nbtqsp9I/AAAAAAAAASw/3oWxcVJ6-4Y/s1600-h/Bildschirmfoto+2010-03-02+um+20.29.45.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="308" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/S41nbtqsp9I/AAAAAAAAASw/3oWxcVJ6-4Y/s640/Bildschirmfoto+2010-03-02+um+20.29.45.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://twip.sourceforge.net/"&gt;http://twip.sourceforge.net/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://junit.org/apidocs/org/junit/runners/Parameterized.html"&gt;http://junit.org/apidocs/org/junit/runners/Parameterized.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-7854361291672016035?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/7854361291672016035/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/03/twip-for-parameterized-junit-tests.html#comment-form' title='3 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7854361291672016035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7854361291672016035'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/03/twip-for-parameterized-junit-tests.html' title='TwiP for Parameterized JUnit Tests'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_zXKc-SRU8qo/S41nbtqsp9I/AAAAAAAAASw/3oWxcVJ6-4Y/s72-c/Bildschirmfoto+2010-03-02+um+20.29.45.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-2313068434093097019</id><published>2010-03-01T22:43:00.005+01:00</published><updated>2010-03-01T23:02:56.266+01:00</updated><title type='text'>YAML with snakeyaml</title><content type='html'>I played a bit around with YAML, here my results. I have used the Java implementation snakeyaml. Unfortunately I have not found a implementation that use Java annotation for mapping between YAML and Java Bean Objects.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastie.org/848792.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;The Java bean code, for the configuration:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastie.org/848814.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;And here a small test which use snakeyaml to load the YML file:&lt;br /&gt;&lt;script src="http://pastie.org/848816.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;There is also a cool plugin for YAML editor support in eclipse called yedit, here a screenshot:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_zXKc-SRU8qo/S4w5bTjztsI/AAAAAAAAASo/5ps6NZ9hV5I/s1600-h/Bildschirmfoto+2010-03-01+um+23.01.35.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="490" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/S4w5bTjztsI/AAAAAAAAASo/5ps6NZ9hV5I/s640/Bildschirmfoto+2010-03-01+um+23.01.35.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.yaml.org/"&gt;http://www.yaml.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/snakeyaml/"&gt;http://code.google.com/p/snakeyaml/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/yedit/"&gt;http://code.google.com/p/yedit/ &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-2313068434093097019?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/2313068434093097019/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/03/yaml-with-snakeyaml.html#comment-form' title='3 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2313068434093097019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2313068434093097019'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/03/yaml-with-snakeyaml.html' title='YAML with snakeyaml'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zXKc-SRU8qo/S4w5bTjztsI/AAAAAAAAASo/5ps6NZ9hV5I/s72-c/Bildschirmfoto+2010-03-01+um+23.01.35.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-2736680382499960056</id><published>2010-02-19T09:08:00.000+01:00</published><updated>2010-02-19T09:08:41.603+01:00</updated><title type='text'>zxing - 2D barcode image processing library</title><content type='html'>&lt;a href="http://code.google.com/p/zxing/"&gt;zxing&lt;/a&gt; is library under Apache License for decode and encode 1d and 2d barcodes. I played with the online demo (not with the Library it self) “&lt;a href="http://zxing.appspot.com/generator/"&gt;QR Code Generation&lt;/a&gt;” (this a application that encodes 2d barcodes) and with my mobile phone Nokia N95, which comes with an application to decode 2d barcodes with the mobile phone camera. It’s very cool decode barcodes with the mobile phone works very fast... Try it with the images bellow :-) and your mobile phones …&lt;br /&gt;&lt;br /&gt;Here some screenshot what I have done, first I encode a 2d Barcode with QR Code Generation.&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/_zXKc-SRU8qo/S35F2nI4rPI/AAAAAAAAASA/0hFiisCGRqA/s1600-h/Bildschirmfoto+2010-02-19+um+08.53.54.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="382" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/S35F2nI4rPI/AAAAAAAAASA/0hFiisCGRqA/s640/Bildschirmfoto+2010-02-19+um+08.53.54.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Then I can decode the barcode with my mobil phone.&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/_zXKc-SRU8qo/S35GQM1K3-I/AAAAAAAAASQ/YSTDTLnNy-o/s1600-h/Bildschirmfoto+2010-02-19+um+09.01.25.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/S35GQM1K3-I/AAAAAAAAASQ/YSTDTLnNy-o/s320/Bildschirmfoto+2010-02-19+um+09.01.25.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;And here the result of the decoded barcode&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/_zXKc-SRU8qo/S35GiZ6AdNI/AAAAAAAAASY/J7U0RFF_F4M/s1600-h/Bildschirmfoto+2010-02-19+um+09.01.02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/S35GiZ6AdNI/AAAAAAAAASY/J7U0RFF_F4M/s320/Bildschirmfoto+2010-02-19+um+09.01.02.png" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;There is also another zxing demo application called &lt;a href="http://zxing.org/w/decode.jspx"&gt;Online Decoder&lt;/a&gt;, for decode a barcode when you have no mobile phone with a barcode decode application.&lt;br /&gt;&lt;br /&gt;When I have time at weekend I will have a look at the Java library to get demos running local in my eclipse…&lt;br /&gt;&lt;/div&gt;Links:&lt;br /&gt;- &lt;a href="http://code.google.com/p/zxing/"&gt;zxing&lt;/a&gt;&lt;br /&gt;&lt;a href="http://zxing.org/w/decode.jspx"&gt;- Online Decoder&lt;/a&gt;&lt;br /&gt;&lt;a href="http://zxing.appspot.com/generator/"&gt;- QR Code Generation&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-2736680382499960056?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/2736680382499960056/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/02/zxing-2d-barcode-image-processing.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2736680382499960056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2736680382499960056'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/02/zxing-2d-barcode-image-processing.html' title='zxing - 2D barcode image processing library'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zXKc-SRU8qo/S35F2nI4rPI/AAAAAAAAASA/0hFiisCGRqA/s72-c/Bildschirmfoto+2010-02-19+um+08.53.54.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-3665241151302022500</id><published>2010-02-17T21:01:00.002+01:00</published><updated>2010-03-23T20:44:06.714+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Visualization'/><title type='text'>My First Eclipse ZEST Demo Application</title><content type='html'>Eclipse ZEST is a very cool Framework based on Eclipse GEF, for creating graph based software visualization tools for eclipse, with a few lines of code. The PDE Dependency Visualization Plugin for example is based on ZEST, see also my pervious post &lt;a href="http://tux2323.blogspot.com/2010/01/eclipse-pde-dependency-visualization.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Good ZEST starting points are the nice examples apps in the Eclipse ZEST CVS.&lt;br /&gt;&lt;br /&gt;Here a screenshot of my first ZEST demo application.&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/_zXKc-SRU8qo/S3xK6CznY6I/AAAAAAAAAR4/CWEEXbOdtxw/s1600-h/Bildschirmfoto+2010-02-17+um+20.49.49.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="352" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/S3xK6CznY6I/AAAAAAAAAR4/CWEEXbOdtxw/s640/Bildschirmfoto+2010-02-17+um+20.49.49.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links:&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.eclipse.org/gef/zest/"&gt;http://www.eclipse.org/gef/zest/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/tux2323/bundleviewer"&gt;http://github.com/tux2323/bundleviewer&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.eclipse.org/gef/zest/snippets.php"&gt;http://www.eclipse.org/gef/zest/snippets.php&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-3665241151302022500?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/3665241151302022500/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/02/my-first-eclipse-zest-demo-application.html#comment-form' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/3665241151302022500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/3665241151302022500'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/02/my-first-eclipse-zest-demo-application.html' title='My First Eclipse ZEST Demo Application'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_zXKc-SRU8qo/S3xK6CznY6I/AAAAAAAAAR4/CWEEXbOdtxw/s72-c/Bildschirmfoto+2010-02-17+um+20.49.49.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-8707910751826508191</id><published>2010-02-09T23:39:00.020+01:00</published><updated>2011-01-25T09:14:10.108+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='Design by Contract'/><title type='text'>Design by Contract in Spring Roo</title><content type='html'>In Spring Roo they use a simple approach for Design by Contract (ok not real DBC only preconditions), looks nice for me here a code snippet from Spring Roo source code:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;public MailProtocol(String protocolLabel, String protocol) {&lt;br /&gt; &lt;b&gt;Assert.notNull(protocolLabel, "Protocol label required");&lt;br /&gt; Assert.notNull(protocol, "protocol required");&lt;/b&gt;&lt;br /&gt;...&lt;br /&gt;public AbstractInvocableMemberMetadata(String declaredByMetadataId, int modifier, List&lt;annotatedjavatype&gt; parameters, List&lt;javasymbolname&gt; parameterNames, List&lt;annotationmetadata&gt; annotations, String body) {&lt;br /&gt; &lt;b&gt;Assert.hasText(declaredByMetadataId, "Declared by metadata ID required");&lt;/b&gt;&lt;br /&gt;... &lt;br /&gt;&lt;/annotationmetadata&gt;&lt;/javasymbolname&gt;&lt;/annotatedjavatype&gt;&lt;/pre&gt;&lt;br /&gt;I think the Spring Roo way is a good hint for Design by Contract / Preconditions as tests in Java, which is not support native in the Java language. The Java asserts can be disabled the spring roo Asserts throws RuntimeExceptions...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Other Java Framework for Design by Contract:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Oval - &lt;a href="http://oval.sourceforge.net/"&gt;http://oval.sourceforge.net/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Design by Contract Framework for Spring Applications - &lt;a href="http://springcontracts.sourceforge.net/home.html"&gt;http://springcontracts.sourceforge.net/home.html&amp;nbsp;&amp;nbsp;&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Links: &lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Spring Roo Assert API - see Spring Roo GIT&amp;nbsp;&lt;a href="http://git.springsource.org/roo/roo/blobs/master/support/src/main/java/org/springframework/roo/support/util/Assert.java"&gt;http://git.springsource.org/roo/roo/blobs/master/support/src/main/java/org/springframework/roo/support/util/Assert.java&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Spring Roo - &lt;a href="http://www.springsource.org/roo"&gt;http://www.springsource.org/roo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Eiffel and Design by Contract &lt;a href="http://www.eiffel.com/developers/design_by_contract.html"&gt;http://www.eiffel.com/developers/design_by_contract_in_detail.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Languages, which support real Design by Contract: &lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Eiffel - &lt;a href="http://www.eiffel.com/"&gt;http://www.eiffel.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;D&lt;/li&gt;&lt;li&gt;Spec# - &lt;a href="http://research.microsoft.com/specsharp/"&gt;http://research.microsoft.com/specsharp/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-8707910751826508191?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/8707910751826508191/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/02/design-by-contract-in-spring-roo.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/8707910751826508191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/8707910751826508191'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/02/design-by-contract-in-spring-roo.html' title='Design by Contract in Spring Roo'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-4172995311274028610</id><published>2010-01-30T22:13:00.005+01:00</published><updated>2010-01-31T00:51:26.671+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><title type='text'>VisualVM Plugins for Visual GC and OSGi Management</title><content type='html'>VisualVm is a management console based on the netbeans platform. For VisualVM exists a nice plugin called Visual GC for visualization of the Java GC.&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/_zXKc-SRU8qo/S2Sgfq1AAiI/AAAAAAAAARk/qMJvTqeT4SA/s1600-h/Bildschirmfoto+2010-01-30+um+22.02.17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="476" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/S2Sgfq1AAiI/AAAAAAAAARk/qMJvTqeT4SA/s640/Bildschirmfoto+2010-01-30+um+22.02.17.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&amp;nbsp;The Visual GC Plugin for VisualVM&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Also a Plugin for OSGi management exists which provides basic management function for an OSGi container e.g. equinox. To use the plugin a bundle, which exports the management functions, must also installed in the OSGi container.&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/_zXKc-SRU8qo/S2SgpC1-w_I/AAAAAAAAARs/okfNrT6LjZ4/s1600-h/Bildschirmfoto+2010-01-30+um+22.07.25.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="470" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/S2SgpC1-w_I/AAAAAAAAARs/okfNrT6LjZ4/s640/Bildschirmfoto+2010-01-30+um+22.07.25.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;OSGi Managment Plugin for Visual VM&lt;/div&gt;For more info’s about VisualVM and the plugins look on the VisualVM page.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;VisualVM Project Site:&lt;br /&gt;&lt;a href="https://visualvm.dev.java.net/"&gt;https://visualvm.dev.java.net/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;OSGi Managment Plugin Project Site:&lt;br /&gt;&lt;a href="http://wiki.chameleon.ow2.org/xwiki/bin/view/Main/AdminTools"&gt;http://wiki.chameleon.ow2.org/xwiki/bin/view/Main/AdminTools&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Blog about VisualVM and OSGi:&lt;br /&gt;&lt;a href="http://ordinaryjava.blogspot.com/2009/06/visualvm-osgi-plugin.html%20"&gt;http://ordinaryjava.blogspot.com/2009/06/visualvm-osgi-plugin.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Blog about VisualVM and the standard plugins&lt;br /&gt;&lt;a href="http://pietrowski.info/2009/06/visualvm-performance-tuning-tool/"&gt;http://pietrowski.info/2009/06/visualvm-performance-tuning-tool/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-4172995311274028610?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/4172995311274028610/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/01/visualvm-plugins-for-visual-gc-and-osgi.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/4172995311274028610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/4172995311274028610'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/01/visualvm-plugins-for-visual-gc-and-osgi.html' title='VisualVM Plugins for Visual GC and OSGi Management'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zXKc-SRU8qo/S2Sgfq1AAiI/AAAAAAAAARk/qMJvTqeT4SA/s72-c/Bildschirmfoto+2010-01-30+um+22.02.17.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-808633754880072863</id><published>2010-01-30T17:10:00.001+01:00</published><updated>2010-01-31T00:51:44.412+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GWT'/><title type='text'>GWT Events and DeferredCommand - setFocus</title><content type='html'>To run code after all event handler in GWT are invoked the class &lt;a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/DeferredCommand.html"&gt;DeferredCommand&lt;/a&gt; can be used. A example for such a command could be to set a focus for a text field ...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Example code for set a focus:&lt;/b&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;DeferredCommand.addCommand(new Command() {&lt;br /&gt; public void execute() {&lt;br /&gt;           testField.setFocus(true);&lt;br /&gt; }&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.java-stage.de/2009/10/gwt-setfocus-deferred-command/"&gt;German Blog Entry about setFocus and GWT - DeferredCommand&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Command_pattern"&gt;Wiki - Command Pattern&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-808633754880072863?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/808633754880072863/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/01/gwt-events-and-deferredcommand.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/808633754880072863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/808633754880072863'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/01/gwt-events-and-deferredcommand.html' title='GWT Events and DeferredCommand - setFocus'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-1888456146545349425</id><published>2010-01-30T14:04:00.003+01:00</published><updated>2010-02-10T00:33:53.196+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='PDE'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Eclipse Hot Deployment Mode For Spring DM Web Bundle</title><content type='html'>For developing web application in eclipse with spring dynamic modules (spring OSGi) there is no mode in which the web resource like JSP etc. will be refresh automatically in the tomcat container.&lt;br /&gt;&lt;br /&gt;At the moment I must restart a war bundle when a resource changed and the war bundle will be redeployed by spring web bundle. The restart (redeploy) can be done in eclipse automatic when a resource in the eclipse project change with the STS features, see my previous post about STS (Spring Tool Suite). This is nice for Java classes but not for web resources like JSPs, CSS, etc. &lt;br /&gt;&lt;br /&gt;How does the spring web bundle work? The bundle deploys (unzip) the war in a temp directory (can be specifiy by the system property java.io.tmpdir) and then start the deployment method of the container (context) e.g. tomcat in my case.&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/_zXKc-SRU8qo/S2Qq3PuSPTI/AAAAAAAAARU/gT0z20ivsDU/s1600-h/Bildschirmfoto+2010-01-30+um+13.48.56.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="367" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/S2Qq3PuSPTI/AAAAAAAAARU/gT0z20ivsDU/s400/Bildschirmfoto+2010-01-30+um+13.48.56.png" width="400" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Example eclipse development project structure of a webapp for running in a OSGi container with spring web bundle. &lt;/div&gt;&lt;br /&gt;At the development time e.g. in eclipse, normally we have no archive war or jar, we have a eclipse projects, with a war directory structure (see screenshot). So my idea was to patch the TomcatWarDeployer from the Spring Web bundle and put a hot deployment mode into it (Next step could be a own HotTomcatWarDeployer bundle).&amp;nbsp; In the hot deployment mode the war must installed from a directory (not as jar or war archive) in the OSGi container (in my case the eclipse project folder). The TomcatWarDeploy then do not deploy the files in temp folder the deployer runs the webapp in the project folder e.g. in the eclipse project. &lt;br /&gt;&lt;br /&gt;Here is the original spring code (class &lt;i&gt;org.springframework.osgi.web.deployer.tomcat.TomcatWarDeployer&lt;/i&gt; )for the base directory:&lt;br /&gt;&lt;pre class="prettyprint"&gt;private String createDocBase(Bundle bundle, String contextPath) throws IOException {&lt;br /&gt;        File tmpFile = File.createTempFile("tomcat-" + contextPath.substring(1), ".osgi");&lt;br /&gt; tmpFile.delete();&lt;br /&gt; tmpFile.mkdir();&lt;br /&gt;&lt;br /&gt; String path = tmpFile.getCanonicalPath();&lt;br /&gt; if (log.isDebugEnabled())&lt;br /&gt;  log.debug("Unpacking bundle [" + OsgiStringUtils.nullSafeNameAndSymName(bundle) + "] to folder [" + path&lt;br /&gt;    + "]...");&lt;br /&gt;&lt;br /&gt; Utils.unpackBundle(bundle, tmpFile);&lt;br /&gt;&lt;br /&gt; return path;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And here the patched code (method &lt;i&gt;createDocBase&lt;/i&gt; from the class &lt;i&gt;org.springframework.osgi.web.deployer.tomcat.TomcatWarDeployer&lt;/i&gt;) with the hot deployment mode for tomcat:&lt;br /&gt;&lt;pre class="prettyprint"&gt;private String createDocBase(Bundle bundle, String contextPath) throws IOException {&lt;br /&gt; try&lt;br /&gt; {&lt;br /&gt;  String hotdeployMode = System.getProperty(TOMCAT_HOTDEPLOY);&lt;br /&gt;  if(hotdeployMode != null &amp;amp;&amp;amp; hotdeployMode.toLowerCase().equals("true")){&lt;br /&gt;   if (log.isDebugEnabled())&lt;br /&gt;    log.debug("HOT Deployment mode is active. Use this feature only for developing!");&lt;br /&gt;   String workspace = System.getProperty(TOMCAT_WORKSPACE);&lt;br /&gt;   if(workspace != null){&lt;br /&gt;    if (log.isDebugEnabled())&lt;br /&gt;     log.debug("HOT Deployment workspace is set to: " + workspace);&lt;br /&gt;    File workspaceFile = new File(workspace);&lt;br /&gt;    if(workspaceFile.exists()){&lt;br /&gt;     String projectName = bundle.getSymbolicName();&lt;br /&gt;     if (log.isDebugEnabled())&lt;br /&gt;      log.debug("HOT Deployment project name is: " + projectName);&lt;br /&gt;     File projectFile = new File(workspaceFile, projectName);&lt;br /&gt;     if(projectFile.exists() &amp;amp;&amp;amp; projectFile.isDirectory()){&lt;br /&gt;      if (log.isDebugEnabled())&lt;br /&gt;       log.debug("HOT Deployment project path is: " + projectFile.getCanonicalPath());&lt;br /&gt;      return projectFile.getCanonicalPath();&lt;br /&gt;     }else{&lt;br /&gt;      if (log.isDebugEnabled())&lt;br /&gt;       log.debug("HOT Deployment project does not exists!");&lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;    else{&lt;br /&gt;     if (log.isDebugEnabled())&lt;br /&gt;      log.debug("HOT Deployment workspace does not exists!");&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;   else{&lt;br /&gt;    if (log.isDebugEnabled())&lt;br /&gt;     log.debug("HOT Deployment workspace path is not set, please set system property " + TOMCAT_WORKSPACE);&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; } catch(Exception exp) {&lt;br /&gt;  if (log.isDebugEnabled()){&lt;br /&gt;   log.debug("Error initializing HOT Deployment!");&lt;br /&gt;   log.debug(exp);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;  &lt;br /&gt; if (log.isDebugEnabled())&lt;br /&gt;  log.debug("Use the normal spring deploymode with temp directory.");&lt;br /&gt;  &lt;br /&gt; File tmpFile = File.createTempFile("tomcat-" + contextPath.substring(1), ".osgi");&lt;br /&gt; tmpFile.delete();&lt;br /&gt; tmpFile.mkdir();&lt;br /&gt;&lt;br /&gt; String path = tmpFile.getCanonicalPath();&lt;br /&gt; if (log.isDebugEnabled())&lt;br /&gt;  log.debug("Unpacking bundle [" + OsgiStringUtils.nullSafeNameAndSymName(bundle) + "] to folder [" + path&lt;br /&gt;    + "]...");&lt;br /&gt;&lt;br /&gt; Utils.unpackBundle(bundle, tmpFile);&lt;br /&gt;&lt;br /&gt; return path;&lt;br /&gt;}&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;That means you can change our web resources like JSPs etc. and the changes take directly effect. I think that’s the mode how I like to develop webapps no redeployment or file synch.&lt;br /&gt;&lt;br /&gt;To use my patched spring web bundle you must install the patched bundle instead the normal spring web bundle (Version 1.2.1)  in your OSGi container. Also the two system properties “org.springframework.osgi.web.deployer.tomcat.hotdeploy” and “org.springframework.osgi.web.deployer.tomcat.workspace” must be set see the screenshot.&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/_zXKc-SRU8qo/S2QrxRYd42I/AAAAAAAAARc/Dt6M2VatRkM/s1600-h/Bildschirmfoto+2010-01-30+um+13.53.06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="454" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/S2QrxRYd42I/AAAAAAAAARc/Dt6M2VatRkM/s640/Bildschirmfoto+2010-01-30+um+13.53.06.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;So the solution is not very nice with the two system properties but at the moment it works for me. When you have ideas feel free for comments. I have also committed this idea in the spring dynamic modules (spring osgi) project JIRA see ticket &lt;a href="http://jira.springframework.org/browse/OSGI-800"&gt;http://jira.springframework.org/browse/OSGI-800&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here you can get my example patched spring web bundle &lt;a href="http://dl.dropbox.com/u/532968/spring-osgi-web-1.2.1-patched.jar"&gt;http://dl.dropbox.com/u/532968/spring-osgi-web-1.2.1-patched.jar&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Have fun with the patch &lt;br /&gt;&lt;br /&gt;Christian&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-1888456146545349425?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/1888456146545349425/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/01/eclipse-hot-deployment-mode-for-spring.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/1888456146545349425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/1888456146545349425'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/01/eclipse-hot-deployment-mode-for-spring.html' title='Eclipse Hot Deployment Mode For Spring DM Web Bundle'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zXKc-SRU8qo/S2Qq3PuSPTI/AAAAAAAAARU/gT0z20ivsDU/s72-c/Bildschirmfoto+2010-01-30+um+13.48.56.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-4127055147753656984</id><published>2010-01-26T22:04:00.002+01:00</published><updated>2010-01-31T00:52:32.193+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><title type='text'>Workshop – Building OSGi based applications - Darmstadt 15.04.2010</title><content type='html'>Jochen Hiller and I are organizing for the &lt;b&gt;OSGi User Forum Germany &lt;/b&gt;a workshop with the title “&lt;b&gt;Building OSGi based applications&lt;/b&gt;”.&amp;nbsp; The workshop location is Darmstadt and the date is &lt;b&gt;15.04.2010&lt;/b&gt;. You can now submit talks by sending a short abstract as email at workshop-germany@osgiusers.org, deadline for submit a talk is &lt;b&gt;01.03.2010&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;More Information about the workshop see the workshop website: (German)&lt;br /&gt;&lt;a href="http://germany.osgiusers.org/Main/WorkshopBuildingOSGiApplication"&gt;http://germany.osgiusers.org/Main/WorkshopBuildingOSGiApplication&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For the workshop we provide an OSGi sample application, which is provided on GitHub: &lt;a href="http://github.com/tux2323/osgi-kasse-example/"&gt;http://github.com/tux2323/osgi-kasse-example/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The follow YouTube Video (German) shows how-to import and run the sample application in eclipse.&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/QePBlk925uw&amp;hl=de_DE&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/QePBlk925uw&amp;hl=de_DE&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;So we will be happy to see you at the workshop in Darmstadt... &lt;br /&gt;&lt;br /&gt;Christian&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-4127055147753656984?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/4127055147753656984/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/01/workshop-building-osgi-based.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/4127055147753656984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/4127055147753656984'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/01/workshop-building-osgi-based.html' title='Workshop – Building OSGi based applications - Darmstadt 15.04.2010'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-2236337851607486135</id><published>2010-01-19T21:04:00.002+01:00</published><updated>2010-02-10T00:33:19.177+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='STS'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Eclipse Tipp - SpringSource Tool Suite  - Auto Restart an OSGi Bundle in Eclipse</title><content type='html'>SpringSource Tool Suite &lt;span style="font-size: xx-small;"&gt;TM&lt;/span&gt; (STS) is a free (not open source) set of developing tools for spring based applications, it is eclipse based (an eclipse distribution, but can also installed as plugins in your eclipse instance).&lt;br /&gt;&lt;br /&gt;The Spring Tool Suite comes with a very cool feature for developing OSGi based applications, the STS adds a listener to your eclipse project resource and when something changed (saved) the effected bundle will be automatic restarted. This is very cool for developing OSGi based application. To activate the feature you must enable the „Spring Dynamic Modules OSGi Bundle Updater“ see the screenshot.&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/_zXKc-SRU8qo/S1YQH82LvgI/AAAAAAAAAQM/fsrQOvc1EtE/s1600-h/Bild+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/S1YQH82LvgI/AAAAAAAAAQM/fsrQOvc1EtE/s640/Bild+1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The Option can be found under the project setting of your bundle. After activating the Bundle Updater in the project setting, add the follow argument “-console ${osgi.console.port}” to the command line arguments of your launch configuration.&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/_zXKc-SRU8qo/S1YQNErK6nI/AAAAAAAAAQU/kSqphQlW6T4/s1600-h/Bild+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/S1YQNErK6nI/AAAAAAAAAQU/kSqphQlW6T4/s640/Bild+2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Links:&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.springsource.com/products/sts"&gt;http://www.springsource.com/products/sts&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-2236337851607486135?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/2236337851607486135/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/01/eclipse-tipp-springsource-tool-suite.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2236337851607486135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2236337851607486135'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/01/eclipse-tipp-springsource-tool-suite.html' title='Eclipse Tipp - SpringSource Tool Suite  - Auto Restart an OSGi Bundle in Eclipse'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zXKc-SRU8qo/S1YQH82LvgI/AAAAAAAAAQM/fsrQOvc1EtE/s72-c/Bild+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-4558550744510869220</id><published>2010-01-16T22:12:00.007+01:00</published><updated>2010-01-31T00:57:11.609+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><category scheme='http://www.blogger.com/atom/ns#' term='Bamboo'/><title type='text'>Painting by Hand with Bamboo</title><content type='html'>I played around with BAMBOO, I tryed to draw a class diagram by hand. The idea to have a alternative to a Flip Chart in a meeting or workshop. But I think drawing on paper is much faster :-( ...&lt;br /&gt;&lt;br /&gt;Here my first drawing with ArtRage (Demo Version) and Bamboo:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_zXKc-SRU8qo/S1IrcX2fskI/AAAAAAAAAQE/8sKAkDiF4Nk/s1600-h/DomainModelKasse.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/S1IrcX2fskI/AAAAAAAAAQE/8sKAkDiF4Nk/s640/DomainModelKasse.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Do not Paint Work with Textual DSL instead&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A better option can be to use a DSL instead of hand drawing stuff, e.g. in a brainstorming meeting. Here a example DSL for the picture bellow made with yUML:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;[Seller]+1-0..*[Position]&lt;br /&gt;[Sale]+-&amp;gt;1..*[Position]&lt;br /&gt;[Position]-&amp;gt;1[PositionKey]&lt;br /&gt;&lt;br /&gt;[Seller Repository]-&amp;gt;[Seller]&lt;br /&gt;[Position Repository]-&amp;gt;[Position]&lt;br /&gt;[Sale Service]-&amp;gt;[Sale]&lt;br /&gt;&lt;br /&gt;[Basar Kasse Service]-&amp;gt;[Seller Repository]&lt;br /&gt;[Basar Kasse Service]-&amp;gt;[Position Repository]&lt;br /&gt;[Basar Kasse Service]-&amp;gt;[Sale Service]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And here the diagramm made by yUML from the DSL:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://yuml.me/diagram/scruffy/class/%5BSeller%5D+1-0..*%5BPosition%5D,%20%5BSale%5D+-%3E1..*%5BPosition%5D,%20%5BPosition%5D-%3E1%5BPositionKey%5D,%20%5BSeller%20Repository%5D-%3E%5BSeller%5D,%20%5BPosition%20Repository%5D-%3E%5BPosition%5D,%20%5BSale%20Service%5D-%3E%5BSale%5D,%20%5BBasar%20Kasse%20Service%5D-%3E%5BSeller%20Repository%5D,%20%5BBasar%20Kasse%20Service%5D-%3E%5BPosition%20Repository%5D,%20%5BBasar%20Kasse%20Service%5D-%3E%5BSale%20Service%5D." imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://yuml.me/diagram/scruffy/class/%5BSeller%5D+1-0..*%5BPosition%5D,%20%5BSale%5D+-%3E1..*%5BPosition%5D,%20%5BPosition%5D-%3E1%5BPositionKey%5D,%20%5BSeller%20Repository%5D-%3E%5BSeller%5D,%20%5BPosition%20Repository%5D-%3E%5BPosition%5D,%20%5BSale%20Service%5D-%3E%5BSale%5D,%20%5BBasar%20Kasse%20Service%5D-%3E%5BSeller%20Repository%5D,%20%5BBasar%20Kasse%20Service%5D-%3E%5BPosition%20Repository%5D,%20%5BBasar%20Kasse%20Service%5D-%3E%5BSale%20Service%5D." width="332" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;But I will work on my drawing skills, with BAMBOO, so maybe it will be come a alternative for me to get things fast on a screen ... &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links:&lt;/b&gt;&lt;br /&gt;- &lt;a href="http://yuml.me/"&gt;yUML - http://yuml.me&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://www.artrage.com/"&gt;ArtRage - http://www.artrage.com/&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://www.wacom.eu/index2.asp?pid=294&amp;amp;lang=de&amp;amp;gm=3"&gt;BAMBOO - http://www.wacom.eu/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-4558550744510869220?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/4558550744510869220/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/01/painting-by-hand-with-bamboo.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/4558550744510869220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/4558550744510869220'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/01/painting-by-hand-with-bamboo.html' title='Painting by Hand with Bamboo'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zXKc-SRU8qo/S1IrcX2fskI/AAAAAAAAAQE/8sKAkDiF4Nk/s72-c/DomainModelKasse.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-2340607848474114369</id><published>2010-01-05T21:55:00.010+01:00</published><updated>2010-01-31T00:54:11.190+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDE'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Visualization'/><title type='text'>Eclipse - PDE Incubator Dependency Visualization Plugin</title><content type='html'>The PDE „Dependency Visualization“ plugin for eclipse is a very cool plugin to get a overview of the dependencies of a OSGi application.&amp;nbsp; I think the plugin give a much clearer overview of the direct and indirect dependencies of an OSGi bundle then the old tree based PDE plugin does. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Example: Old PDE Dependency Plugin Tree Based:&lt;/b&gt;&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/_zXKc-SRU8qo/S0OnwoTaduI/AAAAAAAAAPY/y7hH54iA9b4/s1600-h/Bild+3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/S0OnwoTaduI/AAAAAAAAAPY/y7hH54iA9b4/s640/Bild+3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Example: New PDE Dependency Visualization Plugin - Dependencies as Visualization:&lt;/b&gt;&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/_zXKc-SRU8qo/S0On5u4cJII/AAAAAAAAAPg/gBhBOMs-aeg/s1600-h/Bild+5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/S0On5u4cJII/AAAAAAAAAPg/gBhBOMs-aeg/s640/Bild+5.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here the &lt;a href="http://www.eclipse.org/pde/incubator/dependency-visualization/index.php"&gt;project website&lt;/a&gt; of the PDE Incubator Dependency Visualization plugin.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-2340607848474114369?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/2340607848474114369/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/01/eclipse-pde-dependency-visualization.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2340607848474114369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2340607848474114369'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/01/eclipse-pde-dependency-visualization.html' title='Eclipse - PDE Incubator Dependency Visualization Plugin'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_zXKc-SRU8qo/S0OnwoTaduI/AAAAAAAAAPY/y7hH54iA9b4/s72-c/Bild+3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-6852526112293987900</id><published>2010-01-05T09:27:00.001+01:00</published><updated>2010-01-31T00:53:57.388+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Visualization'/><title type='text'>Eclipse - 3D Software Visualization</title><content type='html'>Codstruction is a 3D software visualization tool more information on the project &lt;a href="http://codstruction.wordpress.com/"&gt;website&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Screenshot - Eclipse Equinox DS Implementation:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_zXKc-SRU8qo/S0L3ybVEbGI/AAAAAAAAAPA/ghqEoo_v8Ww/s1600-h/Bild+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/S0L3ybVEbGI/AAAAAAAAAPA/ghqEoo_v8Ww/s640/Bild+1.png" /&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/1013943301267331946-6852526112293987900?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/6852526112293987900/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/01/eclipse-3d-software-visualization.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/6852526112293987900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/6852526112293987900'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/01/eclipse-3d-software-visualization.html' title='Eclipse - 3D Software Visualization'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_zXKc-SRU8qo/S0L3ybVEbGI/AAAAAAAAAPA/ghqEoo_v8Ww/s72-c/Bild+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-3704859281315227974</id><published>2010-01-04T09:37:00.001+01:00</published><updated>2010-01-31T00:54:43.252+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='XRay'/><title type='text'>Eclipse - Software Visualization</title><content type='html'>&lt;a href="http://xray.inf.usi.ch/"&gt;XRay&lt;/a&gt; is a nice eclipse plugin which does software visualization. It is not free for commerical use see the XRay page for more details.&lt;br /&gt;&lt;br /&gt;Example: Package Dependency of eclipse equinox ds implementation&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_zXKc-SRU8qo/S0GojUUMoOI/AAAAAAAAAOw/_Rm81U0D3TI/s1600-h/Bild+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/S0GojUUMoOI/AAAAAAAAAOw/_Rm81U0D3TI/s320/Bild+1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Example: Class Dependency of eclipse equinox ds implementation&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_zXKc-SRU8qo/S0GopoOLGzI/AAAAAAAAAO4/DJUa52ZgQ4Y/s1600-h/Bild+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/S0GopoOLGzI/AAAAAAAAAO4/DJUa52ZgQ4Y/s640/Bild+2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;For more information about software visualization in general have a look at the SE-Radio episode 130: &lt;a href="http://www.se-radio.net/podcast/2009-03/episode-130-code-visualization-michele-lanza"&gt;Code Visualization with Michele Lanza&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-3704859281315227974?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/3704859281315227974/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/01/eclipse-software-visualization.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/3704859281315227974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/3704859281315227974'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/01/eclipse-software-visualization.html' title='Eclipse - Software Visualization'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zXKc-SRU8qo/S0GojUUMoOI/AAAAAAAAAOw/_Rm81U0D3TI/s72-c/Bild+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-6816368152068022709</id><published>2010-01-02T12:41:00.003+01:00</published><updated>2010-01-31T00:59:45.493+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='JMock'/><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><title type='text'>Example - JMockContext - JUnit 4.7 Rule Support</title><content type='html'>JMock now contains in the SVN trunk (http://svn.codehaus.org/jmock/trunk/jmock2) a class &lt;a href="http://svn.codehaus.org/jmock/trunk/jmock2/src/org/jmock/integration/junit4/JMockContext.java"&gt;&lt;b&gt;&lt;i&gt;org.jmock.integration.junit4.JMockContext&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;, the class is a JUnit 4.7 rule. With this new JUnit rule for JMock no JUnit runner is needed to use JMock in JUnit tests.&lt;br /&gt;&lt;br /&gt;Here a small example test which use the new JMockContext rule:&lt;br /&gt;&lt;pre class="prettyprint"&gt;import java.util.Observer;&lt;br /&gt;&lt;br /&gt;import org.jmock.Expectations;&lt;br /&gt;import org.jmock.auto.Mock;&lt;br /&gt;import org.jmock.integration.junit4.JMockContext;&lt;br /&gt;import org.junit.Rule;&lt;br /&gt;import org.junit.Test;&lt;br /&gt;&lt;br /&gt;// JUH @RunWith is not needed &lt;br /&gt;public class ExampleJMockContextTest {&lt;br /&gt;    &lt;br /&gt;    @Rule public JMockContext context = new JMockContext();&lt;br /&gt;    &lt;br /&gt;    @Mock Observer mockObserver;&lt;br /&gt;    &lt;br /&gt;    @Test public void expectNoException(){&lt;br /&gt;        context.checking(new Expectations(){{&lt;br /&gt;            oneOf(mockObserver).update(null, null);&lt;br /&gt;        }});&lt;br /&gt;        &lt;br /&gt;        mockObserver.update(null, null);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    @Test(expected=RuntimeException.class)  &lt;br /&gt;    public void expectExceptionInSUT() throws Exception {&lt;br /&gt;        &lt;br /&gt;        context.checking(new Expectations(){{&lt;br /&gt;            oneOf(mockObserver).update(null, null);&lt;br /&gt;        }});&lt;br /&gt;        &lt;br /&gt;        mockObserver.update(null, null);&lt;br /&gt;        &lt;br /&gt;        throw new RuntimeException("Exception in SUT");&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    @Test(expected=RuntimeException.class) &lt;br /&gt;    public void expectExceptionInMockObjectTest(){&lt;br /&gt;        &lt;br /&gt;        context.checking(new Expectations(){{&lt;br /&gt;            oneOf(mockObserver).update(null, null);&lt;br /&gt;            will(throwException(new RuntimeException("Observer unavailable")));&lt;br /&gt;        }});&lt;br /&gt;        &lt;br /&gt;        mockObserver.update(null, null);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-6816368152068022709?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/6816368152068022709/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2010/01/jmockcontext-junit-47-rule-support.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/6816368152068022709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/6816368152068022709'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2010/01/jmockcontext-junit-47-rule-support.html' title='Example - JMockContext - JUnit 4.7 Rule Support'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-3973832702619916491</id><published>2009-12-23T21:06:00.001+01:00</published><updated>2009-12-23T21:10:08.351+01:00</updated><title type='text'>Manifesto for Software Craftsmanship</title><content type='html'>&lt;a href="http://manifesto.softwarecraftsmanship.org/"&gt;http://manifesto.softwarecraftsmanship.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And here a very nice SE Radio episode about software craftsmanship with Bob Martin.  &lt;a href="http://www.se-radio.net/podcast/2009-11/episode-150-software-craftsmanship-bob-martin"&gt;http://www.se-radio.net/podcast/2009-11/episode-150-software-craftsmanship-bob-martin&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-3973832702619916491?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/3973832702619916491/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2009/12/manifesto-for-software-craftsmanship.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/3973832702619916491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/3973832702619916491'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2009/12/manifesto-for-software-craftsmanship.html' title='Manifesto for Software Craftsmanship'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-2224104087682908566</id><published>2009-12-02T22:40:00.006+01:00</published><updated>2010-01-31T01:00:02.026+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><title type='text'>JUnit 4.8 is released</title><content type='html'>JUnit News &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.junit.org/node/581"&gt;http://www.junit.org/node/581&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and here a the release notes &lt;br /&gt;&lt;br /&gt;&lt;a href="http://kentbeck.github.com/junit/doc/ReleaseNotes4.8.html"&gt;http://kentbeck.github.com/junit/doc/ReleaseNotes4.8.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-2224104087682908566?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/2224104087682908566/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2009/12/junit-48-is-released.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2224104087682908566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2224104087682908566'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2009/12/junit-48-is-released.html' title='JUnit 4.8 is released'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-7060510069766141847</id><published>2009-12-02T22:23:00.002+01:00</published><updated>2010-01-31T01:00:29.214+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><title type='text'>Example JUnit Test With Test Steps</title><content type='html'>Some times in a tests we want to have separate test steps that means to ensure the run of more then one statement e.g. assert statements.&lt;br /&gt;&lt;br /&gt;Here a simple JUnit test, this tests show how such tests steps can look in a JUnit 4.X tests:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;public class StackTest {&lt;br /&gt;&lt;br /&gt; Stack&lt;string&gt; stack;&lt;br /&gt;&lt;br /&gt; @Before public void createStack() {&lt;br /&gt;  stack = new Stack&lt;string&gt;();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Test public void push() {&lt;br /&gt;  new Steps() {&lt;br /&gt;   &lt;br /&gt;   @Step public void setupPushElementsInStack() {&lt;br /&gt;    stack.push("Element One");&lt;br /&gt;    stack.push("Element Three");&lt;br /&gt;    stack.push("Element X");&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   @Step public void verifyStackSizeIsThree() {&lt;br /&gt;    assertEquals(2, stack.size());&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   @Step public void verifyStackElementOne() {&lt;br /&gt;    assertElementIs(0, "Element One");&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   @Step public void verifyStackElementTwo() {&lt;br /&gt;    assertElementIs(1, "XY");&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;  };&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private void assertElementIs(int position, String expected) {&lt;br /&gt;  String element = stack.get(position);&lt;br /&gt;  assertEquals(expected, element);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/string&gt;&lt;/string&gt;&lt;/pre&gt;&lt;br /&gt;And here the test result:&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/_zXKc-SRU8qo/Sxbac0R8e7I/AAAAAAAAAOE/0WIA7ulQFmA/s1600-h/Bild+3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/Sxbac0R8e7I/AAAAAAAAAOE/0WIA7ulQFmA/s640/Bild+3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;And here the code of the Steps class:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;public class Steps {&lt;br /&gt;&lt;br /&gt; private List&lt;testfailure&gt; testStepFailures = new ArrayList&lt;testfailure&gt;();&lt;br /&gt; &lt;br /&gt; {&lt;br /&gt;  run();&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public final void run() {&lt;br /&gt;  Method[] methods = getClass().getMethods();&lt;br /&gt;  for (Method method : methods) {&lt;br /&gt;   try &lt;br /&gt;   {&lt;br /&gt;    Step step = method.getAnnotation(Step.class);&lt;br /&gt;    if(step != null){&lt;br /&gt;     method.invoke(this);&lt;br /&gt;    }&lt;br /&gt;   } &lt;br /&gt;   catch (Exception e) &lt;br /&gt;   {&lt;br /&gt;    TestFailure failure = new TestFailure();&lt;br /&gt;    failure.method = method;&lt;br /&gt;    failure.exception = e;&lt;br /&gt;    testStepFailures.add(failure);&lt;br /&gt;   } &lt;br /&gt;  }&lt;br /&gt;  if(testStepFailures.size() &amp;gt; 0){&lt;br /&gt;   throw new TestStepsFailureException(testStepFailures);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/testfailure&gt;&lt;/testfailure&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-7060510069766141847?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/7060510069766141847/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2009/12/example-junit-test-with-test-steps.html#comment-form' title='3 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7060510069766141847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7060510069766141847'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2009/12/example-junit-test-with-test-steps.html' title='Example JUnit Test With Test Steps'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sxbac0R8e7I/AAAAAAAAAOE/0WIA7ulQFmA/s72-c/Bild+3.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-3872898639833306255</id><published>2009-11-30T23:22:00.002+01:00</published><updated>2010-02-10T00:31:57.361+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='STS'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Eclipse Tipp - Disable STS Dashboard On Startup</title><content type='html'>Juh - I found the checkbox to disable the STS (SpringSource Tool Suite) in the Eclipse IDE:&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/_zXKc-SRU8qo/SxRFp5J7PiI/AAAAAAAAAN8/BC0yU0dbFk8/s1600/Bild+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/SxRFp5J7PiI/AAAAAAAAAN8/BC0yU0dbFk8/s640/Bild+2.png" /&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/1013943301267331946-3872898639833306255?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/3872898639833306255/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2009/11/eclipse-tipp-disable-sts-dashboard-on.html#comment-form' title='3 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/3872898639833306255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/3872898639833306255'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2009/11/eclipse-tipp-disable-sts-dashboard-on.html' title='Eclipse Tipp - Disable STS Dashboard On Startup'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zXKc-SRU8qo/SxRFp5J7PiI/AAAAAAAAAN8/BC0yU0dbFk8/s72-c/Bild+2.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-1053681391878216640</id><published>2009-11-29T21:55:00.001+01:00</published><updated>2010-01-31T00:56:38.217+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EMF'/><title type='text'>Create a EMF Model Instance with JAVA internal DSL</title><content type='html'>Sometimes a Java internal DSL is engough for creating a model instance (ok Eclipse xText is a cool tool :-)) a good example for Java DSL is the JMock DSL for creating mock objects. Here in my Blog I will show a small example for a Java internal DSL to get a EMF model instance. Here is the EMF ECore model (meta model) for my running example:&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/_zXKc-SRU8qo/SxLdj20LHPI/AAAAAAAAAN0/YKvmhLCEqAE/s1600/Bild+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_zXKc-SRU8qo/SxLdj20LHPI/AAAAAAAAAN0/YKvmhLCEqAE/s640/Bild+1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;A small example model to describe components of an application and which services this components provides, only example stuff not a good model anyway.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Here a model instance with plain EMF Java code:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;ComponentFactory factory = ComponentFactory.eINSTANCE;&lt;br /&gt;   &lt;br /&gt;Interface orderServiceInterface = factory.createInterface();&lt;br /&gt;orderServiceInterface.setName("dsl.OrderService");&lt;br /&gt;&lt;br /&gt;Port orderServicePort = factory.createPort();&lt;br /&gt;orderServicePort.setProvides(orderServiceInterface);&lt;br /&gt;  &lt;br /&gt;Component order = factory.createComponent();&lt;br /&gt;order.setName("order");&lt;br /&gt;order.getPorts().add(orderServicePort);&lt;br /&gt;  &lt;br /&gt;Interface loggerServiceInterface = factory.createInterface();&lt;br /&gt;loggerServiceInterface.setName("dsl.LoggerService");&lt;br /&gt; &lt;br /&gt;Port loggerServicePort = factory.createPort();&lt;br /&gt;loggerServicePort.setProvides(loggerServiceInterface);&lt;br /&gt;  &lt;br /&gt;Component logger = factory.createComponent();&lt;br /&gt;logger.setName("logger");&lt;br /&gt;logger.getPorts().add(loggerServicePort);&lt;br /&gt; &lt;br /&gt;Application shop = factory.createApplication();&lt;br /&gt;shop.setName("shop");&lt;br /&gt;shop.getComponents().add(order);&lt;br /&gt;shop.getComponents().add(logger);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;And here the same model instance created with a Java internal DSL (Gof Builder Pattern):&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;Application shop = ApplicationBuilder.create("shop", new Components() {{&lt;br /&gt;&lt;br /&gt; component("order", new Ports() {{&lt;br /&gt;&lt;br /&gt;  provides( OrderService.class );&lt;br /&gt;&lt;br /&gt; }});&lt;br /&gt; &lt;br /&gt; component("logger", new Ports() {{&lt;br /&gt;  &lt;br /&gt;  provides( LoggerService.class );&lt;br /&gt;  &lt;br /&gt; }});&lt;br /&gt;&lt;br /&gt;}});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/modeling/emf/"&gt;Eclipse EMF &lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jmock.org/"&gt;JMock&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/Xtext/"&gt;xText&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Builder_pattern"&gt;Builder Pattern&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;In one of my next posts I will show the results of a Eclipse xText generated text DSL for the example model.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-1053681391878216640?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/1053681391878216640/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2009/11/emf-model-instance-with-java-dsl.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/1053681391878216640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/1053681391878216640'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2009/11/emf-model-instance-with-java-dsl.html' title='Create a EMF Model Instance with JAVA internal DSL'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zXKc-SRU8qo/SxLdj20LHPI/AAAAAAAAAN0/YKvmhLCEqAE/s72-c/Bild+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-5246991341655824486</id><published>2009-11-24T23:19:00.001+01:00</published><updated>2010-01-31T00:57:44.367+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><title type='text'>yUML - cool UML tool</title><content type='html'>yUML is a web based small UML tool and it makes a lot of fun to create diagrams with it, here my first use case example diagram made with yUML&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/_zXKc-SRU8qo/Swxb3vEAAOI/AAAAAAAAANs/_g9a2QTYPBA/s1600/3196a19d.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_zXKc-SRU8qo/Swxb3vEAAOI/AAAAAAAAANs/_g9a2QTYPBA/s640/3196a19d.png" /&gt;&lt;/a&gt;&lt;/div&gt;No real use cases only a diagram for test yUML...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Links:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="http://yuml.me/"&gt;yUML Website&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://yuml.me/diagram/scruffy/class/samples"&gt;Example Diagrams &lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-5246991341655824486?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/5246991341655824486/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2009/11/yuml-cool-uml-tool.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/5246991341655824486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/5246991341655824486'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2009/11/yuml-cool-uml-tool.html' title='yUML - cool UML tool'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zXKc-SRU8qo/Swxb3vEAAOI/AAAAAAAAANs/_g9a2QTYPBA/s72-c/3196a19d.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-4945541727590717627</id><published>2009-11-22T20:05:00.002+01:00</published><updated>2010-01-31T01:00:53.714+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='JMock'/><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><title type='text'>JUnit Rule for jMock instead of the JMock Runner</title><content type='html'>In JUnit 4.7 there is new feature called "Rules" see my previous posts...&lt;br /&gt;&lt;br /&gt;The jMock framework comes with a JUnit 4.X runner for verifying the mock object &amp;nbsp;states after each test run. Now with rules all the stuff of the runner can be done in one rule. I have implemented an example rule based on the JMock runner (see also jMock JIRA&amp;nbsp;&lt;a href="http://jira.codehaus.org/browse/JMOCK-237"&gt;http://jira.codehaus.org/browse/JMOCK-237&lt;/a&gt;), here is the code of my example implementation:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="prettyprint"&gt;import org.jmock.Mockery;&lt;br /&gt;import org.jmock.lib.AssertionErrorTranslator;&lt;br /&gt;import org.junit.Test;&lt;br /&gt;import org.junit.rules.MethodRule;&lt;br /&gt;import org.junit.runners.model.FrameworkMethod;&lt;br /&gt;import org.junit.runners.model.Statement;&lt;br /&gt;&lt;br /&gt;public class JUnitRuleMockery extends Mockery implements MethodRule {&lt;br /&gt;&lt;br /&gt; public JUnitRuleMockery() {&lt;br /&gt;    setExpectationErrorTranslator(AssertionErrorTranslator.INSTANCE);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public Statement apply(final Statement base, final FrameworkMethod method,&lt;br /&gt;   Object target) {&lt;br /&gt;  return new Statement() {&lt;br /&gt;   @Override&lt;br /&gt;   public void evaluate() throws Throwable {&lt;br /&gt;    try {&lt;br /&gt;     base.evaluate();&lt;br /&gt;    } catch(Throwable exp) {&lt;br /&gt;     if(!isExceptionExpectedByTestMethod(exp, method)) {&lt;br /&gt;      throw exp;&lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;    assertIsSatisfied();&lt;br /&gt;   }&lt;br /&gt;  };&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; protected boolean isExceptionExpectedByTestMethod(Throwable exp, FrameworkMethod method) {&lt;br /&gt;  Test test = method.getAnnotation(Test.class);&lt;br /&gt;  return test.expected().equals(exp.getClass());&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Example Test which use the rule:&lt;/b&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;import org.eclipse.osgi.framework.console.CommandInterpreter;&lt;br /&gt;import org.jmock.Expectations;&lt;br /&gt;import org.jmock.Mockery;&lt;br /&gt;import org.jmock.integration.junit4.JUnit4Mockery;&lt;br /&gt;import org.jmock.lib.legacy.ClassImposteriser;&lt;br /&gt;import org.junit.Before;&lt;br /&gt;import org.junit.Rule;&lt;br /&gt;import org.junit.Test;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre class="prettyprint"&gt;// No jMock specific Runner needed only the default JUnit runner&lt;br /&gt;public class FrameworkCommandProviderTest {&amp;nbsp;&lt;/pre&gt;&lt;pre class="prettyprint"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="prettyprint"&gt;@Rule&lt;br /&gt;    public JUnitRuleMockery context = new JUnitRuleMockery() {{&lt;br /&gt;       setImposteriser(ClassImposteriser.INSTANCE);&lt;br /&gt;    }};&lt;br /&gt;  &lt;br /&gt; InternalSystemBundle mockInternalSystemBundle;&lt;br /&gt; &lt;br /&gt; Framework mockFramework;&lt;br /&gt; &lt;br /&gt; CommandInterpreter mockCommandInterpreter;&lt;br /&gt; &lt;br /&gt; FrameworkCommandProvider mockFrameworkCommandProvider;&lt;br /&gt; &lt;br /&gt; FrameworkCommandProvider frameworkCommandProvider;&lt;br /&gt; &lt;br /&gt; @Before &lt;br /&gt; public void setUp(){&lt;br /&gt;  &lt;br /&gt;  // Create mock object for system bundle&lt;br /&gt;  mockInternalSystemBundle = context.mock(InternalSystemBundle.class);&lt;br /&gt;  // Mocking the getContext Method, returns always null&lt;br /&gt;  context.checking(new Expectations() {{&lt;br /&gt;   allowing (mockInternalSystemBundle).getContext(); will(returnValue(null));&lt;br /&gt;  }});&lt;br /&gt;  &lt;br /&gt;  // Create mock object for framework&lt;br /&gt;  mockFramework = context.mock(Framework.class);&lt;br /&gt;  // Set the mock object system bundle into the framework mock&lt;br /&gt;  mockFramework.systemBundle = mockInternalSystemBundle;&lt;br /&gt;  &lt;br /&gt;  // Create mock object for command interpreter&lt;br /&gt;  mockCommandInterpreter = context.mock(CommandInterpreter.class);&lt;br /&gt;  &lt;br /&gt;  // Create mock object for the SUT class, this mock will be used to mock methods in the SUT&lt;br /&gt;  mockFrameworkCommandProvider = context.mock(FrameworkCommandProvider.class);&lt;br /&gt;  &lt;br /&gt;  // Create the SUT object of type FrameworkCommandProvider&lt;br /&gt;  frameworkCommandProvider = new FrameworkCommandProvider(mockFramework) {&lt;br /&gt;   &lt;br /&gt;   /** &lt;br /&gt;    * Mock the SUT Method getBundleFromToken(...)&lt;br /&gt;    * All method calls will delegate to a mock &lt;br /&gt;    * of the same type then the SUT object &lt;br /&gt;    */&lt;br /&gt;   @Override&lt;br /&gt;   protected AbstractBundle getBundleFromToken(CommandInterpreter intp, String token, boolean error) {&lt;br /&gt;    // delegate the call to a mock object.&lt;br /&gt;    return mockFrameworkCommandProvider.getBundleFromToken(intp, token, error);&lt;br /&gt;   }&lt;br /&gt;  };&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; @Test(expected=RuntimeException.class) &lt;br /&gt; public void _bundle_OneArgumentsAndBundleNotFoundByToken() throws Exception { &lt;br /&gt;  final String firstToken = "myBundleName[1.0.0]";&lt;br /&gt;  // Setup mock context&lt;br /&gt;  context.checking(new Expectations() {{&lt;br /&gt;   // one argument&lt;br /&gt;   one (mockCommandInterpreter).nextArgument(); will(returnValue(firstToken));&lt;br /&gt;   // next calles return null&lt;br /&gt;   allowing (mockCommandInterpreter).nextArgument(); will(returnValue(null));&lt;br /&gt;   &lt;br /&gt;   // getBundleFromToken returns null&lt;br /&gt;   one (mockFrameworkCommandProvider).getBundleFromToken(mockCommandInterpreter, firstToken, true);&lt;br /&gt;   will(returnValue(null));&lt;br /&gt;   &lt;br /&gt;  }});&lt;br /&gt;  &lt;br /&gt;  // invoke the _bundle() method&lt;br /&gt;  frameworkCommandProvider._bundle(mockCommandInterpreter);&lt;br /&gt;  &lt;br /&gt;  throw new RuntimeException();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-4945541727590717627?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/4945541727590717627/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2009/11/junit-rule-for-jmock-instead-of-jmock.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/4945541727590717627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/4945541727590717627'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2009/11/junit-rule-for-jmock-instead-of-jmock.html' title='JUnit Rule for jMock instead of the JMock Runner'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-4036690864494499352</id><published>2009-11-22T16:58:00.001+01:00</published><updated>2010-01-31T00:58:35.315+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xUnit'/><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><title type='text'>xUnit test implementation pattern for mocking methods in a SUT object</title><content type='html'>Simple test implementation pattern for mock a method in the SUT object. The pattern is interesting when&amp;nbsp; you would refactor a method in legacy system. Before you can start with the refactoring stuff you must write a test for the method with a high coverage (Refactoring details see Martin Fowlers great book "Refactoring - Improving the Design of Existing Code"). &lt;br /&gt;&lt;br /&gt;The idea is to test only the legacy method you would like to refactor (to get quick a high coverage),&amp;nbsp; there for we want mock all method calls which will be invoked from this method. Normal mocking frameworks like EasyMock or JMock for Java can create mock objects for interfaces and classes. This pattern shows how this tools can be used for mock an internal method in the SUT object.&lt;br /&gt;&lt;br /&gt;The idea, overwrite all method which should be mocked in the SUT object and delegate the calls to a mock object of the same type as the SUT object.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Example setup code with JMock as mocking framework: &lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: monospace; white-space: pre;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;@Before &lt;br /&gt;public void setUp(){&lt;br /&gt;   ...&lt;br /&gt;   // Create mock object for the SUT class, this mock will be used to mock methods in the SUT&lt;br /&gt;   mockFrameworkCommandProvider = context.mock(FrameworkCommandProvider.class);&lt;br /&gt;  &lt;br /&gt;   // Create the SUT object of type FrameworkCommandProvider&lt;br /&gt;   frameworkCommandProvider = new FrameworkCommandProvider(mockFramework) {&lt;br /&gt;   &lt;br /&gt;    /** &lt;br /&gt;     * Mock the SUT Method getBundleFromToken(...)&lt;br /&gt;     * All method calls will delegate to a mock &lt;br /&gt;     * of the same type then the SUT object &lt;br /&gt;     */&lt;br /&gt;     @Override&lt;br /&gt;     protected AbstractBundle getBundleFromToken(CommandInterpreter intp, String token, boolean error) {&lt;br /&gt;         // delegate the call to a mock object.&lt;br /&gt;         return mockFrameworkCommandProvider.getBundleFromToken(intp, token, error);&lt;br /&gt;     }&lt;br /&gt;   };&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;The code with a example test which expected a mock method call: &lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: monospace; white-space: pre;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;@Test &lt;br /&gt;public void _bundle_OneArgumentsAndBundleNotFoundByToken() throws Exception { &lt;br /&gt; final String firstToken = "myBundleName[1.0.0]";&lt;br /&gt; // Setup mock context&lt;br /&gt; context.checking(new Expectations() {{&lt;br /&gt;  // one argument&lt;br /&gt;  one (mockCommandInterpreter).nextArgument(); will(returnValue(firstToken));&lt;br /&gt;  // next calles return null&lt;br /&gt;  allowing (mockCommandInterpreter).nextArgument(); will(returnValue(null));&lt;br /&gt;   &lt;br /&gt;  // getBundleFromToken returns null&lt;br /&gt;  one (mockFrameworkCommandProvider).getBundleFromToken(mockCommandInterpreter, firstToken, true);&lt;br /&gt;  will(returnValue(null));&lt;br /&gt; }});&lt;br /&gt; &lt;br /&gt; // invoke the _bundle() method&lt;br /&gt; frameworkCommandProvider._bundle(mockCommandInterpreter);&lt;br /&gt;}&lt;br /&gt;... &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Downsides:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Much code for the test setup to overwrite all the methods which should be mocked in the SUT object&lt;/li&gt;&lt;li&gt;Only protected, package and public methods can be mocked by this approach&lt;/li&gt;&lt;li&gt;Private methods can't be mock with this pattern&lt;/li&gt;&lt;li&gt;In the test code it's not clear which SUT methods are mocked and which not&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Here the whole example test code:&lt;/b&gt;&lt;/div&gt;&lt;pre class="prettyprint"&gt;package org.eclipse.osgi.framework.internal.core;&lt;br /&gt;&lt;br /&gt;import static org.junit.Assert.*;&lt;br /&gt;&lt;br /&gt;import org.eclipse.osgi.framework.console.CommandInterpreter;&lt;br /&gt;import org.jmock.Expectations;&lt;br /&gt;import org.jmock.Mockery;&lt;br /&gt;import org.jmock.integration.junit4.JMock;&lt;br /&gt;import org.jmock.integration.junit4.JUnit4Mockery;&lt;br /&gt;import org.jmock.lib.legacy.ClassImposteriser;&lt;br /&gt;import org.junit.Before;&lt;br /&gt;import org.junit.Test;&lt;br /&gt;import org.junit.runner.RunWith;&lt;br /&gt;&lt;br /&gt;@RunWith(JMock.class)&lt;br /&gt;public class FrameworkCommandProviderTest {&lt;br /&gt;&lt;br /&gt; // Create mock context and activate mocking for java classes.&lt;br /&gt; Mockery context = new JUnit4Mockery() {{&lt;br /&gt;     setImposteriser(ClassImposteriser.INSTANCE);&lt;br /&gt;    }};&lt;br /&gt; &lt;br /&gt;    InternalSystemBundle mockInternalSystemBundle;&lt;br /&gt; &lt;br /&gt; Framework mockFramework;&lt;br /&gt; &lt;br /&gt; CommandInterpreter mockCommandInterpreter;&lt;br /&gt; &lt;br /&gt; FrameworkCommandProvider mockFrameworkCommandProvider;&lt;br /&gt; &lt;br /&gt; FrameworkCommandProvider frameworkCommandProvider;&lt;br /&gt; &lt;br /&gt; @Before &lt;br /&gt; public void setUp(){&lt;br /&gt;  &lt;br /&gt;  // Create mock object for system bundle&lt;br /&gt;  mockInternalSystemBundle = context.mock(InternalSystemBundle.class);&lt;br /&gt;  // Mocking the getContext Method, returns always null&lt;br /&gt;  context.checking(new Expectations() {{&lt;br /&gt;   allowing (mockInternalSystemBundle).getContext(); will(returnValue(null));&lt;br /&gt;  }});&lt;br /&gt;  &lt;br /&gt;  // Create mock object for framework&lt;br /&gt;  mockFramework = context.mock(Framework.class);&lt;br /&gt;  // Set the mock object system bundle into the framework mock&lt;br /&gt;  mockFramework.systemBundle = mockInternalSystemBundle;&lt;br /&gt;  &lt;br /&gt;  // Create mock object for command interpreter&lt;br /&gt;  mockCommandInterpreter = context.mock(CommandInterpreter.class);&lt;br /&gt;  &lt;br /&gt;  // Create mock object for the SUT class, this mock will be used to mock methods in the SUT&lt;br /&gt;  mockFrameworkCommandProvider = context.mock(FrameworkCommandProvider.class);&lt;br /&gt;  &lt;br /&gt;  // Create the SUT object of type FrameworkCommandProvider&lt;br /&gt;  frameworkCommandProvider = new FrameworkCommandProvider(mockFramework) {&lt;br /&gt;   &lt;br /&gt;   /** &lt;br /&gt;    * Mock the SUT Method getBundleFromToken(...)&lt;br /&gt;    * All method calls will delegate to a mock &lt;br /&gt;    * of the same type then the SUT object &lt;br /&gt;    */&lt;br /&gt;   @Override&lt;br /&gt;   protected AbstractBundle getBundleFromToken(CommandInterpreter intp, String token, boolean error) {&lt;br /&gt;    // delegate the call to a mock object.&lt;br /&gt;    return mockFrameworkCommandProvider.getBundleFromToken(intp, token, error);&lt;br /&gt;   }&lt;br /&gt;  };&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; @Test &lt;br /&gt; public void _bundle_OneArgumentsAndBundleNotFoundByToken() throws Exception { &lt;br /&gt;  final String firstToken = "myBundleName[1.0.0]";&lt;br /&gt;  // Setup mock context&lt;br /&gt;  context.checking(new Expectations() {{&lt;br /&gt;   // one argument&lt;br /&gt;   one (mockCommandInterpreter).nextArgument(); will(returnValue(firstToken));&lt;br /&gt;   // next calles return null&lt;br /&gt;   allowing (mockCommandInterpreter).nextArgument(); will(returnValue(null));&lt;br /&gt;   &lt;br /&gt;   // getBundleFromToken returns null&lt;br /&gt;   one (mockFrameworkCommandProvider).getBundleFromToken(mockCommandInterpreter, firstToken, true);&lt;br /&gt;   will(returnValue(null));&lt;br /&gt;  }});&lt;br /&gt;  &lt;br /&gt;  // invoke the _bundle() method&lt;br /&gt;  frameworkCommandProvider._bundle(mockCommandInterpreter);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;b&gt;Run the Example Test:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;To run the test you need the equinox osgi implementation as SUT, you can get the equinox source from the eclipse CVS ("pserver:dev.eclipse.org/cvsroot/rt/org.eclipse.equinox/framework/bundles/org.eclipse.osgi/").&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Links&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.jmock.org/"&gt;JMock&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.junit.org/"&gt;JUnit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/equinox/"&gt;Eclipse Equinox&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&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/1013943301267331946-4036690864494499352?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/4036690864494499352/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2009/11/xunit-test-implementation-pattern-for.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/4036690864494499352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/4036690864494499352'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2009/11/xunit-test-implementation-pattern-for.html' title='xUnit test implementation pattern for mocking methods in a SUT object'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-2021441440763601300</id><published>2009-11-22T14:47:00.001+01:00</published><updated>2010-01-31T00:58:57.908+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Tipp Eclipse JDT Java Editor - Option Escape text when pasting into a string ...</title><content type='html'>Cool option in Eclipse java editor "&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: 13px; white-space: pre;"&gt;Escape text when pasting into a string literal&lt;span class="Apple-style-span" style="font-family: Times; font-size: medium; white-space: normal;"&gt;".&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&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/_zXKc-SRU8qo/SwlAvMCSzdI/AAAAAAAAANk/cHz7o-aZTLk/s1600/Bild+3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/SwlAvMCSzdI/AAAAAAAAANk/cHz7o-aZTLk/s320/Bild+3.png" /&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/1013943301267331946-2021441440763601300?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/2021441440763601300/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2009/11/tipp-eclipse-jdt-java-editor-option.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2021441440763601300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/2021441440763601300'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2009/11/tipp-eclipse-jdt-java-editor-option.html' title='Tipp Eclipse JDT Java Editor - Option Escape text when pasting into a string ...'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_zXKc-SRU8qo/SwlAvMCSzdI/AAAAAAAAANk/cHz7o-aZTLk/s72-c/Bild+3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-5374737138675030256</id><published>2009-11-09T23:52:00.001+01:00</published><updated>2010-01-31T00:59:22.394+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EMF'/><title type='text'>EMF - Create a Dynamic Model Instance</title><content type='html'>For developing EMF models the option "Create Dynamic Instance" can be very usefull. When you have a EMF meta model and you want to create a first test instance of the meta model the option  "Create Dynamic Instance"can be used see the screenshot...&lt;br /&gt;&lt;br /&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5402242618107396370" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/SvifCfLEgRI/AAAAAAAAAMM/2Os7Z4eD52c/s400/Bild+1.png" /&gt;&lt;br /&gt;&lt;br /&gt;For create Dynamic Instance do a right click on the RootObject of your model that you would want to instantiate. The screen shot bellow shows the editor for editing a EMF based model dynamic in eclipse as XMI.&lt;br /&gt;&lt;br /&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5402243026035494482" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/SvifaO0tTlI/AAAAAAAAAMU/tE7Q5g2dLdE/s400/Bild+2.png" /&gt;&lt;br /&gt;&lt;br /&gt;More details on dynamic instantiation in EMF:&lt;br /&gt;&lt;a href="http://wiki.eclipse.org/Dynamic_Browsing_and_Instantiation_Capabilites_in_EMF"&gt;http://wiki.eclipse.org/Dynamic_Browsing_and_Instantiation_Capabilites_in_EMF&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-5374737138675030256?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/5374737138675030256/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2009/11/emf-create-dynamic-model-instance.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/5374737138675030256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/5374737138675030256'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2009/11/emf-create-dynamic-model-instance.html' title='EMF - Create a Dynamic Model Instance'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zXKc-SRU8qo/SvifCfLEgRI/AAAAAAAAAMM/2Os7Z4eD52c/s72-c/Bild+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-783882151222403247</id><published>2009-11-01T23:42:00.000+01:00</published><updated>2009-11-23T22:14:36.746+01:00</updated><title type='text'>Eclipse Tipp - Java Type Labels on Java Files</title><content type='html'>To see the type of a java file by an label in eclipse activate the option&lt;br /&gt;&lt;br /&gt;Eclipse Preferences -&amp;gt; General -&amp;gt; Appearance -&amp;gt; Label Decorations -&amp;gt; Java Type Indicator&lt;br /&gt;&lt;br /&gt;The result:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_zXKc-SRU8qo/Su4QAHJds1I/AAAAAAAAAL0/siL4U1FoD_E/s1600-h/Bild+1.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5399270597368591186" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/Su4QAHJds1I/AAAAAAAAAL0/siL4U1FoD_E/s400/Bild+1.png" style="cursor: pointer; float: left; height: 160px; margin: 0pt 10px 10px 0pt; width: 338px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Preference Page:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_zXKc-SRU8qo/Su4Q-8JSDmI/AAAAAAAAAME/m5iS9ptEbbI/s1600-h/Bild+2.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5399271676746796642" src="http://2.bp.blogspot.com/_zXKc-SRU8qo/Su4Q-8JSDmI/AAAAAAAAAME/m5iS9ptEbbI/s400/Bild+2.png" style="cursor: pointer; float: left; height: 308px; margin: 0pt 10px 10px 0pt; width: 400px;" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-783882151222403247?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/783882151222403247/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2009/11/eclipse-tipp-interface-label-on-java.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/783882151222403247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/783882151222403247'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2009/11/eclipse-tipp-interface-label-on-java.html' title='Eclipse Tipp - Java Type Labels on Java Files'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_zXKc-SRU8qo/Su4QAHJds1I/AAAAAAAAAL0/siL4U1FoD_E/s72-c/Bild+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-7039550465203028063</id><published>2009-10-20T08:55:00.000+02:00</published><updated>2009-10-20T08:58:36.588+02:00</updated><title type='text'>Link - comparison of the GIT and SVN commands</title><content type='html'>Nice page with a comparison of the GIT and SVN commands. Good starting point for SVN users which switch to GIT. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://git.or.cz/course/svn.html"&gt;http://git.or.cz/course/svn.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-7039550465203028063?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/7039550465203028063/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2009/10/link-comparison-of-git-and-svn-commands.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7039550465203028063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7039550465203028063'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2009/10/link-comparison-of-git-and-svn-commands.html' title='Link - comparison of the GIT and SVN commands'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-3345849115354849021</id><published>2009-10-18T10:46:00.000+02:00</published><updated>2009-10-18T10:48:06.701+02:00</updated><title type='text'>PAX cool OSGi Utils</title><content type='html'>PAX provides a set of cool tools for building OSGi based applications here the Link to the overview page of the PAX projects:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wiki.ops4j.org/display/ops4j/Pax"&gt;http://wiki.ops4j.org/display/ops4j/Pax&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-3345849115354849021?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/3345849115354849021/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2009/10/pax-cool-osgi-utils.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/3345849115354849021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/3345849115354849021'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2009/10/pax-cool-osgi-utils.html' title='PAX cool OSGi Utils'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-9048589134841264366</id><published>2009-10-18T09:51:00.000+02:00</published><updated>2009-10-18T09:52:38.431+02:00</updated><title type='text'>Maven Archetype Overview</title><content type='html'>Here a nice overview of maven archetypes:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.codehaus.org/display/MAVENUSER/Archetypes+List"&gt;http://docs.codehaus.org/display/MAVENUSER/Archetypes+List&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Good bye&lt;br /&gt;&lt;br /&gt;Christian&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-9048589134841264366?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/9048589134841264366/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2009/10/maven-archetype-overview.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/9048589134841264366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/9048589134841264366'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2009/10/maven-archetype-overview.html' title='Maven Archetype Overview'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-1988105349254382635</id><published>2009-10-13T09:11:00.000+02:00</published><updated>2009-10-13T09:40:34.507+02:00</updated><title type='text'>JUnitExt Prerequisite as JUnit 4.7 Rule</title><content type='html'>The JUnit 4 Extensions project provides a annotation for specify precondition for a test. For example you have a database integration test, it makes no sense to run this test when the database is down. Therefor you can use the JUnit 4 Extension annotation @Prerequisite. But the  disadvantage is, you must use a JUnit 4 Extension specific  JUnit test runner @RunWith(AnnotationRunner.class). The Problem with the runner is when you must use a other runner for example the spring DI test runner in the test the approach did not work well.&lt;br /&gt;&lt;br /&gt;But a feature like the @Prerequisite annotation of JUnit 4 Extensions project is very nice to have. In JUnit 4.7 there for the JUnit rules comes in mind, here is a small code example how a rule solution for the @Prerequisite annotation can look like.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;Here the test with the  @Prerequisite annotation and without specific test runner:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;public class DatabaseTest {&lt;br /&gt;&lt;br /&gt; @Rule&lt;br /&gt; public PrerequisiteRule rule = new PrerequisiteRule(); &lt;br /&gt; &lt;br /&gt; @Test&lt;br /&gt; @Prerequisite(requires="databaseIsAvailable")&lt;br /&gt; public void testFindAllUsers() throws Exception {&lt;br /&gt;  // Database test stuff here&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; @Test&lt;br /&gt; public void testGetDataSource() throws Exception {&lt;br /&gt;  // No Database test stuff here&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public boolean databaseIsAvailable(){&lt;br /&gt;  return false;&lt;br /&gt; }&lt;br /&gt;  &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The test result will be:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_zXKc-SRU8qo/StQuVaW4MsI/AAAAAAAAALs/TiGJHvIIN4U/s1600-h/Bild+2.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 325px; height: 400px;" src="http://4.bp.blogspot.com/_zXKc-SRU8qo/StQuVaW4MsI/AAAAAAAAALs/TiGJHvIIN4U/s400/Bild+2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5391985599256736450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;This test without errors can look like this one:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;public class DatabaseTest {&lt;br /&gt;&lt;br /&gt; @Rule&lt;br /&gt; public PrerequisiteRule rule = new PrerequisiteRule(); &lt;br /&gt; &lt;br /&gt; @Test&lt;br /&gt; @Prerequisite(requires="databaseIsAvailable")&lt;br /&gt; public void testFindAllUsers() throws Exception {&lt;br /&gt;  // Database test stuff here&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; @Test&lt;br /&gt; public void testGetDataSource() throws Exception {&lt;br /&gt;  // No Database test stuff here&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public boolean databaseIsAvailable(){&lt;br /&gt;  return true;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And here a very basic rule implementation for the test:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;public class PrerequisiteRule implements MethodRule{&lt;br /&gt;&lt;br /&gt; public Statement apply(final Statement base, final FrameworkMethod method, final Object target) {&lt;br /&gt;  return new Statement() {&lt;br /&gt;   @Override&lt;br /&gt;   public void evaluate() throws Throwable {&lt;br /&gt;    Prerequisite annotation = method.getMethod().getAnnotation(Prerequisite.class);&lt;br /&gt;    if(annotation != null){&lt;br /&gt;     String requiresMethodname = annotation.requires();&lt;br /&gt;     Method requiresMethod = target.getClass().getMethod(requiresMethodname);&lt;br /&gt;     Boolean result = (Boolean) requiresMethod.invoke(target);&lt;br /&gt;     if(!result.equals(true)){&lt;br /&gt;      fail("Test requires "+requiresMethodname);&lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;    base.evaluate();&lt;br /&gt;   }&lt;br /&gt;  };&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ok the implementation of the rule is very basic there is no good error handling for example ...&lt;br /&gt;&lt;br /&gt;Feel free for comments ...&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;- http://junitext.sourceforge.net/&lt;br /&gt;- http://www.junit.org/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-1988105349254382635?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/1988105349254382635/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2009/10/junitext-prerequisite-as-junit-47-rule.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/1988105349254382635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/1988105349254382635'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2009/10/junitext-prerequisite-as-junit-47-rule.html' title='JUnitExt Prerequisite as JUnit 4.7 Rule'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zXKc-SRU8qo/StQuVaW4MsI/AAAAAAAAALs/TiGJHvIIN4U/s72-c/Bild+2.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-7064794836105957748</id><published>2009-09-30T18:26:00.000+02:00</published><updated>2009-11-22T19:35:33.087+01:00</updated><title type='text'>JUnit 4.7 Rule for cleanup EasyMock object after test</title><content type='html'>I try the JUnit 4.7 rule feature and I wrote a super small ExternalResource class for easymock cleanup (reset) here is the example code that makes mocking setup easier:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;import static org.easymock.EasyMock.*;&lt;br /&gt;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import org.junit.rules.ExternalResource;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Mock resource class for cleanup mock objects after each test run.&lt;br /&gt;*/&lt;br /&gt;public class MockResource extends ExternalResource {&lt;br /&gt;&lt;br /&gt;private List&lt;object&gt; mockObjects = new ArrayList&lt;object&gt;();&lt;br /&gt;&lt;br /&gt;public &lt;t&gt; &lt;t&gt; T createMockObject(Class&lt;t&gt; clazz) {&lt;br /&gt;T mock = createMock(clazz);&lt;br /&gt;mockObjects.add(mock);&lt;br /&gt;return mock;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected void after() {&lt;br /&gt;for (Object mock : mockObjects)&lt;br /&gt;reset(mock);&lt;br /&gt;} &lt;br /&gt;} &lt;br /&gt;&lt;/pre&gt;&lt;pre class="prettyprint"&gt;/**&lt;br /&gt;* Example test which use the rule for cleanup the mocks.&lt;br /&gt;*/&lt;br /&gt;public class ObserverTest {&lt;br /&gt;&lt;br /&gt;@Rule&lt;br /&gt;public MockResource mockResources = new MockResource();&lt;br /&gt;&lt;br /&gt;Observer mockObserver = mockResources.createMockObject(Observer.class);&lt;br /&gt;&lt;br /&gt;@Test&lt;br /&gt;public void testObserver() throws Exception {&lt;br /&gt;Car subject = new Car();&lt;br /&gt;subject.register(mockObserver);&lt;br /&gt;mockObserver.refresh(subject);&lt;br /&gt;replay(mockObserver);&lt;br /&gt;subject.setName("Porsche");&lt;br /&gt;verify(mockObserver);&lt;br /&gt;}&lt;br /&gt;} &lt;br /&gt;&lt;/pre&gt;With the mock resource rule no tearDown Method will be need the reset is be done by the rule.&lt;/t&gt;&lt;/t&gt;&lt;/t&gt;&lt;/object&gt;&lt;/object&gt; Come to think of it, there will be sure more mocking work which can be done by a JUnit rule. So I think the rule feature is very nice and makes JUnit tests better to read ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-7064794836105957748?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/7064794836105957748/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2009/09/junit-47-rule-for-easymock-rest.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7064794836105957748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7064794836105957748'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2009/09/junit-47-rule-for-easymock-rest.html' title='JUnit 4.7 Rule for cleanup EasyMock object after test'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-7086070308002599106</id><published>2009-09-29T22:05:00.000+02:00</published><updated>2009-09-29T22:09:22.494+02:00</updated><title type='text'>Cool JUnit 4.7 Stuff : JUnit and Files</title><content type='html'>Here a very nice example how to work with temporary files in JUnit 4.7&lt;a href="http://www.wakaleo.com/blog/226-working-with-temporary-files-in-junit-47"&gt; here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-7086070308002599106?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/7086070308002599106/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2009/09/cool-junit-47-stuff.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7086070308002599106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/7086070308002599106'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2009/09/cool-junit-47-stuff.html' title='Cool JUnit 4.7 Stuff : JUnit and Files'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1013943301267331946.post-1368349028401944292</id><published>2009-09-28T00:41:00.000+02:00</published><updated>2009-10-01T00:11:55.164+02:00</updated><title type='text'>JPA with Hibernate Criteria API</title><content type='html'>I didn't know that with JPA Vendor Hibernate, the Criteria API of Hibernate can be used. That can be done by getting the Hibernate Session from the JPA Entity Manager.&lt;br /&gt;&lt;br /&gt;Here a example code:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;  Session session = (Session) entityManager.getDelegate();&lt;br /&gt;  Criteria hibernateCriteria = session.createCriteria(Position.class);&lt;br /&gt;  // List with all positions&lt;br /&gt;  List list = hibernateCriteria.list();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ok the question is would you like to have a dependency to Hibernate in your source code when you would use JPA, I think you wold not like to have, but technical it works...&lt;br /&gt;&lt;br /&gt;Nicer would be a Criteria API that depends only on JPA and is not JPA vendor specific. For JPA 1 I didn't know a project that provides such a Criteria API that works fine, but in JPA 2 I think the Crititeria API would be part of the standard, so I think thats a good news.&lt;br /&gt;&lt;br /&gt;Another example:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;// Implementation with Hibernate Criteria&lt;br /&gt;public List getPositionList() {&lt;br /&gt;   Session session = (Session) entityManager.getDelegate();&lt;br /&gt;   Criteria hibernateCriteria = session.createCriteria(Position.class);&lt;br /&gt;   hibernateCriteria.addOrder(Order.desc("createTime"));&lt;br /&gt;   return hibernateCriteria.list();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Implementation with plain JPA&lt;br /&gt;public List getPositionList() {&lt;br /&gt;    Query query = entityManager.createQuery("SELECT p FROM Position p ORDER BY   p.createTime DESC");&lt;br /&gt;    return query.getResultList();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1013943301267331946-1368349028401944292?l=tux2323.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tux2323.blogspot.com/feeds/1368349028401944292/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://tux2323.blogspot.com/2009/09/jpa-with-hibernate-criteria-api.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/1368349028401944292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1013943301267331946/posts/default/1368349028401944292'/><link rel='alternate' type='text/html' href='http://tux2323.blogspot.com/2009/09/jpa-with-hibernate-criteria-api.html' title='JPA with Hibernate Criteria API'/><author><name>Christian Baranowski</name><uri>http://www.blogger.com/profile/08793835227415994612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/_zXKc-SRU8qo/Sr_tp-PrvNI/AAAAAAAAALA/Szegqd0NVR4/S220/_MG_6135.jpg'/></author><thr:total>0</thr:total></entry></feed>
