<?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-5484177613731225131</id><updated>2011-07-28T20:16:28.442+02:00</updated><category term='MDSD'/><category term='P2'/><category term='Equinox'/><category term='openArchitectureWare'/><category term='Eclipse'/><category term='Riena'/><category term='EasyBeans'/><category term='Ganymede'/><category term='redview'/><category term='OSGI'/><category term='SLF4J'/><category term='PDE'/><category term='OSX'/><category term='EclipseCon'/><category term='private'/><category term='LOGBack'/><title type='text'>ekkes corner - eclipse mdsd osgi oaw erp</title><subtitle type='html'>ekkes corner - blogging about eclipse as IDE and Platform / Model Driven Software Development (MDSD) using Eclipse Modeling - openArchitectureWare / OSGI - Eclipse Equinox, Eclipse Riena, EasyBeans / ERP software</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ekkes-corner.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>42</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-9086656194553361314</id><published>2009-05-26T09:45:00.004+02:00</published><updated>2009-05-26T09:53:33.147+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>moved ekkes-corner blog to wordpress</title><content type='html'>&lt;span class="Apple-style-span"  style=" line-height: 19px; font-size:13px;"&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Last days I moved my blog "ekkes-corner" from Blogger to &lt;a href="http://ekkescorner.wordpress.com/"&gt;Wordpress&lt;/a&gt;. I was impressed how easy all my existing blog entries and comments are imported. Some are looking not exactly the same as before, but over all it worked great.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;All my new blogs will now be there at Wordpress - hopefully the Feed of Planet Eclipse will be updated soon.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span mce_name="strong" mce_style="font-weight: bold;" class="Apple-style-span" style="font-weight: bold; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Eclipse 3.5 (Galileo)&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; is coming - and its a good idea for you to become a &lt;/span&gt;&lt;span mce_name="strong" mce_style="font-weight: bold;" class="Apple-style-span" style="font-weight: bold; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;a href="http://www.eclipse.org/donate/"&gt;Friend of Eclipse&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;&lt;span class="Apple-style-span" style="font-weight: normal; line-height: normal; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ekkescorner.wordpress.com/files/2009/05/friendsofgalileo1.gif"&gt;&lt;img src="http://ekkescorner.wordpress.com/files/2009/05/friendsofgalileo1.gif" border="0" alt="" style="cursor: pointer; width: 160px; height: 160px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Many new cool things in the area of PDE, Target Platforms, Runtime, Riena, Modeling (EMF, oAW) - I'll report about my experiences and give some tips and tricks in my upcoming blog posts.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span"  style="font-size:130%;"&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;stay tuned...&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;b&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;ekke&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-9086656194553361314?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=9086656194553361314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/9086656194553361314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/9086656194553361314'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2009/05/moved-ekkes-corner-blog-to-wordpress.html' title='moved ekkes-corner blog to wordpress'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-8826489276602229568</id><published>2009-05-11T06:42:00.006+02:00</published><updated>2009-05-11T07:05:27.750+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='openArchitectureWare'/><category scheme='http://www.blogger.com/atom/ns#' term='MDSD'/><title type='text'>New Ways Around Generation Gap Pattern - VideoCast</title><content type='html'>&lt;div&gt;To demonstrate the use of VetoRedirectStrategy in oAW workflows (see my last blog entry "&lt;a href="http://ekkes-corner.blogspot.com/2009/05/new-ways-around-generation-gap-pattern.html"&gt;New Ways Around Generation Gap Pattern&lt;/a&gt;") I created a videocast - movie.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SgewokRK9cI/AAAAAAAAAi8/slgMFWkpfn8/s1600-h/episode2_title.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SgewokRK9cI/AAAAAAAAAi8/slgMFWkpfn8/s400/episode2_title.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5334426494620595650" style="cursor: pointer; width: 390px; height: 400px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;After publishing my first videocasts I learned that there are sometimes problems to play them in different browsers. So I publish my screencasts in different formats - you can use what fits your environment.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://vimeo.com/ekkescorner"&gt;http://vimeo.com/ekkescorner&lt;/a&gt; as &lt;a href="http://vimeo.com/4558181"&gt;HD movie&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ekkes-corner-tv.org/"&gt;http://ekkes-corner-tv.org&lt;/a&gt; as &lt;a href="http://web.mac.com/ekkehard.gentz/ekkes-corner-tv/ekkes-corner-desktop/Einträge/2009/5/9_episode_2_-_MDSD_-_new_ways_around_Generation_Gap_Pattern.html"&gt;QuickTime&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.slideshare.net/ekkescorner"&gt;http://www.slideshare.net/ekkescorner &lt;/a&gt;as &lt;a href="http://www.slideshare.net/ekkescorner/new-ways-around-generation-gap-pattern"&gt;slides&lt;/a&gt; (no audio or animation)&lt;/li&gt;&lt;li&gt;iTunes: as VideoCast for iPod/iPhone or AppleTV/desktop (To subscribe from iTunes Store search for „ekkes-corner“)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Have fun.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ekke&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-8826489276602229568?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=8826489276602229568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/8826489276602229568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/8826489276602229568'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2009/05/new-ways-around-generation-gap-pattern_11.html' title='New Ways Around Generation Gap Pattern - VideoCast'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xv6Yjx9z9no/SgewokRK9cI/AAAAAAAAAi8/slgMFWkpfn8/s72-c/episode2_title.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-381086342914515924</id><published>2009-05-05T12:06:00.028+02:00</published><updated>2009-05-05T13:25:49.385+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='openArchitectureWare'/><title type='text'>New Ways Around Generation Gap Pattern</title><content type='html'>&lt;div&gt;&lt;div&gt;This blog dsescribes some new ways around "&lt;a href="http://www.research.ibm.com/designpatterns/pubs/gg.html"&gt;Generation Gap Pattern (John Vlissides)&lt;/a&gt;".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;ModelDrivenSoftwareDevelopment (MDSD) - Best Practices&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some&lt;a href="http://www.infoq.com/articles/model-driven-dev-best-practices"&gt; best practises&lt;/a&gt; are valid at all MDSD projects:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;generated code should be clearly separated from manually written code&lt;/li&gt;&lt;li&gt;generated code should not checked into a VersionControlSystem (CVS, SVN, GiT)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Inside a MDSD (ModelDrivenSoftwareDevelopment) project there are different types of code (see also &lt;a href="http://www.1160pm.net/2009/04/23/generation-gap-pattern/"&gt;Heiko Behrens article&lt;/a&gt;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Manuelly written code&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Code never be generated, always manually written. This can be some base framework classes or code only used at some places not worth to generate like Utility- or Helper classes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Generated unchanged code&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Such code will be always generated and never changed manually. Classes will be re.generated at each run of the generator - existing files are overwritten or destroyed before.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Generated but editable code&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is code where its useful or ecpected that the generated code will be changed or extended. If files exist, they will not be overwritten - new files will be added and generated first time. (generate-once)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Generation Gap Pattern&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The main problem with generated code is always how to combine or separate generated code and manually changed / extended code. That's the point where in most cases the Generation Gap Pattern will be used:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Generated classes will be generated into a directory which is cleared before generation. Subclasses will only generated first time into another directory where they can be changed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In practise some problems happen - per ex. "Ghost Classes" after refactorings / renaming. Also you cannot differ between generated and changed Subclasses - so all will be checked into VersionControlSystem.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To make this more practicable, Heiko Behrens describes „Conditional Generation“ where generated and changed Classes are clearly separated. oAW Workflow can use a "Vetostrategy": Before generating an artifact it will be tested if there's already a changed artifact into another direcrtory - and if found no new generation happens.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is described in detail in Heiko Behrens article „&lt;a href="http://www.1160pm.net/2009/04/23/generation-gap-pattern/"&gt;Generation Gap Pattern&lt;/a&gt;“. If you dont have read this article, please do now. I expect that you know the VetoStrategies described by Heiko !&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thanks to Heiko Behrens I got the information about oAW „VetoStrategy“ which was new for me - never read about it in the docs or forum. Now I was inspired to find some solutions for my project better then previous workarounds.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At first I must say, that I have some problems to use the „Generation Gap Pattern“ as generic pattern if generated code also has to be modified in MDSD projects. Working as softwarearchitect and designing an entity model (esp. in the domain of  Enterprise Business Applications), I very carefully think about inheritance strategies / hierarchies. (esp. if all must be mapped from Hibernate or EclipseLink to a database)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A really simple inheritance:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SgAY7uZFHWI/AAAAAAAAAg8/W4o2E2pGQHU/s1600-h/simple+inheritance.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SgAY7uZFHWI/AAAAAAAAAg8/W4o2E2pGQHU/s400/simple+inheritance.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332289373151239522" style="cursor: pointer; width: 273px; height: 240px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you follow the „&lt;a href="http://www.research.ibm.com/designpatterns/pubs/gg.html"&gt;Generation Gap Pattern (John Vlissides)&lt;/a&gt;“ :&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-style: normal; "&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SgAY7pkxR8I/AAAAAAAAAhE/2Rr5O8pGLZw/s1600-h/generation+gap+vlissides.gif"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SgAY7pkxR8I/AAAAAAAAAhE/2Rr5O8pGLZw/s400/generation+gap+vlissides.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5332289371858094018" style="cursor: pointer; width: 400px; height: 206px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Image from „&lt;/span&gt;&lt;/i&gt;&lt;a href="http://www.research.ibm.com/designpatterns/pubs/gg.html"&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Generation Gap Pattern&lt;/span&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;“ (c) 1996 John Vlissides&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;... separating Classes into one generated (often abstract) Class and one additional (often first-time-generated) editable Subclass ...&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic; "&gt;&lt;span class="Apple-style-span" style="font-style: normal; "&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SgAY7-X2QqI/AAAAAAAAAhM/ugpWkEG5_pQ/s1600-h/gap+pattern.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SgAY7-X2QqI/AAAAAAAAAhM/ugpWkEG5_pQ/s400/gap+pattern.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332289377441039010" style="cursor: pointer; width: 400px; height: 254px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic; "&gt;use of generation Gap Pattern in many oAW projects&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;... then the inheritance - hierarchy becomes "dirty" from my point of view. In big projects suddenly hundreds of classes are "twice" - and the only reason is technically: because its a modeldriven project ?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I only want to use abstract / concrete classes or super- / subclasses if I need them from my use-cases or software architecture, but not because I'm using a generator - framework.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As always using a pattern you should ask: is it the right pattern or are there other ways to reach the goal ?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;From my opinion: the "Generation Gap Pattern" helps in many cases, but not always. &lt;a href="http://www.1160pm.net/2009/04/23/generation-gap-pattern/"&gt;Heiko Behrens&lt;/a&gt; shows how the use of "VetoStrategies" in oAW workflows will help handling the files and folders, but its no solution to avoid getting many classes twice which bloats the architecture.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Protected Areas&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So we again have to find an answer how to separate generated and manually written code without breaking the rules of best practises in MDSD projects. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There is another way: „ProtectedAreas“. STOP crying ;-) please read ahead - I try to use protected areas something different then normaly !&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;What are „Protected Areas“ ?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If there are some parts of the code where its allowed to modify or extend, then the Begin and the End are marked as special comments identified by an unique ID. Inside these protected areas the default code will be generated and the area will be marked as DISABLED, so if regenerating it will be overwritten.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If a developer modifies / extends the content af a protected region, then this region has to be ENABLED and the changes are protected after regeneration. Using „Protected Areas“ the structure and inheritance of your classes remain unchanged - exact the same as using it without a generator.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;How are „Protected Areas“ normaly used ?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SgAZbi3ZCaI/AAAAAAAAAhU/kKvgYp6gyWE/s1600-h/pr+standard.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SgAZbi3ZCaI/AAAAAAAAAhU/kKvgYp6gyWE/s400/pr+standard.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332289919812962722" style="cursor: pointer; width: 400px; height: 256px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Whats the drawback ?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now classes have protected areas, can be overwritten if regenerated but then they will be checked into VersionControlSystem - thats bad, because there are many classes without changes: only generated content. That breaks the rule "never check-in generated code".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also you dont see which classes have changes and which are untouched after generation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Protected Regions using VetoRedirectStrategie&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's my solution&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SgAZbtHTT7I/AAAAAAAAAhc/1L7OCuKxiu8/s1600-h/pr+veto+strategie.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SgAZbtHTT7I/AAAAAAAAAhc/1L7OCuKxiu8/s400/pr+veto+strategie.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332289922564050866" style="cursor: pointer; width: 400px; height: 336px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;at start of generator-workflow clear „&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;src-gen&lt;/span&gt;“ and „&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;veto&lt;/span&gt;“&lt;/li&gt;&lt;li&gt;generator scannes „&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;src-gen-pr&lt;/span&gt;“ and caches ENABLED ProtectedAreas&lt;/li&gt;&lt;li&gt;„only-generated“ classes will be generated into „&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;src-gen&lt;/span&gt;“, also classes with „ProtectedRegions“ without a veto&lt;/li&gt;&lt;li&gt;classes with ENABLED  „ProtectedRegions“ are stored in „&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;src-gen-pr&lt;/span&gt;“ &lt;/li&gt;&lt;li&gt;while generating the generator checks using "VetoStrategy" if a class is already in „&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;src-gen-pr&lt;/span&gt;“. If found, then the generated output is redirected into „&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;veto&lt;/span&gt;“ directory where the new generated class together with ENABLED ProtectedRegions (from cache) is written to&lt;/li&gt;&lt;li&gt;as last step of generation the files from „&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;veto&lt;/span&gt;“ are compared with corresponding files from „&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;src-gen-pr&lt;/span&gt;“. Only if they differ, the new ones will be copied into „&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;src-gen-pr&lt;/span&gt;“. Now we are sure only really changed files will get a new modified flag and checked into VCS.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;The Workflow&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SgAZzXDOdnI/AAAAAAAAAhk/qmhbjURSGyw/s1600-h/veto+workflow.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SgAZzXDOdnI/AAAAAAAAAhk/qmhbjURSGyw/s400/veto+workflow.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332290328958236274" style="cursor: pointer; width: 373px; height: 400px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Generated-only and manually changed code now is clearly separated. Only changed artifacts will be commited into VCS and the Inheritance structure is unchanged.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course I have to watch, that a developer changing „Protected Regions“ doesnt forget to activate them (ENABLED) and to move the file into „&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;src-gen-pr&lt;/span&gt;“ if not already there. &lt;/div&gt;&lt;div&gt;If you want to check if a developer ENABLED a protected region, but forgets to move into „&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;src-gen-pr&lt;/span&gt;“ you simply can add a step at start of your workflow: scan „&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;src-gen-pr&lt;/span&gt;“ for protected regions - if some enabled are found, stop workflow with warning.&lt;/div&gt;&lt;div&gt;If you want to check if a developer forgots to enable a protected region after making some changes, you can include something like a checksum into the region and write a component to test these before starting to generate.&lt;/div&gt;&lt;div&gt;All is possible you see - but its of course a matter of time: each extra step will slowdown generation performance.&lt;/div&gt;&lt;div&gt;(Tip: sometimes the Local History of Eclipse helps - but there's currently a bug: oAW generator overwrites the last Local History entry instead of inserting a new)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Inside the default code of a „ProtectedRegion“ I always insert a comment like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Disabled Protected Region:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SgAaNxInB8I/AAAAAAAAAh0/glQI_-yGiak/s1600-h/PR+disabled.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SgAaNxInB8I/AAAAAAAAAh0/glQI_-yGiak/s400/PR+disabled.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332290782636738498" style="cursor: pointer; width: 400px; height: 82px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Enabled Protected Region:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SgAaN0KwfJI/AAAAAAAAAhs/uIC1mYCaUrg/s1600-h/PR+enabled.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SgAaN0KwfJI/AAAAAAAAAhs/uIC1mYCaUrg/s400/PR+enabled.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332290783451053202" style="cursor: pointer; width: 400px; height: 82px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Some Tech Infos HowTo implement a RedirectVetostrategie&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;tested using:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Eclipse 3.5M6&lt;/li&gt;&lt;li&gt;openArchitectureWare 4.3.1 (If you already use the plugins from Eclipse Modeling Project you have to change the namespace)&lt;/li&gt;&lt;li&gt;Apache Commons IO 1.4 (&lt;a href="http://www.springsource.com/repository/app/bundle/version/detail?name=com.springsource.org.apache.commons.io&amp;amp;version=1.4.0&amp;amp;searchType=bundlesBySymbolicName&amp;amp;searchQuery=org.apache.commons.io"&gt;SpringSourceEnterpriseBundleRepository &lt;/a&gt;- (Eclipse Orbit only has version 1.3.2 from 2007)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Workflow Components&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Workflow Component &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Directory Cleaner&lt;/span&gt; (oAW Component)&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SgAa_mHSz3I/AAAAAAAAAiU/hPeoEqu1I9E/s1600-h/workflow+dir+cleaner.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SgAa_mHSz3I/AAAAAAAAAiU/hPeoEqu1I9E/s400/workflow+dir+cleaner.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332291638671888242" style="cursor: pointer; width: 400px; height: 115px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;outlet.src.dir&lt;/span&gt; points to &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;src-gen&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;outlet.veto.pr.dir&lt;/span&gt; points to &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;veto&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Workflow Component &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Outlet&lt;/span&gt; with Vetostrategy (Redirect of enabled ProtectedRegions)&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SgAaqGt5vaI/AAAAAAAAAiE/6YeIpXmBvR8/s1600-h/workflow+outlet+with+veto.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SgAaqGt5vaI/AAAAAAAAAiE/6YeIpXmBvR8/s400/workflow+outlet+with+veto.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332291269466635682" style="cursor: pointer; width: 400px; height: 140px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This Outlet uses a new Vetostrategy - also the Outlet Class was extended&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;outlet.src.dir&lt;/span&gt; points to &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;src-gen&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;outlet.src.pr.dir&lt;/span&gt; points to &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;src-gen-pr&lt;/span&gt; and&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;outlet.veto.pr.dir&lt;/span&gt; points to &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;veto&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Workflow Component „&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;fileReplacer&lt;/span&gt;“ (Replace files from &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;src-gen-pr&lt;/span&gt; ?)&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SgAaqSgPYbI/AAAAAAAAAiM/Euka3uUpQqY/s1600-h/workflow+file+replace.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SgAaqSgPYbI/AAAAAAAAAiM/Euka3uUpQqY/s400/workflow+file+replace.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332291272630559154" style="cursor: pointer; width: 400px; height: 140px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A new Workflow Component compares corresponding files in &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;veto&lt;/span&gt; directory and &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;src-gen-pr&lt;/span&gt; directory and replaces modified ones.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;A short view inside the new Classes and Interfaces&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Class &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;OutletWithVetoRedirection&lt;/span&gt; (extends oAW &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Outlet&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SgAbsPVJooI/AAAAAAAAAic/1zk_I_Xyb4Q/s1600-h/outlet+with+vetoredirection+class.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SgAbsPVJooI/AAAAAAAAAic/1zk_I_Xyb4Q/s400/outlet+with+vetoredirection+class.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332292405650104962" style="cursor: pointer; width: 400px; height: 396px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Interface &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;VetoRedirectStrategy&lt;/span&gt; (extends oAW &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;VetoStrategy&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SgAbsLhBM6I/AAAAAAAAAik/NI0cI1f9EJs/s1600-h/interface+vetoredirectstrategy.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SgAbsLhBM6I/AAAAAAAAAik/NI0cI1f9EJs/s400/interface+vetoredirectstrategy.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332292404626142114" style="cursor: pointer; width: 400px; height: 109px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;vetoRedirectSourcePath&lt;/span&gt; points to &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;src-gen&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;vetoRedirectOutputPath&lt;/span&gt; points to &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;veto&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Class &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;CondGenVetoRedirectStrategy&lt;/span&gt; (implements &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;VetoRedirectStrategy&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SgAcFVLl4xI/AAAAAAAAAis/Yz97elOZCns/s1600-h/class+condGenVetoRedirectStrategy.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SgAcFVLl4xI/AAAAAAAAAis/Yz97elOZCns/s400/class+condGenVetoRedirectStrategy.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332292836717355794" style="cursor: pointer; width: 400px; height: 277px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;hasVeto&lt;/span&gt; always returns &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;false&lt;/span&gt; zurück, because we dont give a veto like from other VetoStrategies described by Heiko Behrens - we only want to redirect the Ouput Path into &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;veto&lt;/span&gt; Directory.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Classe &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ReplaceVetoRedirectedFiles&lt;/span&gt; (extends oAW &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;AbstractWorkflowComponent2&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SgAcFvxRARI/AAAAAAAAAi0/E9-dQKcdtBY/s1600-h/class+replace+veto+redirects.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SgAcFvxRARI/AAAAAAAAAi0/E9-dQKcdtBY/s400/class+replace+veto+redirects.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332292843854692626" style="cursor: pointer; width: 400px; height: 130px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using &lt;a href="http://commons.apache.org/io/"&gt;Apache Commons IO&lt;/a&gt; its very easy to compare file-content and to copy files from one directory to another.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;outputFile&lt;/span&gt; represents a file from &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;veto&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;sourceFile&lt;/span&gt; represents a file from src-gen-pr&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-------------------------------------------------------------------------------------&lt;/div&gt;&lt;div&gt;Important hint:&lt;/div&gt;&lt;div&gt;I was inspired to write this blog after reading the excellent article from Heiko Behrens: „&lt;a href="http://www.1160pm.net/2009/04/23/generation-gap-pattern/"&gt;Generation Gap Pattern&lt;/a&gt;“.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Heiko Behrens shows concrete solutions how to better handle „&lt;a href="http://www.research.ibm.com/designpatterns/pubs/gg.html"&gt;Generation Gap Pattern (John Vlissides)&lt;/a&gt;“ if using oAW (&lt;a href="http://www.openarchitectureware.org/"&gt;openArchitectureWare&lt;/a&gt;) Workflow und Xpand / XTend. This blog is not an alternate solution - only an extension !&lt;/div&gt;&lt;div&gt;-------------------------------------------------------------------------------------&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Summary&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;From my point-of-view the use of „Protected Areas“ combined with „Conditional Generation“ can be very useful in some projects. &lt;a href="http://www.infoq.com/articles/model-driven-dev-best-practices"&gt;Best Practises rules&lt;/a&gt; are not broken.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But as always: „Its Your Choice“ - it depends from project and use-cases what makes sense.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Heiko Behrens showed some strategies - if you add my ProtectedRegion strategy, I think you'll find the right for your project - or perhaps its the starting point to try it out.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Inside a big project there's no problem to use different strategies side-by-side.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hope I gave you some new ideas.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ekke&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Blog in &lt;/span&gt;&lt;/i&gt;&lt;a href="http://ekkes-ecke.org/"&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;german&lt;/span&gt;&lt;/i&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-381086342914515924?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=381086342914515924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/381086342914515924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/381086342914515924'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2009/05/new-ways-around-generation-gap-pattern.html' title='New Ways Around Generation Gap Pattern'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xv6Yjx9z9no/SgAY7uZFHWI/AAAAAAAAAg8/W4o2E2pGQHU/s72-c/simple+inheritance.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-4269937889948449008</id><published>2009-05-05T09:41:00.008+02:00</published><updated>2009-05-05T09:54:49.764+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='openArchitectureWare'/><title type='text'>oAW goes Eclipse Modeling</title><content type='html'>&lt;a href="http://www.openarchitectureware.org/"&gt;openArchitectureWare&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/Sf_uExrsPpI/AAAAAAAAAgs/R0puLNA0NjI/s1600-h/oaw-logo.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 161px; height: 81px;" src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/Sf_uExrsPpI/AAAAAAAAAgs/R0puLNA0NjI/s400/oaw-logo.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5332242249653436050" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;goes --&gt; &lt;a href="http://www.eclipse.org/modeling/"&gt;Eclipse Modeling Project&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/Sf_uFPfezJI/AAAAAAAAAg0/yoguFZOV-No/s1600-h/eclipse_modeling_project.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/Sf_uFPfezJI/AAAAAAAAAg0/yoguFZOV-No/s400/eclipse_modeling_project.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5332242257655286930" style="cursor: pointer; width: 286px; height: 193px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;During the last months oAW (&lt;a href="http://www.openarchitectureware.org/"&gt;openArchitectureWare&lt;/a&gt;) was integrated into Eclipse projects - the so-named oAW 5.0 will be in reality the first oAW Eclipse release as part from &lt;a href="http://www.eclipse.org/modeling/"&gt;Eclipse Modeling Project&lt;/a&gt; inside the Galileo train:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;oAW Workflow --&gt; &lt;a href="http://wiki.eclipse.org/Modeling_Workflow_Engine_(MWE)"&gt;Eclipse EMFT Modeling Workflow Engine (MWE)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;oAW Xpand/Xtend --&gt; &lt;a href="http://www.eclipse.org/modeling/m2t/?project=xpand"&gt;Eclipse M2T Xpand&lt;/a&gt;&lt;/li&gt;&lt;li&gt;oAW Xtext --&gt; &lt;a href="http://wiki.eclipse.org/Xtext"&gt;Eclipse TMF Xtext&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Starting with Eclipse 3.5 M7 it would be great if many oAW user will test, if oAW 4.3.1 projects are running well using Plugins from  Eclipse Modeling. (if not please report Bugzillas)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Perhaps someone will ask: why is there still an &lt;a href="http://www.openarchitectureware.org/"&gt;openArchitectureWare&lt;/a&gt; project, if all was moved to Eclipse into different projects from Eclipse Modeling ?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Eclipse Modeling contains uncount sub-projects (see also &lt;a href="http://it-republik.de/jaxenter/jax/"&gt;JAX&lt;/a&gt; session from Jan Köhnlein „&lt;a href="http://www.slideshare.net/schwurbel/eclipse-modeling-overview"&gt;Eclipse Modeling Overview&lt;/a&gt;“). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;oAW is something like a distribution - a container of some sub-projects running well together - making it easier für users to find out out the right combination to build projects using oAW-like MDSD.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;oAW is also a very active community providing much KnowHow and Support for model-driven development - look at the forums &lt;a href="http://www.openarchitectureware.org/forum/?menu=Forum"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There also exist some additional projects around oAW not moved to Eclipse - so try out the new Eclipse Modeling Workflow (MWE), Xpand (M2T) and Xtext (TMF) but stay tuned at &lt;a href="http://www.openarchitectureware.org/"&gt;openArchitectureWare&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ekke&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;blog in &lt;/span&gt;&lt;/i&gt;&lt;a href="http://ekkes-ecke.org"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;german&lt;/span&gt;&lt;/i&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-4269937889948449008?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=4269937889948449008' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/4269937889948449008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/4269937889948449008'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2009/05/oaw-goes-eclipse-modeling.html' title='oAW goes Eclipse Modeling'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Xv6Yjx9z9no/Sf_uExrsPpI/AAAAAAAAAgs/R0puLNA0NjI/s72-c/oaw-logo.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-3537775554079481204</id><published>2009-04-30T11:59:00.005+02:00</published><updated>2009-04-30T12:12:01.508+02:00</updated><title type='text'>OSGI Enterprise Applications: Monster Bundles from 3rdParty</title><content type='html'>&lt;div&gt;The (&lt;a href="http://www.osgi.org/Main/HomePage"&gt;OSGI&lt;/a&gt;) world could be so wonderful, all are brave OSGI citizens:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;one JAR file == one Bundle&lt;/li&gt;&lt;li&gt;import-package used for common dependencies&lt;/li&gt;&lt;li&gt;(required-bundles if used only in the own namespace)&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you have to develope OSGI Enterprise Business Applications, then in most cases you have to integrate 3rdParty bundles, - projects, -frameworks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And then it can happen, that a 3rdParty project looks good on the very first view: some bundles, well structured, dependencies make sense, but..... why is this core bundle so big ?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here you'll find the answer: „&lt;a href="http://vimeo.com/4389585"&gt;looking into 3rdParty OSGI bundles&lt;/a&gt;“&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/Sfl2_VQtCuI/AAAAAAAAAgk/fFKa8H35KRg/s1600-h/thumb2.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/Sfl2_VQtCuI/AAAAAAAAAgk/fFKa8H35KRg/s400/thumb2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5330422464380734178" style="cursor: pointer; width: 394px; height: 358px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Perhaps the Composite Bundles from upcoming OSGI R4.2 (&lt;a href="http://dev.eclipse.org/mhonarc/lists/eclipse-dev/msg08483.html"&gt;here&lt;/a&gt; and &lt;a href="http://www.eclipsecon.org/2009/sessions?id=534"&gt;here&lt;/a&gt; and Richard Halls &lt;a href="http://it-republik.de/konferenzen/ext_scripts/v2/php/sessions-popup.php?module=jax&amp;amp;id=10109"&gt;Session&lt;/a&gt; at JAX09) can help to encapsulate such monster bundles ? I'll try and report....&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ekke&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;blog in &lt;/span&gt;&lt;/i&gt;&lt;a href="http://ekkes-ecke.org/"&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;german&lt;/span&gt;&lt;/i&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/5484177613731225131-3537775554079481204?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=3537775554079481204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/3537775554079481204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/3537775554079481204'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2009/04/osgi-enterprise-applications-monster.html' title='OSGI Enterprise Applications: Monster Bundles from 3rdParty'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xv6Yjx9z9no/Sfl2_VQtCuI/AAAAAAAAAgk/fFKa8H35KRg/s72-c/thumb2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-1908991884522696344</id><published>2009-04-30T11:05:00.008+02:00</published><updated>2009-04-30T12:08:38.189+02:00</updated><title type='text'>JAX09 - HowTo build an OSGI EJB3 Server - Slides online</title><content type='html'>&lt;div&gt;Last week I was at &lt;a href="http://it-republik.de/jaxenter/jax/"&gt;JAX&lt;/a&gt; conference in Mainz - as always some great days. Most important for me are discussions with friends and networking.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On Friday at &lt;a href="http://it-republik.de/jaxenter/jax/sessions/?tid=1177"&gt;OSGI Experts Day&lt;/a&gt; I had a session and could give an overview of my OSGI EJB3 server:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Session "&lt;a href="http://vimeo.com/channels/ekkescorner"&gt;HowTo build an OSGI EJB3 Server&lt;/a&gt;"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SflqYNylW3I/AAAAAAAAAgc/cDgT1KBVT7s/s1600-h/thumb1.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SflqYNylW3I/AAAAAAAAAgc/cDgT1KBVT7s/s400/thumb1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5330408598220921714" style="cursor: pointer; width: 202px; height: 153px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://eclipse.org/"&gt;Eclipse&lt;/a&gt; as IDE and Platform for RCP and Server&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.osgi.org/Main/HomePage"&gt;OSGI&lt;/a&gt; - &lt;a href="http://www.eclipse.org/equinox-portal/"&gt;Equinox&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Eclipse &lt;a href="http://www.eclipse.org/pde/"&gt;PDE&lt;/a&gt; (OSGI Bundle Tooling)&lt;/li&gt;&lt;li&gt;Eclipse &lt;a href="http://www.eclipse.org/riena/"&gt;Riena&lt;/a&gt; (Remoting, UI)&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.easybeans.org/xwiki/bin/view/Main/WebHome"&gt;EasyBeans&lt;/a&gt; (EJB3 OSGI Bundles)&lt;/li&gt;&lt;li&gt;&lt;a href="http://drools.org/index.html"&gt;Drools&lt;/a&gt; (Rules Engine, Business-ProcessFlow)&lt;/li&gt;&lt;li&gt;&lt;a href="http://redview.org/"&gt;redView&lt;/a&gt; (Riena EMF Dynamic Views)&lt;/li&gt;&lt;li&gt;&lt;a href="http://open-erp-ware.org/"&gt;open-erp-ware&lt;/a&gt; (OSGI - ERP - Enterprise Application)&lt;/li&gt;&lt;li&gt;Model-Driven Development (oAW - &lt;a href="http://www.openarchitectureware.org/"&gt;OpenArchitectureWare&lt;/a&gt; XPand, XTend, Xtext, Workflow)&lt;/li&gt;&lt;li&gt;and more...&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Uploaded the slides, so you can watch them here:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.slideshare.net/ekkescorner/howto-build-an-osgi-ejb3-server-1362873"&gt;SlideShare&lt;/a&gt; (without embedded Screencasts)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.vimeo.com/4392331"&gt;Vimeo&lt;/a&gt; (as HD Video inclusive Quicktime Screencasts)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next days I'll produce some episodes for my VideoPodcasts at &lt;a href="http://ekkes-corner-tv.org/"&gt;ekkes-corner-tv.org&lt;/a&gt; and publish the session with audio added and some more details.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ekke&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;blog in &lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;german&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-1908991884522696344?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=1908991884522696344' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/1908991884522696344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/1908991884522696344'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2009/04/jax09-howto-build-osgi-ejb3-server.html' title='JAX09 - HowTo build an OSGI EJB3 Server - Slides online'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Xv6Yjx9z9no/SflqYNylW3I/AAAAAAAAAgc/cDgT1KBVT7s/s72-c/thumb1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-8039502152761616758</id><published>2009-04-08T22:48:00.010+02:00</published><updated>2009-04-08T23:34:02.436+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Riena'/><category scheme='http://www.blogger.com/atom/ns#' term='redview'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='EclipseCon'/><category scheme='http://www.blogger.com/atom/ns#' term='openArchitectureWare'/><title type='text'>redView - Dynamic Views for Business Applications</title><content type='html'>&lt;div&gt;This year at &lt;a href="http://www.eclipsecon.org/2009/"&gt;EclipseCon&lt;/a&gt; in Santa Clara I presented first time the new Open Source project "&lt;span class="Apple-style-span"  style="color:#FF0000;"&gt;&lt;a href="http://redview.org/"&gt;red&lt;/a&gt;&lt;/span&gt;&lt;a href="http://redview.org/"&gt;View&lt;/a&gt;" - started from Florian Pirchner and me.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/Sd0V9GDpCeI/AAAAAAAAAfk/gtyxiQ6G7Ho/s1600-h/Dynamic+Views+for+Business+Applications_en-poster.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/Sd0V9GDpCeI/AAAAAAAAAfk/gtyxiQ6G7Ho/s400/Dynamic+Views+for+Business+Applications_en-poster.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5322434473963882978" style="cursor: pointer; width: 400px; height: 300px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The &lt;a href="http://www.eclipsecon.org/2009/sessions?id=391"&gt;session&lt;/a&gt; was presented without the usual "slides-to-read-while-speaker-speaks". I was inspired by the book "Zen and the Art of Presentation" to make another kind of presentation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But if you present a session in Zen - style, you couldn't only publish your slides to people not hearing you live. A Zen - style - session is only the half of work - you also have to publish detailed technical informations in an extra document.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this case - those details will be published soon at &lt;span class="Apple-style-span"  style="color:#FF0000;"&gt;&lt;a href="http://redview.org/"&gt;red&lt;/a&gt;&lt;/span&gt;&lt;a href="http://redview.org/"&gt;view&lt;/a&gt;.org to download. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you were not at EclipseCon or visited another slot and want to know what I have presented, you're not lost - you can watch a Video Podcast:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;ekkes - corner - tv just started&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As an addition to my blogs in english and german language now I also will publish regular an english Video Podcast at  &lt;a href="http://ekkes-corner-tv.org/"&gt;ekkes - corner - tv.org&lt;/a&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/Sd0V8-WmrSI/AAAAAAAAAfc/EfddST815Ww/s1600-h/ekkes-corner-tv.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/Sd0V8-WmrSI/AAAAAAAAAfc/EfddST815Ww/s400/ekkes-corner-tv.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5322434471895936290" style="cursor: pointer; width: 400px; height: 252px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'll talk about and make live-demos about:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Eclipse as IDE and Platform for RCP and Server&lt;/li&gt;&lt;li&gt;OSGI - Equinox&lt;/li&gt;&lt;li&gt;Eclipse PDE (OSGI Bundle Tooling)&lt;/li&gt;&lt;li&gt;Eclipse Riena (Remoting, UI)&lt;/li&gt;&lt;li&gt;EasyBeans (EJB3 OSGI Bundles)&lt;/li&gt;&lt;li&gt;Drools (Rules Engine, Business Process Flows)&lt;/li&gt;&lt;li&gt;redView (Riena EMF Dynamic Views)&lt;/li&gt;&lt;li&gt;open-erp-ware (OSGI - ERP - Enterprise Application)&lt;/li&gt;&lt;li&gt;Model-Driven Development (oAW - OpenArchitectureWare XPand, XTend, Xtext, Workflow)&lt;/li&gt;&lt;li&gt;and more...&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you want to subscribe my Video Podcast:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;open iTunes Store, search for „ekkes-corner“ and subscribe. There are two different formats available: for&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=311645152"&gt; iPod/iPhone&lt;/a&gt; and for &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=311645441"&gt;Desktop/AppleTV&lt;/a&gt;). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you don't use iTunes Store you can read it directly from my web site: &lt;a href="http://ekkes-corner-tv.org/"&gt;ekkes-corner-tv.org&lt;/a&gt; or subscribe RSS Feed from there.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The first episode presents the &lt;span class="Apple-style-span"  style="color:#FF0000;"&gt;&lt;a href="http://www.eclipsecon.org/2009/sessions?id=391"&gt;red&lt;/a&gt;&lt;/span&gt;&lt;a href="http://www.eclipsecon.org/2009/sessions?id=391"&gt;View Session&lt;/a&gt; from EclipseCon.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;EclipseCon was as usual: very short nights - but also much fun to meet all the friends again and to learn much.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next months will be very hard:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;redView should be published beginning of may 2009&lt;/li&gt;&lt;li&gt;my OSGI - Equinox - Server should run under Galileo&lt;/li&gt;&lt;li&gt;my ERP Enterprise App should go live in summer 2009 &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Not to forget: this month is JAX 2009 in Mainz (Germany) where I speak at &lt;a href="http://it-republik.de/jaxenter/jax/sessions/?tid=1177"&gt;OSGI Experts Day&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There will be some Blogs and Video Podcasts to reflect all this work... stay tuned...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ekke&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-8039502152761616758?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=8039502152761616758' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/8039502152761616758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/8039502152761616758'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2009/04/redview-dynamic-views-for-business.html' title='redView - Dynamic Views for Business Applications'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Xv6Yjx9z9no/Sd0V9GDpCeI/AAAAAAAAAfk/gtyxiQ6G7Ho/s72-c/Dynamic+Views+for+Business+Applications_en-poster.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-9109162687888645158</id><published>2009-03-19T20:13:00.011+01:00</published><updated>2009-03-19T20:47:38.189+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Riena'/><category scheme='http://www.blogger.com/atom/ns#' term='redview'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='EclipseCon'/><category scheme='http://www.blogger.com/atom/ns#' term='openArchitectureWare'/><title type='text'>Using RCP Views to view UML Diagrams ?</title><content type='html'>&lt;div&gt;Who doesn't know this: &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You as Software Architect have listen to your business users requirements and designed such great UML diagrams - and now you present them proudly - but your business users don't understand what you designed. They couldn't imagine what all those dependencies, relations, inheritance, 0..1, 0..* mean.&lt;/div&gt;&lt;div&gt;￼&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/ScKa3nVs2oI/AAAAAAAAAec/PnS5UhMRomw/s1600-h/uml.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/ScKa3nVs2oI/AAAAAAAAAec/PnS5UhMRomw/s400/uml.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5314980790494091906" style="cursor: pointer; width: 400px; height: 300px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What if you could generate by-magic RCP views directly from your UML model ? &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;...and your business users can understand what your diagrams mean and also see those little hidden secrets from properties like "length of a String" causing the RCP View to show a single line or multi-line text field ?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; ...or showing fields marked as index as required with yellow background ?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;...or showing your Enumerations as SingleChoices or Combos ?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Utopia ?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;No - this is the way to realize it:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;use &lt;a href="http://www.openarchitectureware.org/"&gt;openArchitectureWare&lt;/a&gt; to generate from your UML Model Java Code, Configuration Files, EMF Models and more&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;￼&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/ScKa3r3EFxI/AAAAAAAAAeU/HCGjX7UZdKU/s1600-h/oaw-logo.gif"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/ScKa3r3EFxI/AAAAAAAAAeU/HCGjX7UZdKU/s400/oaw-logo.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5314980791707768594" style="cursor: pointer; width: 161px; height: 81px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;use &lt;a href="http://redview.org/"&gt;redView&lt;/a&gt; to auto-magically generate dynamic Views from your EMF Models&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/ScKdXU9zfqI/AAAAAAAAAfE/DI_gDp4L-As/s1600-h/128x128_RV.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/ScKdXU9zfqI/AAAAAAAAAfE/DI_gDp4L-As/s400/128x128_RV.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5314983534341095074" style="cursor: pointer; width: 128px; height: 128px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/ScKa3eQynFI/AAAAAAAAAeE/lPjzIaKfQbo/s1600-h/container_redview_de.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/ScKa3eQynFI/AAAAAAAAAeE/lPjzIaKfQbo/s400/container_redview_de.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5314980788057578578" style="cursor: pointer; width: 400px; height: 374px; " /&gt;&lt;/a&gt;￼&lt;/div&gt;&lt;div&gt;(Hint: the first 3 TabItems represent 0..1 or 1..1 associations, the last two TabItems contain a Table and represent 0..* or 1..* associations)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Curious ?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then visit on Thursday at 2:30pm Room 206 Session&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.eclipsecon.org/2009/sessions?id=391"&gt;Dynamic Views for Business Applications (Riena + Eclipse Modeling: EMF, oAW)&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;at &lt;a href="http://www.eclipsecon.org/2009/"&gt;EclipseCon&lt;/a&gt;!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;redView is a part of a complex enterprise solution - if you want to know more about my OSGI - Equinox - Riena - Easybeans Serverproject please visit JAX09 in Germany and book the &lt;a href="http://it-republik.de/jaxenter/jax/sessions/?tid=1177"&gt;OSGI ExpertsDay&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ekke&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/ScKa3uAoQzI/AAAAAAAAAek/oi6FW-agcks/s1600-h/de.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/ScKa3uAoQzI/AAAAAAAAAek/oi6FW-agcks/s400/de.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5314980792284758834" style="cursor: pointer; width: 16px; height: 11px; " /&gt;&lt;/a&gt; blog in &lt;a href="http://web.mac.com/ekkehard.gentz/ekkes-corner/blog/Einträge/2009/3/19_Mit_RCP_Views_UML_Diagramme_betrachten.html"&gt;german&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/5484177613731225131-9109162687888645158?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=9109162687888645158' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/9109162687888645158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/9109162687888645158'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2009/03/using-rcp-views-to-view-uml-diagrams.html' title='Using RCP Views to view UML Diagrams ?'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Xv6Yjx9z9no/ScKa3nVs2oI/AAAAAAAAAec/PnS5UhMRomw/s72-c/uml.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-3148711873642124218</id><published>2009-01-29T15:13:00.008+01:00</published><updated>2009-01-29T15:30:13.286+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Riena'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGI'/><title type='text'>Books and Conferences for Eclipse Plug-in Developers</title><content type='html'>&lt;div&gt;Here are my Top 3 of new published books I'm using in my daily work of developing Eclipse Plug-ins in a model-driven way...&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SYG6eeMR69I/AAAAAAAAAdQ/2MKS9afjV50/s1600-h/eclipse+books_.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SYG6eeMR69I/AAAAAAAAAdQ/2MKS9afjV50/s400/eclipse+books_.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5296719669427825618" style="cursor: pointer; width: 400px; height: 342px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;OSGI Service Compendium&lt;br /&gt;&lt;/li&gt;&lt;li&gt;EMF - Eclipse Modeling Framework&lt;br /&gt;&lt;/li&gt;&lt;li&gt;eclipse Plug-Ins&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;... now I only have to wait for the announced books of RCP and OSGI/Equinox - developing ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Yesterday I met Eric Clayberg and Dan Rubel in munich and received one copy of their new „eclipse Plug-ins“ book. Because I couldn't wait, I already had bought it two weeks ago. Now Florian Pirchner has luck, because he'll get this one - think he can use it for his work on redView (Riena EMF Dynamic View).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also good news for UI developers using Riena Ridgets: the integration / code generation from SWTDesigner will be better in the near future, Eric told me.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SYG8I1D1NaI/AAAAAAAAAdw/1LAjjmGlZvU/s1600-h/swtDesigner.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SYG8I1D1NaI/AAAAAAAAAdw/1LAjjmGlZvU/s400/swtDesigner.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5296721496632538530" style="cursor: pointer; width: 130px; height: 21px; " /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SYG6euOoQAI/AAAAAAAAAdY/o8fMd4ArQtY/s1600-h/riena_ei.jpg"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;         &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;+&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SYG6euOoQAI/AAAAAAAAAdY/o8fMd4ArQtY/s1600-h/riena_ei.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SYG6euOoQAI/AAAAAAAAAdY/o8fMd4ArQtY/s400/riena_ei.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5296719673732644866" style="cursor: pointer; width: 160px; height: 240px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;BTW: Who doesn't know: &lt;a href="http://www.eclipse.org/riena/"&gt;Riena&lt;/a&gt; is read-to-go for version 1.0. Congratulation !&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We' ll also try to make it easy to insert dynamic SWT Components (generated from redView) into SWTDesigner.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then you'll be able to design complex views using a comfortable GUI Designer and also include dynamic Components (like adress fields, ...) ... of course including databinding, Riena Markers and more.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you're going to &lt;a href="http://www.eclipsecon.org/2009/"&gt;EclipseCon&lt;/a&gt; dont miss our session about redView:&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.eclipsecon.org/2009/sessions?id=391"&gt;Dynamic Views for Business Applications (Riena + Eclipse Modeling: EMF, oAW) &lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And if you couldn't make it or you want to know something more  about the whole project - you can come to my session at &lt;a href="http://it-republik.de/jaxenter/jax/"&gt;JAX 09&lt;/a&gt; / &lt;a href="http://it-republik.de/jaxenter/eclipseforumeurope/"&gt;Eclipse Forum Europe 09&lt;/a&gt; conference  - &lt;a href="http://it-republik.de/jaxenter/jax/sessions/?tid=1177"&gt; OSGI Experts Day&lt;/a&gt;:&lt;/div&gt;&lt;div&gt;&lt;a href="http://it-republik.de/konferenzen/efe/sessions/efe/speaker/#633"&gt;How to build an OSGI Enterprise EJB3 Server&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ekke&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-3148711873642124218?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=3148711873642124218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/3148711873642124218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/3148711873642124218'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2009/01/books-and-conferences-for-eclipse-plug.html' title='Books and Conferences for Eclipse Plug-in Developers'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xv6Yjx9z9no/SYG6eeMR69I/AAAAAAAAAdQ/2MKS9afjV50/s72-c/eclipse+books_.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-2706971862016547556</id><published>2009-01-21T15:30:00.007+01:00</published><updated>2009-01-21T17:25:22.341+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Riena'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGI'/><category scheme='http://www.blogger.com/atom/ns#' term='openArchitectureWare'/><title type='text'>UserInterface in OSGI Enterprise Applications</title><content type='html'>&lt;div&gt;Christmas time is over...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SXdIhQxLLdI/AAAAAAAAAZc/svOH1NCuKYI/s1600-h/weihnachtsessen.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SXdIhQxLLdI/AAAAAAAAAZc/svOH1NCuKYI/s400/weihnachtsessen.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5293779623271411154" style="cursor: pointer; width: 301px; height: 197px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;... and so its time to publish something. The last weeks ware filled with hard and intensive work to make my OSGI Enterprise Application run. Main work at the moment is the design of the Userinterface(GUI).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One part of the GUI - development I'll present at EclipseCon 2009, together with Florian, the Plug-In developer of redView. (redView = Riena - EMF - Dynamic Views)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The idea to create the redView project was born some months ago, as I was discussing with Florian the problems to design a GUI for a complex ERP Enterprise solution. Such an Enterprise Application with hundreds of Entities and high quality and comfort for the users to work with should be designed using a GUI Designer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SXdIji8qoOI/AAAAAAAAAZ8/dO1gDBGu540/s1600-h/name-sm-swtd.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SXdIji8qoOI/AAAAAAAAAZ8/dO1gDBGu540/s400/name-sm-swtd.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5293779662511186146" style="cursor: pointer; width: 130px; height: 21px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I decided to use &lt;a href="http://www.instantiations.com/windowbuilder/swtdesigner/"&gt;SWTDesigner from Instantiations&lt;/a&gt; as GUI Designer tool - from my experiences a really great application.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;An ERP Enterprise Application has many high specialized windows (views), but also hundreds of standard - views. Standard views are looking same and most parts of the views can be generated from the Entity - data model.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SXdLSmdUmkI/AAAAAAAAAas/3qJ6E-ySPY0/s1600-h/oaw-logo.gif"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SXdLSmdUmkI/AAAAAAAAAas/3qJ6E-ySPY0/s400/oaw-logo.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5293782669930568258" style="cursor: pointer; width: 161px; height: 81px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Because my ERP Application is model-driven (using &lt;a href="http://www.openarchitectureware.org/"&gt;openArchitectureWare&lt;/a&gt;) the first idea was to generate the Java code of those views. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But if you generate Views there will be always usecases where the business user wants to change "only something". If you do this using SWTDesigner then the Java code will be changed and cannot be generated again. So its difficult to manage this, if the model changes, attributes were added or so. Of course its a good idea to generate the first version of the views to make it easier to start designing. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SXdLSobPWmI/AAAAAAAAAak/bh1yVBuFSN4/s1600-h/riena_ei.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SXdLSobPWmI/AAAAAAAAAak/bh1yVBuFSN4/s400/riena_ei.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5293782670458706530" style="cursor: pointer; width: 160px; height: 240px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My OSGI Enterprise Application already uses &lt;a href="http://www.eclipse.org/riena/"&gt;Eclipse Riena&lt;/a&gt; for Remote OSGI Services. Riena also has some nice things if you're devloping a GUI.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Riena makes the programming of UI easier and uses Ridgets (encapsulated SWT Widgets). You dont lose flexibility because if you need it, you can access the SWT widgets, too.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Riena Ridgets also separate UI and Controller and make configuring Eclipse Databinding much easier. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In Enterprise Businessapplications you always have to decide:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;should this element be displayed ? (depends on Usecase or Data)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;is this element required ? (the user must enter data)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;is it a read-only element ?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;are there validation rules for this field ? (Phonenumber, email, from-to value, date, ...)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Riena provides the concept of Marker and Validation making programming these things also much easier- and you're sure that it will always look the same in your whole application.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If the code was generated you'll get some informations for Markers and Validation already from the Entity model or Business-Process model.  (An attribute marked as Businesskey or Index should be a required field) So you'll get many defaults generated.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you're using Riena there are some problems designing with SWTDesigner, because the  code generated from SWT Designer doesnt know the Riena - concept of splitting Controller und UI  - but hopefully in the future the integration will become better.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Riena also includes a complete UI concept with own LookAndFeel, navigation and nice designed perspectives, where a perspective can be a subapplication of the enterprise application. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Riena UI is clear, easy-to-use and doesn't confuse a business user with all the functionality of Eclipse RCP. But (for me) there's a downside of this concept: Riena always has only one View open at a fix position. There are many UseCases in an ERP Application where I need more then one View opened including Drag'n'Drop between the Views. I'll see if there will be ways in the future to combine this, because I would like to use some of the cool things Riena provides for  UI - development.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But all of this is no answer how to design Views of Enterprise Applications in model-driven frameworks: what can be generated without losing flexibility in design ?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So we're back at my discussions with Florian last autumn. Our vision:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Wouldn't it be great to have a GUI including all the comfort from Riena, dynamically created at runtime depending on an EMF Metamodel ?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;... and these EMF models for each View itself are generated using openArchitectureWare from UML Entity- and Businessprocess - models  ?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;... and having a graphical designer - editor, where a business user or - programmer can easyli change the generated Views ? (Drag and Drop to change the order / position of elements, add or change validation rules, add or change Riena Markers, Fonts, Colors,....)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;... and wouldn't it be great to combine these changed EMF models with changes from UML models next time generating the Views again ?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This was a vision in october 2008 - now we're knowing that it works ( I already generated some hundred Views for the ERP project successfully) and we'll present it at EclipseCon 2009:&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.eclipsecon.org/2009/sessions?id=391"&gt;Dynamic Views for Business Applications (Riena + Eclipse Modeling: EMF, oAW)&lt;/a&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SXdJFVWC2xI/AAAAAAAAAaE/MR1B1hDWFL0/s1600-h/mitarbeiter+uml.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SXdJFVWC2xI/AAAAAAAAAaE/MR1B1hDWFL0/s400/mitarbeiter+uml.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5293780242975087378" style="cursor: pointer; width: 305px; height: 329px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;an Entity in UML class diagram (MagicDraw)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SXdJFc2OSaI/AAAAAAAAAaU/kF7_5uD2HDQ/s1600-h/create+labeled+entry.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SXdJFc2OSaI/AAAAAAAAAaU/kF7_5uD2HDQ/s400/create+labeled+entry.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5293780244989102498" style="cursor: pointer; width: 400px; height: 121px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;oAW Xtend creates EMF elements using UML model with JPA Persistence Profile&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SXdIjFEBZWI/AAAAAAAAAZk/vnIB5DC15So/s1600-h/UI+Designer+Required.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SXdIjFEBZWI/AAAAAAAAAZk/vnIB5DC15So/s400/UI+Designer+Required.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5293779654488974690" style="cursor: pointer; width: 400px; height: 94px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;redView Designer with generated elements - the yellow marked entry field indicates a Riena Marker „required“&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SXdIjutfYFI/AAAAAAAAAZ0/A6udRmGjt9c/s1600-h/outline+required.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SXdIjutfYFI/AAAAAAAAAZ0/A6udRmGjt9c/s400/outline+required.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5293779665668759634" style="cursor: pointer; width: 237px; height: 212px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;EMF Outline View with generated elements&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SXdIjT7VtGI/AAAAAAAAAZs/7FvVaqFIsis/s1600-h/properties+required.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SXdIjT7VtGI/AAAAAAAAAZs/7FvVaqFIsis/s400/properties+required.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5293779658479088738" style="cursor: pointer; width: 400px; height: 89px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;The Properties View of one GUI element.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Its still some work to finish all aspects of databinding, I18N, Platform - independence (at the moment tested on OSX and Windows), and using Styles and Themes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SXdJFbbkmsI/AAAAAAAAAaM/_iu5rdWrdtk/s1600-h/flo+und+ekke.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SXdJFbbkmsI/AAAAAAAAAaM/_iu5rdWrdtk/s400/flo+und+ekke.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5293780244608883394" style="cursor: pointer; width: 306px; height: 211px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hard weeks, short nights, bit it's fun to work with Florian and to make a vision reality.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now these are the ways to design the GUI of my ERP Enterprise Application:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Standard Views will be generated using oAW as EMF models&lt;br /&gt;&lt;/li&gt;&lt;li&gt;redView creates dynamic Views from these EMF models&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Spezial Views can be generated first times from oAW&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Standard Views can be designed using redView Designer&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Spezial Views will be designed using SWTDesigner&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Riena Ridgets, Marker and Validation is used&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The last years I was using EMF only indirectly and all my generation of code and artifacts using oAW was based on UML. No I reached the EMF world as so many others, too ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The flexibility of EMF and the good integration into oAW is really great - it is so easy to work with UML and EMF together.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'll report in detail about all different aspects of designing UI in Enterprise Applications from my point of view. Because its a complex story, I started a new blog series "UI in OSGI Enterprise Applications". Of course I'll also compare the pros and cons using some of the other great UI projects or how to combine them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;... stay tuned.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;... the other blog series about Logging, Server, Declarative Services will also be continued - all belongs together.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SXdLStYsI-I/AAAAAAAAAac/vO5rKWSFPuw/s1600-h/130x100_speaking_dark_trans.gif"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SXdLStYsI-I/AAAAAAAAAac/vO5rKWSFPuw/s400/130x100_speaking_dark_trans.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5293782671790187490" style="cursor: pointer; width: 130px; height: 100px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ekke&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;a href="http://ekkes-ecke.org"&gt;the blog in german&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-2706971862016547556?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=2706971862016547556' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/2706971862016547556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/2706971862016547556'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2009/01/userinterface-in-osgi-enterprise.html' title='UserInterface in OSGI Enterprise Applications'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xv6Yjx9z9no/SXdIhQxLLdI/AAAAAAAAAZc/svOH1NCuKYI/s72-c/weihnachtsessen.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-4053235432222042129</id><published>2008-12-18T12:13:00.007+01:00</published><updated>2008-12-18T12:35:47.848+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Riena'/><category scheme='http://www.blogger.com/atom/ns#' term='EasyBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='openArchitectureWare'/><title type='text'>EclipseCON 2009 Riena - EMF - oAW and more</title><content type='html'>&lt;div&gt;This time I'll not only visit the eclipseCON - one of my submissions was accepted:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SUo1N4oWHMI/AAAAAAAAAZM/EgALK71ejoI/s1600-h/130x100_speakingEC2009.gif"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SUo1N4oWHMI/AAAAAAAAAZM/EgALK71ejoI/s400/130x100_speakingEC2009.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5281092025701506242" style="cursor: pointer; width: 130px; height: 100px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.eclipsecon.org/2009/sessions?id=391"&gt;Dynamic Views for Business Applications (Riena + Eclipse Modeling: EMF, oAW)&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm very happy about this. This was the second really good news last time - first was at german &lt;a href="http://www.wjax.de/"&gt;W-Jax&lt;/a&gt; where I became a member of the oAW Team.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;redView&lt;/span&gt; (Riena - EMF - Dynamic View) is a sub-project of my model-driven OSGI Enterprise Application. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;redView&lt;/span&gt;  will be Open Source (EPL). Dynamic views from &lt;span class="Apple-style-span" style="font-style: italic;"&gt;redView&lt;/span&gt; can be used stand-alone or in combination with &lt;span class="Apple-style-span" style="font-style: italic;"&gt;openArchitectureWare (oAW)&lt;/span&gt;.  ... I'll talk more about this next weeks &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This week was a heavy update - week: &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;OSX 10.5.6&lt;br /&gt;&lt;/li&gt;&lt;li&gt;MagicDraw 16.0&lt;br /&gt;&lt;/li&gt;&lt;li&gt;openArchitectureWare 4.3.1RC3 und RC4&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Riena M6&lt;br /&gt;&lt;/li&gt;&lt;li&gt;EasyBeans 1.1.0 Snapshots&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Thanks to EasyBeans - Team (they added some properties for Declarative Services) I can continue my work to switch from ServiceTracker to Declarative Servics (DS) and there'll be new blogs also coming soon.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;stay tuned...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ekke&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;BTW: dont wonder if my submission 391 has no author. I tried to add my assistant as co-author, got an error and now the submissions has lost author and assistant. reported a bugzilla..&lt;/span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-4053235432222042129?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=4053235432222042129' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/4053235432222042129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/4053235432222042129'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/12/eclipsecon-2009-riena-emf-oaw-and-more.html' title='EclipseCON 2009 Riena - EMF - oAW and more'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xv6Yjx9z9no/SUo1N4oWHMI/AAAAAAAAAZM/EgALK71ejoI/s72-c/130x100_speakingEC2009.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-9185989342267592271</id><published>2008-12-10T16:16:00.013+01:00</published><updated>2008-12-10T16:38:04.039+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SLF4J'/><category scheme='http://www.blogger.com/atom/ns#' term='PDE'/><category scheme='http://www.blogger.com/atom/ns#' term='LOGBack'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGI'/><category scheme='http://www.blogger.com/atom/ns#' term='openArchitectureWare'/><title type='text'>Logging in OSGI Enterprise Applications, Part 6</title><content type='html'>&lt;div&gt;This part of my blog series "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Logging in OSGI Enterprise Applications&lt;/span&gt;" will talk about &lt;a href="http://www.openarchitectureware.org"&gt;openArchitectureWare&lt;/a&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/ST_eMzw5aXI/AAAAAAAAAYE/Ro7Sdk0rT7o/s1600-h/oaw-logo.gif"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/ST_eMzw5aXI/AAAAAAAAAYE/Ro7Sdk0rT7o/s400/oaw-logo.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5278181599936604530" style="cursor: pointer; width: 161px; height: 81px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;...and logging with &lt;a href="http://www.slf4j.org/"&gt;SLF4J&lt;/a&gt; / &lt;a href="http://logback.qos.ch/"&gt;LogBack&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/ST_eMohy5zI/AAAAAAAAAX8/VncqXR6pmik/s1600-h/slf4j-logo.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/ST_eMohy5zI/AAAAAAAAAX8/VncqXR6pmik/s400/slf4j-logo.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5278181596920473394" style="cursor: pointer; width: 305px; height: 130px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The previous blog entries from this series described logging from the Runtime of an OSGI Enterprise Application. The whole Client / Server Project is model-driven based on Eclipse Modeling Project: EMF, UML2 and as engine the generator framework openArchitectureWare. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/ST_ecU0Km9I/AAAAAAAAAYU/umQgoybB6DE/s1600-h/eclipse+and+workspaces.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/ST_ecU0Km9I/AAAAAAAAAYU/umQgoybB6DE/s400/eclipse+and+workspaces.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5278181866506722258" style="cursor: pointer; width: 377px; height: 400px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The MDSD - aspects of the application will be part of another blog series.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now we want to take a look at logging with SLF4J / LogBack while working with openArchitectureWare.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;openArchitectureWare (oAW) in Target Platforms&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you want to use oAW in a Target Platform with SLF4J / LogBack as Logging Framework together with bridges to Commons Logging and Log4J, you'll notice some problems: Many of the oAW bundles are using Require - Bundles instead of Import - Packages as dependency to logging bundles.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/ST_e_QiLQmI/AAAAAAAAAYc/WFdq0GN1N6c/s1600-h/oaw+req+bdle.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/ST_e_QiLQmI/AAAAAAAAAYc/WFdq0GN1N6c/s400/oaw+req+bdle.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5278182466652947042" style="cursor: pointer; width: 400px; height: 165px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I opened a &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=257828"&gt;Bugzilla&lt;/a&gt;, but it seems its too late for 4.3.1.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you need it now, thanks to PDE its easy: Import Bundles in your Workspace, change Dependencies to Import Package, then export the Bundle als Plug-In again.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;openArchitectureWare (oAW) Workflows&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There's an own Launcher for oAW Workflows (&lt;span class="Apple-style-span" style="font-family: verdana;"&gt;Run Configurations | oAW Workflow&lt;/span&gt;) - we have to change the Classpath:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/ST_e__FmpBI/AAAAAAAAAYs/gICetLWx_zs/s1600-h/workflow_run_cp0.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/ST_e__FmpBI/AAAAAAAAAYs/gICetLWx_zs/s400/workflow_run_cp0.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5278182479149573138" style="cursor: pointer; width: 400px; height: 146px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Click on &lt;span class="Apple-style-span" style="font-style: italic;"&gt;User Entries&lt;/span&gt; and then &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Add Projects...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/ST_e_108zFI/AAAAAAAAAY0/OMWZ0yOLmqs/s1600-h/workflow_run_cp0-5.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/ST_e_108zFI/AAAAAAAAAY0/OMWZ0yOLmqs/s400/workflow_run_cp0-5.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5278182476663802962" style="cursor: pointer; width: 360px; height: 400px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;...choose the Logging - Projekts from workspace&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/ST_fAcG1PiI/AAAAAAAAAY8/U5PKwl_POpk/s1600-h/workflow_run_cp1.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/ST_fAcG1PiI/AAAAAAAAAY8/U5PKwl_POpk/s400/workflow_run_cp1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5278182486939352610" style="cursor: pointer; width: 400px; height: 330px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;...and save changes with &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Apply&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You have to put the &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;logback.xml&lt;/span&gt; (or&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt; logback-test.xml&lt;/span&gt;) directly under &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;src/ &lt;/span&gt;into the project which starts the oAWworkflow. In this xml file we configure the logging from the workflow - doesn't matter if the logoutput was originally sent to Log4J, Commons-Logging or OSGI LogServices.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To control please start a Workflow with &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;debug="true"&lt;/span&gt; in &lt;configuration debug="true"&gt;your &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;logback.xml&lt;/span&gt;.&lt;/configuration&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/ST_e_qWPQJI/AAAAAAAAAYk/rxK_pClta8U/s1600-h/wf_console_w_logback.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/ST_e_qWPQJI/AAAAAAAAAYk/rxK_pClta8U/s400/wf_console_w_logback.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5278182473582198930" style="cursor: pointer; width: 400px; height: 147px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If all is configured right, then the Console will list at first the logback - configuration and then all log - output from the Workflow sent to our configured Appender (Console, Socket, usw)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Blog Series "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Logging in OSGI Enterprise Applications&lt;/span&gt;":&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Part 1: &lt;a href="http://ekkes-corner.blogspot.com/2008/09/logging-in-osgi-enterprise-applications.html"&gt;An overview&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Part 2: &lt;a href="http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications.html"&gt;How to catch all log events from "classic" logging - frameworks&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Part 3: &lt;a href="http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications_11.html"&gt;How to catch all log events from OSGI Log Services &lt;/a&gt;&lt;/div&gt;&lt;div&gt;Part 4: &lt;a href="http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications_20.html"&gt;How to start logging bundles the right way inside an OSGI Enterprise application&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Part 5: &lt;a href="http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications_31.html"&gt;Configuration, Fragment-Bundles, Markers&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Part 6: Logging and openArchitectureWare Workflows&lt;/div&gt;&lt;div&gt;Part 7: ... follows (Stay tuned...)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Perhaps some of my older blogs about Logging und OSGI are also interesting:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://ekkes-corner.blogspot.com/2008/07/logging-riena-easybeans-equinox.html"&gt;Logging (Riena - EasyBeans - Equinox) reloaded&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://ekkes-corner.blogspot.com/2008/06/catch-22-logging-with-osgi-frameworks.html"&gt;Catch-22 Logging in OSGI Environments&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/ST_eU2N_ebI/AAAAAAAAAYM/goeYcDsLbfU/s1600-h/de.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/ST_eU2N_ebI/AAAAAAAAAYM/goeYcDsLbfU/s400/de.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5278181738034461106" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width: 16px; height: 11px; " /&gt;&lt;/a&gt;&lt;div&gt;&lt;a href="http://ekkes-ecke.org"&gt;blog in german&lt;/a&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/5484177613731225131-9185989342267592271?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=9185989342267592271' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/9185989342267592271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/9185989342267592271'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/12/logging-in-osgi-enterprise-applications.html' title='Logging in OSGI Enterprise Applications, Part 6'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xv6Yjx9z9no/ST_eMzw5aXI/AAAAAAAAAYE/Ro7Sdk0rT7o/s72-c/oaw-logo.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-2216596698859430974</id><published>2008-12-10T09:31:00.012+01:00</published><updated>2008-12-10T09:52:48.156+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSX'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='openArchitectureWare'/><title type='text'>Comparing Files And Folders After Codegeneration</title><content type='html'>&lt;div&gt;Eclipse has great possibilities to compare files and folders with each other or history.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But I'm also using external tools: &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://ekkes-corner.blogspot.com/2008/09/pde-target-platform-rename-bundles-osx.html"&gt;Some time ago I blogged&lt;/a&gt; how to use &lt;a href="http://www.versiontracker.com/dyn/moreinfo/macosx/31207"&gt;NameChanger&lt;/a&gt; (Freeware) under OSX to rename files where the bundle names aren't named like eclipse bundles (plug-ins) using "&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;name_version&lt;/span&gt;".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also for creating of target platform - locations I'm using a tool to get unique sets of bundles. My blog „&lt;a href="http://ekkes-corner.blogspot.com/2008/09/pde-target-platform-avoid-duplicate.html"&gt;Avoid Duplicate Bundles&lt;/a&gt;“ desribes the use of FileMerge (under OSX part of XCode Tools).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now I was looking for an intelligent tool to see if generated code is identical to an older version. This generated code is not checked into a sourcecode repository, because its always regenerated. Before starting the generation those directories werde cleared, so there's also no local history in Eclipse.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While testing &lt;a href="http://oawbranch.pluginbuilder.org/releases/4.3.1RC2.20081208-2300PRD/"&gt;4.3.1RC2&lt;/a&gt; of &lt;a href="http://www.openarchitectureware.org"&gt;openArchitectureWare&lt;/a&gt; I was interestd to see if the generated code is identical to version 4.3.0.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Its not so easy because there are some allowed differences like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;* generation started at: 9. Dezember 2008 08:04:13 CET&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Those generation timestamps should be "identical" to lines with another timestamp. FileMerge from OSX was no help, because these files are reported as different.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next try: &lt;a href="http://www.infinitenexus.com/cf/"&gt;Compare Folders&lt;/a&gt; compares the size of files and also reports added or missing files. If the generation timestamp hase same length, then the files are identical otherwise not: &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/ST9-90NW4wI/AAAAAAAAAXE/NJMtSlSbyt8/s1600-h/compare+folders.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/ST9-90NW4wI/AAAAAAAAAXE/NJMtSlSbyt8/s400/compare+folders.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5278076888753300226" style="cursor: pointer; width: 400px; height: 156px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;... I also dont know if the other content is identical - I need the compare more detailed. I found &lt;a href="http://www.deltopia.com/"&gt;DeltaWalker&lt;/a&gt; where I can do waht I want. But the best of all is:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;DeltaWalker is an Eclipse RCP Application :-)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;...and available for OSX, Windows, Linux. Now it was easy to see if the generated code is the same as before:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Create a &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;File - Filter&lt;/span&gt;, where lines of different generation timestamps are identical:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/ST9_AfkrQNI/AAAAAAAAAXU/h6Uicf4uQFY/s1600-h/filefilter.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/ST9_AfkrQNI/AAAAAAAAAXU/h6Uicf4uQFY/s400/filefilter.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5278076934753566930" style="cursor: pointer; width: 377px; height: 348px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Create a &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Folder- Filter &lt;/span&gt;ignoring OSX-specific .DS_Store Files:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/ST9_AlCCd1I/AAAAAAAAAXc/WpQ1ME4qS40/s1600-h/folderfilter.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/ST9_AlCCd1I/AAAAAAAAAXc/WpQ1ME4qS40/s400/folderfilter.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5278076936218900306" style="cursor: pointer; width: 400px; height: 293px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then hitting &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Compare&lt;/span&gt;::&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/ST9_AgOCplI/AAAAAAAAAXk/hR2Z3FuFAU8/s1600-h/nothing+found.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/ST9_AgOCplI/AAAAAAAAAXk/hR2Z3FuFAU8/s400/nothing+found.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5278076934927066706" style="cursor: pointer; width: 400px; height: 174px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All the same :-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;congratulations openArchitectureWare&lt;/span&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/ST9_OUtrQxI/AAAAAAAAAX0/a52fTmfAdX8/s1600-h/oaw-logo.gif"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/ST9_OUtrQxI/AAAAAAAAAX0/a52fTmfAdX8/s400/oaw-logo.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5278077172356694802" style="cursor: pointer; width: 161px; height: 81px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- in all my projects no differences found between 4.3.0 and 4.3.1RC2 after re - generation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Without the File - Filter DeltaWalker lists the differences:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/ST9_ALFK2JI/AAAAAAAAAXM/F6wzHbR2zrQ/s1600-h/differences+found.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/ST9_ALFK2JI/AAAAAAAAAXM/F6wzHbR2zrQ/s400/differences+found.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5278076929252710546" style="cursor: pointer; width: 400px; height: 230px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;...think that &lt;span class="Apple-style-span" style="font-style: italic;"&gt;DeltaWalker&lt;/span&gt; will be a good helper and a great example for RCP Apps.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/ST9_IzOV2PI/AAAAAAAAAXs/PEikfHkmyGQ/s1600-h/de.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/ST9_IzOV2PI/AAAAAAAAAXs/PEikfHkmyGQ/s400/de.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5278077077467551986" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width: 16px; height: 11px; " /&gt;&lt;/a&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;a href="http://ekkes-ecke.org"&gt;blog in german&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-2216596698859430974?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=2216596698859430974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/2216596698859430974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/2216596698859430974'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/12/comparing-files-and-folders-after.html' title='Comparing Files And Folders After Codegeneration'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Xv6Yjx9z9no/ST9-90NW4wI/AAAAAAAAAXE/NJMtSlSbyt8/s72-c/compare+folders.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-4848621450325467416</id><published>2008-12-04T20:23:00.015+01:00</published><updated>2008-12-04T21:05:03.361+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EasyBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGI'/><title type='text'>Properties in OSGI Declarative Services and ServiceTracker</title><content type='html'>&lt;div style="text-align: left;"&gt;As proposed in my last blog "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;a href="http://ekkes-corner.blogspot.com/2008/12/dependencies-and-services-in-osgi.html"&gt;Dependencies and Services in OSGI Enterprise Applications&lt;/a&gt;&lt;/span&gt;" it seems that a new blog series was started ;-)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;ServiceTracker vs Declarative Services&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There was only a short statement last time - now some tips follow how to use properties in ServiceTracker vs Declarative Services (DS).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ServiceTracker&lt;/span&gt; from my OSGI Server project was opened with this Filter: &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;final String filterPool = "("&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;+Constants.OBJECTCLASS&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;+ "="&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;+ JDBCPoolComponent.class.getName()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;+")";&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So the ServiceTracker will get Services of Type &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;JDBCPoolComponent&lt;/span&gt; - we are interested into the attribut &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;JndiName&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;private void processDataSources(JDBCPoolComponent service) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;if (service.getJndiName().equals("foo_entity_data_source_hsql")) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;// do something&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;How could this be done using Declarative Services (&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;equinox.ds&lt;/span&gt;): &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We're defining a reference to get exactly one specific service of type &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;JDBCPoolComponent&lt;/span&gt; to know that a DataSource is ready. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A first idea to declare this reference could be:&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/STg2j_mo4QI/AAAAAAAAAWs/v7Vu0BXvt4w/s1600-h/reference1.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/STg2j_mo4QI/AAAAAAAAAWs/v7Vu0BXvt4w/s400/reference1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5276026955461353730" style="cursor: pointer; width: 400px; height: 72px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Launching the OSGI application, but the reference wasn't resolved. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;How could we find the reason ? At first we should test if the Filter is correct and there's no typo in the Interface.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Tip: Use of Equinox OSGI Console to test the Filter !&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Try this command:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;services (&amp;amp;(objectclass=org.ow2.easybeans.component.jdbcpool.JDBCPoolComponent)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;(jndiName=foo_entity_data_source_hsql))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But no Service was found: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;No registered Services.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As next we try only to look for Services of Interface &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;JDBCPoolComponent&lt;/span&gt;. Now our command looks like: &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;services (objectclass=org.ow2.easybeans.component.jdbcpool.JDBCPoolComponent)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some Services were listet - we also see the one we're looking for:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;{org.ow2.easybeans.component.jdbcpool.JDBCPoolComponent}={classname=org.ow2.easybeans.component.jdbcpo......, xmlconfig=&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  Registered by bundle: .../easybeans-component-jdbcpool_1.1.0-M3-SNAPSHOT.jar/&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Analyzing the printed text we found:&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; jndiName="foo_entity_data_source_hsql"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;But there's a small difference: its the Property &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;xmlconfig&lt;/span&gt; containing the informations. Thats the solution:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;services (&amp;amp;(objectclass=org.ow2.easybeans.component.jdbcpool.JDBCPoolComponent)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;(xmlconfig=*foo_entity_data_source_hsql*))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Service we want to reference will be found and we know how to declare the reference inside the Service Component:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); text-decoration: underline;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); "&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/STg2kIivdyI/AAAAAAAAAW0/0XnN2tlmbCw/s1600-h/reference2.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/STg2kIivdyI/AAAAAAAAAW0/0XnN2tlmbCw/s400/reference2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5276026957860927266" style="cursor: pointer; width: 400px; height: 72px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Why can the ServiceTracker use  &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;getJndiName()&lt;/span&gt;, but the target Filter can't ?&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;getJndiName()&lt;/span&gt; is a Methode of &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;JDBCPoolComponent&lt;/span&gt;, but JndiName isn't registered as Service Property ! &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Target Filter cannot access methods of implementation - only Service Properties. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You maybe run into this using 3rdParty bundles where you have to live with their services as-is. If you're in luck its Open Source, you write a Bugzilla or &lt;a href="http://jira.easybeans.org/browse/EZB-324"&gt;JIRA and get it fixed in hours&lt;/a&gt; :-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Remark:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;You can take a look at my blog series about "&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;OSGI Enterprise Applications&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;" - the index is in the column right beside &lt;/span&gt;&lt;a href="http://ekkes-corner.blogspot.com/"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;this blog&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;There are also some &lt;/span&gt;&lt;a href="https://www.eclipsecon.org/submissions/2009/search.php?search=ekkehard"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;submissions for EclipseCon 2009&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; - if you want to hear more about: comments are welcome ;-)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/STg3eSJtHEI/AAAAAAAAAW8/_-Y40B1Yodg/s1600-h/de.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/STg3eSJtHEI/AAAAAAAAAW8/_-Y40B1Yodg/s400/de.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5276027956872682562" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width: 16px; height: 11px; " /&gt;&lt;/a&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;blog in &lt;/span&gt;&lt;/span&gt;&lt;a href="http://ekkes-ecke.org/"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;german&lt;/span&gt;&lt;/span&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/5484177613731225131-4848621450325467416?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=4848621450325467416' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/4848621450325467416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/4848621450325467416'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/12/properties-in-osgi-declarative-services.html' title='Properties in OSGI Declarative Services and ServiceTracker'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xv6Yjx9z9no/STg2j_mo4QI/AAAAAAAAAWs/v7Vu0BXvt4w/s72-c/reference1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-8399620703081891056</id><published>2008-12-02T20:46:00.018+01:00</published><updated>2008-12-02T22:53:16.960+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDE'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGI'/><category scheme='http://www.blogger.com/atom/ns#' term='openArchitectureWare'/><title type='text'>Dependencies and Services in OSGI Enterprise Applications</title><content type='html'>&lt;div&gt;A busy week has started again:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Refactoring my OSGI Enterprise Server: Using &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Declarative Services&lt;/span&gt; instead of &lt;span class="Apple-style-span" style="font-style: italic;"&gt;ServiceTracker&lt;/span&gt; where possible. (I'll report soon in my other blog series)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://voelterblog.blogspot.com/2008/12/openarchitectureware-431-rc1-available.html"&gt;openArchitectureWare 4.3.1RC1&lt;/a&gt; is published and has to be tested against my many modeling templates&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Some more tests using &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Eclipse 3.5M3&lt;/span&gt;: PDE - supporting Declarative Services and  Cycles in 3rd Party Bundles&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Development of a new soon-coming project: &lt;span class="Apple-style-span" style="font-style: italic;"&gt;redView&lt;/span&gt; (Riena - EMF - Dynamic Views) and integration of these dynamic view models into my modeling workflow&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But now lets start and report some of my experiences of:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Dependencies and Services in OSGI Enterprise Applications&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you follow my blog series „&lt;span class="Apple-style-span" style="font-style: italic;"&gt;HowTo Build an OSGI Enterprise Server&lt;/span&gt;“, you probably have read in&lt;a href="http://web.mac.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2008/11/21_HowTo_Build_an_OSGI_Enterprise_Server%3A_EasybeansServiceTracker.html"&gt; &lt;/a&gt;&lt;a href="http://ekkes-corner.blogspot.com/2008/11/howto-build-osgi-enterprise-server_21.html"&gt;the last entry&lt;/a&gt; that its difficult to use a &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ServiceTracker&lt;/span&gt; with much logic and dependencies inside. Its not so hard to make it run, but hard to manage all the dynamic of an OSGI application. So the next task is to use &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Declarative Services&lt;/span&gt; instead as possible to solve the requirements. While working in this area I noticed some points I want to blog about.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;PDE Tooling&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is really the first what happens: you'll miss the comfortable PDE tooling.&lt;/div&gt;&lt;div&gt;You have to describe the service components in a XML file without support:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/STWiH9bbB4I/AAAAAAAAAVc/P23wnYnv5pM/s1600-h/component-xml.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/STWiH9bbB4I/AAAAAAAAAVc/P23wnYnv5pM/s400/component-xml.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5275300796166768514" style="cursor: pointer; width: 400px; height: 154px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;... and also an entry in the MANIFEST.MF as reference to this file:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/STWiIQhDv7I/AAAAAAAAAVk/XRPgpvru4Xg/s1600-h/MF-service-component.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/STWiIQhDv7I/AAAAAAAAAVk/XRPgpvru4Xg/s400/MF-service-component.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5275300801290682290" style="cursor: pointer; width: 393px; height: 179px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Good news: Dopwnload and test Eclipse 3.5M3: PDE Tooling supports now Declarative Services :-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/STWiIlnG79I/AAAAAAAAAVs/r40IjURcvOs/s1600-h/pde-ds-editor.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/STWiIlnG79I/AAAAAAAAAVs/r40IjURcvOs/s400/pde-ds-editor.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5275300806953201618" style="cursor: pointer; width: 400px; height: 324px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Managing Dependencies&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Under OSGI the management of dependencies is very important and fundamental to get a well structured application achitecture.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We already know dependencies using &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Import-Package&lt;/span&gt; or &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Require-Bundle&lt;/span&gt;. We can also look at these dependencies from inside eclipse.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The classic way as Plug-In - Dependencies:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/STWiJe4YYsI/AAAAAAAAAV8/IUO06w6xAiA/s1600-h/plugin-dependencies.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/STWiJe4YYsI/AAAAAAAAAV8/IUO06w6xAiA/s400/plugin-dependencies.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5275300822326469314" style="cursor: pointer; width: 400px; height: 165px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;or the easy to understand visuell way:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/STWiJO1YWGI/AAAAAAAAAV0/oBD8RwvErV4/s1600-h/graph+plugin.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/STWiJO1YWGI/AAAAAAAAAV0/oBD8RwvErV4/s400/graph+plugin.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5275300818018916450" style="cursor: pointer; width: 400px; height: 153px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;(here's the &lt;a href="http://download.eclipse.org/eclipse/pde/incubator/visualization/site"&gt;Updatesite&lt;/a&gt; from &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Graph Visualization Plug-In&lt;/span&gt;)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But &lt;span class="Apple-style-span" style="font-style: italic;"&gt;bundle - dependencies&lt;/span&gt; are only one part - we're missing the &lt;span class="Apple-style-span" style="font-style: italic;"&gt;service - dependencies&lt;/span&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you look at the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;DataSource&lt;/span&gt; example from above:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/STWiRUA9cAI/AAAAAAAAAWE/zWtcuWZPrSw/s1600-h/datasource-dependencies.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/STWiRUA9cAI/AAAAAAAAAWE/zWtcuWZPrSw/s400/datasource-dependencies.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5275300956848615426" style="cursor: pointer; width: 209px; height: 84px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are no more bundle dependencies ? Indirectly we have dependencies from Declarative Services: The &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;DataSourceService&lt;/span&gt; will only be provided if exactly one service of Type &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Ejb3ServerComponentsService&lt;/span&gt; and one service of type &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;JDBCPoolComponent&lt;/span&gt; is available. These two referenced services are declared in two other bundles.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If our declarative Service Component would include &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;bind&lt;/span&gt; / &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;unbind&lt;/span&gt; methods, then we would have &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Import-Package&lt;/span&gt; dependencies.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Till now I couldn't find a tool displaying service - dependencies in a visual graph.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And if you think more about service - dependencies: there are some different strategies to use services and you can even mix them in one application:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Declarative Services&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ServiceTracker&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.eclipse.org/Riena_Getting_Started_with_injecting_services_and_extensions"&gt;Riena-Service-Injection&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As an Software Architekt I like to get an overview of used Bundles, Services and dependencies. Because there's no tool to show the existing dependencies I'll come the way from another direction: my server project is model-driven, so I can model service - dependencies and -strategies :-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/STWiRSU3T8I/AAAAAAAAAWM/Bj3anAU9XiE/s1600-h/oaw-logo.gif"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/STWiRSU3T8I/AAAAAAAAAWM/Bj3anAU9XiE/s400/oaw-logo.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5275300956395229122" style="cursor: pointer; width: 161px; height: 81px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;using &lt;a href="http://www.openarchitectureware.org/"&gt;openArchitectureWare&lt;/a&gt; I'll then generate service - components in XML - files or Javacode for ServiceTracker or Riena - Injection ...&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This will be part of another blog ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;debug - trace - log Declarative Services&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While refactoring my project of course from time to time I reached a point asking why a specific declarative service reference is not resolved from eqinox.ds ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With the help from Equinox - Newsgroup and some searches I learned some important System Properties I didn't found in the Eclipse Help or Equinox Wiki:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;equinox.ds.debug=true&lt;/span&gt; switch debugmode on &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;equinox.ds.print=true&lt;/span&gt; prints the trace-logs on the console. I dont need it because I catch the OSGI LogServices and log them by myself.(s.a. blog series Logging)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;equinox.ds.perf=true&lt;/span&gt; logs the execution times in ms&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;equinox.scr.waitTimeOnBlock=10000&lt;/span&gt; how many ms should equinox.ds wait until a service component is ready. Was very helpful because 10000 ms is default and some  3rdParty components need more then 50000 ms in DEBUG log - mode.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;ServiceTracker vs Declarative Services&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Can a Service Tracker completely be replaced by Declarative Services ? No - this isn't always possible. &lt;/div&gt;&lt;div&gt;One example: Using a &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ServiceTracker&lt;/span&gt; you can get access to all methods of a service - using &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Declarative Services&lt;/span&gt; instead you can only use service properties in &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;target&lt;/span&gt; - filters.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;...enough for the first blog about Declarative Services - there are so many things to talk about in this context, so I can imagine to start a blog series about this - but at first I have to finish the already started blog series ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can take a look at my blog series about &lt;span class="Apple-style-span" style="font-style: italic;"&gt;OSGI Enterprise Applications&lt;/span&gt; - the index is in the column right beside this blog.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are also some &lt;a href="https://www.eclipsecon.org/submissions/2009/search.php?search=ekkehard"&gt;submissions&lt;/a&gt; for EclipseCon 2009 - if you want to hear more about: comments are welcome ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/STWiZcUIJrI/AAAAAAAAAWU/C2jqSUEr_Ww/s1600-h/de.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/STWiZcUIJrI/AAAAAAAAAWU/C2jqSUEr_Ww/s400/de.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5275301096515446450" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width: 16px; height: 11px; " /&gt;&lt;/a&gt;&lt;div&gt;blog in &lt;a href="http://ekkes-ecke.org/"&gt;german&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/5484177613731225131-8399620703081891056?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=8399620703081891056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/8399620703081891056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/8399620703081891056'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/12/dependencies-and-services-in-osgi.html' title='Dependencies and Services in OSGI Enterprise Applications'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xv6Yjx9z9no/STWiH9bbB4I/AAAAAAAAAVc/P23wnYnv5pM/s72-c/component-xml.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-218457395120929139</id><published>2008-11-21T20:55:00.016+01:00</published><updated>2008-11-21T21:22:44.985+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Riena'/><category scheme='http://www.blogger.com/atom/ns#' term='EasyBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGI'/><title type='text'>HowTo Build an OSGI Enterprise Server: EasybeansServiceTracker</title><content type='html'>&lt;div&gt;We've seen that its not easy to use EasyBeans OSGI - you have to be very carefully how to start bundles, watch many dependencies etc. So we created a „&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Server - Agent&lt;/span&gt;“ - bundle to control and manage these tasks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This „&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Server - Agent&lt;/span&gt;“ - bundle contains an &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;EasybeansServiceTracker&lt;/span&gt; we'll discuss now. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At first we must be sure that all EasyBeans Components are started - there's an easybeans.agent bundle controlling this. EasyBeans Components are:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SScS3Jg-fcI/AAAAAAAAAVE/y8T8KLGTZcA/s1600-h/EZBComponentFactories.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SScS3Jg-fcI/AAAAAAAAAVE/y8T8KLGTZcA/s400/EZBComponentFactories.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5271202627516792258" style="cursor: pointer; width: 400px; height: 66px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Which of these EasyBeans Components you need depends from your reqirements - in this blog series we'll only look at the EJB3 Container.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One component is important in our use case: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;JDBCPool&lt;/span&gt; registers data sources as JNDI names and this must be done before EasyBeans can manage the "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;EJB - bundles&lt;/span&gt;".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SScS2aIJCCI/AAAAAAAAAU0/CuMnBEj68lE/s1600-h/tracker1.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SScS2aIJCCI/AAAAAAAAAU0/CuMnBEj68lE/s400/tracker1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5271202614796159010" style="cursor: pointer; width: 314px; height: 400px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If we're sure that all EZB Components are registered and also the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;JDBCPool&lt;/span&gt; Component has registered all data sources, then we can start our  „&lt;span class="Apple-style-span" style="font-style: italic;"&gt;PersistenceContext - Bundles&lt;/span&gt;“ and „&lt;span class="Apple-style-span" style="font-style: italic;"&gt;EJB - Bundles&lt;/span&gt;“. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While creating an EJB3 - Container for each of our „&lt;span class="Apple-style-span" style="font-style: italic;"&gt;PersistenceContext - Bundles&lt;/span&gt;“ and each of our „&lt;span class="Apple-style-span" style="font-style: italic;"&gt;EJB - Bundles&lt;/span&gt;“ EasyBeans registers for each Business - Interface (&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;@Local&lt;/span&gt;, &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;@Remote&lt;/span&gt;) a &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ManagedService&lt;/span&gt;. The &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;EasybeansServiceTracker&lt;/span&gt; tracks all Remote - Business - Interfaces and registers them as Riena Remote Endpoints.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When the EJB3 Container is completed from EasyBeans - an &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;EZBContainerService&lt;/span&gt; will be registered. After checking that &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;EZBContainerServices&lt;/span&gt; are registered for all of our EJB - Bundles we can register the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;RienaEasyBeansServerService&lt;/span&gt;: our Server it ready.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SScS2_YCCgI/AAAAAAAAAU8/Q3Zq5IyT7sU/s1600-h/tracker2.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SScS2_YCCgI/AAAAAAAAAU8/Q3Zq5IyT7sU/s400/tracker2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5271202624794921474" style="cursor: pointer; width: 400px; height: 391px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;EasybeansServiceTracker&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;You'll have some logic like this in your Tracker:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SScX2tg10oI/AAAAAAAAAVM/W2XmfDkU5oM/s1600-h/addingService.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SScX2tg10oI/AAAAAAAAAVM/W2XmfDkU5oM/s400/addingService.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5271208117558170242" style="cursor: pointer; width: 340px; height: 400px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Is the use of a ServiceTracker the best solution ?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At first it looks good to have all the logic around the EasyBeans EJB3Container at a central point in our &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;EasybeansServiceTracker&lt;/span&gt; - and it works well.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Analyzing it in more detail you'll find out that its very complex and difficult to manage - even thinking on multi-threading. Also: does it look like the nature of a dynamic and flexible OSGI solution ? How to react if bundles or services are stopped and started again ?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But there's an alternative way: we'll look again how to solve the EJB3 - Container in our OSGI Enterprise Application using &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Declarative Services.&lt;/span&gt; Then you can decide what you prefer to use: ServiceTracker or Declarative Services.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There's an this index of this blog series in the column right beside the blog entries.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SScYRo6uDnI/AAAAAAAAAVU/vTxGIuMHS48/s1600-h/de.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SScYRo6uDnI/AAAAAAAAAVU/vTxGIuMHS48/s400/de.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5271208580181003890" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width: 16px; height: 11px; " /&gt;&lt;/a&gt;&lt;div&gt;blog in &lt;a href="http://ekkes-ecke.org/"&gt;german&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/5484177613731225131-218457395120929139?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=218457395120929139' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/218457395120929139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/218457395120929139'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/11/howto-build-osgi-enterprise-server_21.html' title='HowTo Build an OSGI Enterprise Server: EasybeansServiceTracker'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Xv6Yjx9z9no/SScS3Jg-fcI/AAAAAAAAAVE/y8T8KLGTZcA/s72-c/EZBComponentFactories.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-8068088663257509173</id><published>2008-11-17T18:03:00.004+01:00</published><updated>2008-11-17T18:13:32.329+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Going to Eclipse Summit</title><content type='html'>Same procedure as every year going to Eclipse Summit or EclipseCon:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Because my OSGI Enterprise solution needs it all:&lt;/div&gt;&lt;div&gt;Equinox, OSGI, Riena, RCP, Modeling (oAW, EMF, UML), UI, PDE, P2, ....&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;...its so hard to decide which of the sessions to choose ;-)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'll arrive Tuesday evening - so I can't go to the e4 and RT Symposium&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hope to see some of you in Ludwigsburg&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ekke&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-8068088663257509173?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=8068088663257509173' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/8068088663257509173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/8068088663257509173'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/11/going-to-eclipse-summit.html' title='Going to Eclipse Summit'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-2542015330755395467</id><published>2008-11-17T13:11:00.015+01:00</published><updated>2008-11-17T13:39:29.992+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Riena'/><category scheme='http://www.blogger.com/atom/ns#' term='EasyBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGI'/><title type='text'>HowTo Build an OSGI Enterprise Server: EJB3 Container</title><content type='html'>This entry of my blog series „&lt;span style="font-style: italic;"&gt;HowTo build an OSGI Enterprise Server&lt;/span&gt;“ will talk about the „&lt;span style="font-style: italic;"&gt;EJB3 Container&lt;/span&gt;“ managed by EasyBeans. EasyBeans uses by default Felix as OSGI Framework - this blog series describes how to use it all under Eclipse Equinox together with Eclipse Riena.&lt;br /&gt;&lt;br /&gt;You have to follow some rules how to start the OSGI application: start - levels, start - order, automatic-start ... Please read important instructions in chapter  „&lt;span style="font-style: italic;"&gt;Server starten&lt;/span&gt;“. A short overview:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SSFgkOT0jwI/AAAAAAAAAUM/nCPGtHi14fY/s1600-h/server_starten.png"&gt;&lt;img style="cursor: pointer; width: 348px; height: 400px;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SSFgkOT0jwI/AAAAAAAAAUM/nCPGtHi14fY/s400/server_starten.png" alt="" id="BLOGGER_PHOTO_ID_5269599214432980738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Our OSGI Enterprise application automatically starts a „&lt;span style="font-style: italic;"&gt;Server Agent - Bundle&lt;/span&gt;“ - this agent contains an OSGI Service Tracker watching if EasyBeans initializes all EJB3 Container to see when all is ready.&lt;br /&gt;&lt;br /&gt;We also start our domain-specific „&lt;span style="font-style: italic;"&gt;Server Bundles&lt;/span&gt;“ which are tracking to see if our ServerService is registered from „&lt;span style="font-style: italic;"&gt;Server Agent&lt;/span&gt;“ Bundle.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Server - Agent - Bundle and Server - Bundles&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SSFgkBnEmhI/AAAAAAAAAUU/LcmSnjIMFS4/s1600-h/server_bundles.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 139px;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SSFgkBnEmhI/AAAAAAAAAUU/LcmSnjIMFS4/s400/server_bundles.png" alt="" id="BLOGGER_PHOTO_ID_5269599211024062994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Our (domain-specific) „&lt;span style="font-style: italic;"&gt;Server - Bundles&lt;/span&gt;“ and the „&lt;span style="font-style: italic;"&gt;Server - Agent - Bundle&lt;/span&gt;“ are started automatically using Default - Start - Level (in our example Level 3).&lt;br /&gt;&lt;br /&gt;The „&lt;span style="font-style: italic;"&gt;Server - Bundles&lt;/span&gt;“ are waiting until a &lt;span style="font-family: courier new;"&gt;RienaEasyBeansServerService&lt;/span&gt; signals, that our Server with Riena- and EasyBeans - Functionality is available.&lt;br /&gt;&lt;br /&gt;The most important dependencies of our „&lt;span style="font-style: italic;"&gt;Server - Agent&lt;/span&gt;“ - Bundle:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SSFgkem_zBI/AAAAAAAAAUc/bxr8Xu2vSL0/s1600-h/server_agent_dependencies.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 206px;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SSFgkem_zBI/AAAAAAAAAUc/bxr8Xu2vSL0/s400/server_agent_dependencies.png" alt="" id="BLOGGER_PHOTO_ID_5269599218808376338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The „&lt;span style="font-style: italic;"&gt;Server - Agent&lt;/span&gt;“&lt;br /&gt;&lt;ul&gt;&lt;li&gt;tracks Services from EasyBeans using an EasybeansServiceTracker&lt;/li&gt;&lt;li&gt;registers Remote - „Business - Interfaces“ for Riena - Remoting&lt;/li&gt;&lt;li&gt;registers RienaEasyBeansServerService when or server is available&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;EasybeansServiceTracker - Filter&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;An OSGI &lt;span style="font-family: courier new;"&gt;ServiceTracker&lt;/span&gt; should only track needed Services - so we have to define a &lt;span style="font-family: courier new;"&gt;Filter&lt;/span&gt; used as Parameter creating a new ServiceTracker. The Filter:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;(|(objectClass=org.osgi.service.cm.ManagedServiceFactory)(objectClass=org.ow2.easybeans.api.EZBContainer)(objectClass=org.ow2.easybeans.component.jdbcpool.JDBCPoolComponent)(service.pid=*RemoteManagerI*Bean))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What kind of OSGI Services we'll get using this Filter ?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ManagedServiceFactory:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;EasyBeans registers for each EasyBeans Component a Service of Type &lt;span style="font-family: courier new;"&gt;ManagedServiceFactory&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{org.osgi.service.cm.ManagedServiceFactory}=&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{service.pid=org.ow2.easybeans.component.carol.carolcomponent,..&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Registered by bundle:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;...easyBeans/bundles/easybeans-component-carol_1.1.0-...jar&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Bundles using service:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.../org.eclipse.equinox.cm_1.0.0.v20080509-1800.jar&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.../org.ekkehard.server.agent_1.0.0.jar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Tracking these Services we can test if all EasyBeans Components are correct initialized.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EZBContainer:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After successfully processing our „&lt;span style="font-style: italic;"&gt;EJB - Bundles&lt;/span&gt;“ and „&lt;span style="font-style: italic;"&gt;PersistenceContext - Bundles&lt;/span&gt;“ from EasyBeans a Service of Type &lt;span style="font-family: courier new;"&gt;EZBContainer&lt;/span&gt; is registered:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{org.ow2.easybeans.api.EZBContainer}={service.id=103}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Registered by bundle: .../org.ekkehard.foo.datamanager.bean_1.0.0.jar&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Bundles using service:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.../easybeans-core_1.1.0-M3-SNAPSHOT.jar&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.../org.ekkehard.server.agent_1.0.0.jar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Tracking these Services we know, that EasyBeans has created an &lt;span style="font-family: courier new;"&gt;EJB3Container&lt;/span&gt; for our Bundle - and if its a „&lt;span style="font-style: italic;"&gt;PersistenceContext - Bundle&lt;/span&gt;“ then we also know, that  Hibernate has done all the Mapping and Binding.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;JDBCPoolComponent:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;EasyBeans &lt;span style="font-family: courier new;"&gt;JDBCPoolComponent&lt;/span&gt; registers always after initializing a DataSource an OSGI Service of Type &lt;span style="font-family: courier new;"&gt;JDBCPoolComponent&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{org.ow2.easybeans.component.api.EZBComponent,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;org.ow2.easybeans.component.jdbcpool.JDBCPoolComponent}=&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{... jndiName="foo_data_source_hsql"....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Using the Property &lt;span style="font-family: courier new;"&gt;jndiName&lt;/span&gt; we can test if our DataSource is available.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;service.pid:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We also filter Services containing a &lt;span style="font-family: courier new;"&gt;service.pid&lt;/span&gt; of our pattern for Remote - Business - Interfaces: „&lt;span style="font-family: courier new;"&gt;*RemoteManagerI*Bean&lt;/span&gt;“. The pattern depends from your naming schema.&lt;br /&gt;&lt;br /&gt;Tracking those Services will give us OSGI Services of Type &lt;span style="font-family: courier new;"&gt;ManagedService&lt;/span&gt;. The we do some additional testing to see if some Properties are set from EasyBeans. If true, we know that its a ManagedService created by EasyBeans for one of our &lt;span style="font-family: courier new;"&gt;@Remote&lt;/span&gt; - „&lt;span style="font-style: italic;"&gt;Business - Interfaces&lt;/span&gt;“.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SSFgkjOajkI/AAAAAAAAAUk/geWjL0mDItg/s1600-h/filterManagedServiceFactory.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 66px;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SSFgkjOajkI/AAAAAAAAAUk/geWjL0mDItg/s400/filterManagedServiceFactory.png" alt="" id="BLOGGER_PHOTO_ID_5269599220047449666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now we can register this &lt;span style="font-family: courier new;"&gt;@Remote &lt;/span&gt;- „&lt;span style="font-style: italic;"&gt;Business - Interface&lt;/span&gt;“ for Riena Remoting, to provide a Riena Published Endpoint for our Rich Clients.&lt;br /&gt;&lt;br /&gt;This is also the reason why the „&lt;span style="font-style: italic;"&gt;Server - Agent - Bundle&lt;/span&gt;“ needs Package-Import-Dependencies to our „&lt;span style="font-style: italic;"&gt;Business - Interface - Bundles&lt;/span&gt;“ - if you dont use Riena, then you dont need these dependencies.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;RienaEasyBeansServerService&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If all tracking was successfully, then our „&lt;span style="font-style: italic;"&gt;Server - Agent - Bundle&lt;/span&gt;“ registers an &lt;span style="font-family: courier new;"&gt;RienaEasyBeansServerService&lt;/span&gt; as OSGI Service. Because this Service will also be registered as Riena Remote Endpoint, our „&lt;span style="font-style: italic;"&gt;Server - Bundles&lt;/span&gt;“ and also our „&lt;span style="font-style: italic;"&gt;Rich Client - Bundles&lt;/span&gt;“ can track if the Server of a specific domain is live and ready-to-go.&lt;br /&gt;&lt;br /&gt;When knows the „&lt;span style="font-style: italic;"&gt;Server - Agent&lt;/span&gt;“ that all was successfully processed ?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;All EasyBeans Components are initialized&lt;/li&gt;&lt;li&gt;All DataSources are avilable&lt;/li&gt;&lt;li&gt;All EJB Container are available&lt;/li&gt;&lt;/ul&gt;There are some special tricks how to track and test and start bundles - but this will be part of the next blog.&lt;br /&gt;&lt;br /&gt;There's an this index of this blog series in the column right beside the blog entries.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SSFgvwW0D3I/AAAAAAAAAUs/N6I1gqxScfA/s1600-h/de.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 16px; height: 11px;" src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SSFgvwW0D3I/AAAAAAAAAUs/N6I1gqxScfA/s400/de.png" alt="" id="BLOGGER_PHOTO_ID_5269599412550897522" border="0" /&gt;&lt;/a&gt; blog in &lt;a href="http://ekkes-ecke.org"&gt;german&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-2542015330755395467?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=2542015330755395467' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/2542015330755395467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/2542015330755395467'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/11/howto-build-osgi-enterprise-server-ejb3.html' title='HowTo Build an OSGI Enterprise Server: EJB3 Container'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Xv6Yjx9z9no/SSFgkOT0jwI/AAAAAAAAAUM/nCPGtHi14fY/s72-c/server_starten.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-7765258909780181204</id><published>2008-11-12T20:58:00.012+01:00</published><updated>2008-11-14T15:29:56.409+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EasyBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGI'/><category scheme='http://www.blogger.com/atom/ns#' term='openArchitectureWare'/><title type='text'>HowTo Build an OSGI Enterprise Server: Entity- and EJB- Bundles</title><content type='html'>&lt;div&gt;This part of the blog series „&lt;span class="Apple-style-span" style="font-style: italic;"&gt;HowTo build an OSGI Enterprise Server&lt;/span&gt;“ will take a look at the different types of bundles we provide to the EJB3 container. The next chapter „&lt;span class="Apple-style-span" style="font-style: italic;"&gt;EJB3 Container“&lt;/span&gt; will show you how to use an OSGI ServiceTracker to start and initialize all the right way.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;How to divide Entities and EJBs in Bundles&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;BTW: you should have knowledge about EJB3 and Annotations. The structure used in this server is only an example and your implementation perhaps is different. We can talk about these issues later after publishing source code. Also you can use Eclipse Link as JPA provider instead of Hibernate - EasyBeans can work with both.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We're using following types of bundles:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Entity - Bundles&lt;br /&gt;&lt;/li&gt;&lt;li&gt;EJB - Bundles&lt;br /&gt;&lt;/li&gt;&lt;li&gt;PersistenceContext - Bundles &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Business Interface - Bundles &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SRs4UAgDaTI/AAAAAAAAATU/QbE6CKdkL2c/s1600-h/entity_ejb.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SRs4UAgDaTI/AAAAAAAAATU/QbE6CKdkL2c/s400/entity_ejb.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5267866105522907442" style="cursor: pointer; width: 400px; height: 282px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Entity - Bundles&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;@Entity, @Embeddable&lt;/div&gt;&lt;div&gt;You can use as much Entity - Bundles as you want - perhaps structured vertical for your different domains. These Entity - Bundles will also be used from our Rich Client, so - if you have bundle dependencies only used at server-side, make them optional.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;EJB - Bundles&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;@Stateless and  @Stateful Beans, implementing Business - Interfaces (@Local, @Remote) depending from your requirements. &lt;/div&gt;&lt;div&gt;These Bundles have dependencies to your Entity - Bundles and to the Business - Interfaces. &lt;/div&gt;&lt;div&gt;Other EJBs from your PersistenceContext - Bundles can be injected like:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;@EJB(mappedName) Business - Interface&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The EJB - Bundles will not be used from Rich Client.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Remark: mappedName must be used at the moment, EZB cannot found the corresponding Business - Interfaces, if they are in different bundles (&lt;/span&gt;&lt;a href="http://jira.easybeans.org/browse/EZB-322"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;JIRA EZB-322&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;PersistenceContext - Bundles&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;@Stateless Beans, containing a PersistenceContext (EntityManager) and - depending from your use-cases - implementing Business - Interfaces (@Local, @Remote).&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;@PersistenceContext(unit-name)&lt;/span&gt; points to your Persistence - Unit.&lt;/div&gt;&lt;div&gt;Each PersistenceContext - Bundle has a &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;persistence.xml&lt;/span&gt; with attributes for the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;persistence-unit&lt;/span&gt; and also &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;jta-data-source&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;PersistenceContext - Bundles need package-imports of the used Entities and  implemented Business - Interfaces.&lt;/div&gt;&lt;div&gt;PersistenceContext - Bundles will not be used at Client-Side.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Remarks: &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;All EJBs, belonging to a peristence-unit, must be in ONE bundle at the moment. (&lt;/span&gt;&lt;a href="http://jira.easybeans.org/browse/EZB-294"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;JIRA EZB-294)&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;The Beans must have an EJB3.mappedName attribute: @Stateless(mappedName), otherwise because of a bug from EasyBeans (&lt;/span&gt;&lt;a href="http://jira.easybeans.org/browse/EZB-322"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;JIRA EZB-322&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;) injected @EJB won't found them.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Inside the persistence.xml all Entity- and Embeddable must be listed as class entries. EasyBeans should found the classes itself because of Annotations, but there's a bug if Entities and EJBs are in different Bundles.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Business Interface - Bundles&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;@Local, @Remote&lt;/div&gt;&lt;div&gt;The Business - Interface - Bundles can be structured and separated as you want - perhaps for different sub-applications or domains or...&lt;/div&gt;&lt;div&gt;These Bundles will also be used from your Rich Client.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;EasyBeans Configuration&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;EasyBeans needs some configuration - data. If you're using an OSGI Framework Configuration you can add a VM argument: &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;-Dorg.ow2.easybeans.osgi.conf.dir=${workspace_loc}/config/easybeans/config &lt;/span&gt;&lt;/div&gt;&lt;div&gt;In this config folder you must store the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;easybeans.xml&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;This easybeans.xml contains &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;jdbcpool jndiName&lt;/span&gt; entries for each of your  Data - Sources. These values are identical with the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;jta-data-source&lt;/span&gt;, described at your  Persistence Unit inside&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; persistence.xml&lt;/span&gt; of our PersistenceContext - Bundles.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SR2KoaIWNKI/AAAAAAAAAT8/o1DaoZRFxIM/s1600-h/configuration.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SR2KoaIWNKI/AAAAAAAAAT8/o1DaoZRFxIM/s400/configuration.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5268519565907080354" style="cursor: pointer; width: 361px; height: 400px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Remark: The EasyBeans JDBCPool - Component must register first all Data - Sources, before you can start your PersistenceContext - Bundles. s.a. chapter „&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;EJB3 Container&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;“ for details on this.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;openArchitectureWare - always can help if you're in trouble&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This project is model-driven - details about it will be described in another blog series. Here are some small examples showing you, why I never will miss  openArchitectureWare in a project lead by me.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SR2Ko6-Z04I/AAAAAAAAAUE/BaeNsXqZwWo/s1600-h/oaw-logo.gif"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SR2Ko6-Z04I/AAAAAAAAAUE/BaeNsXqZwWo/s400/oaw-logo.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5268519574723744642" style="cursor: pointer; width: 161px; height: 81px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;EasyBeans should recognize @Entity and @Embeddable automagically because of annotations - but it doesnt work through borders of bundles, so all @Entity and @Embeddable - classes have to be listed in your persistence.xml - in my ERP project this means more then 800 classen - and the data model isn't static and grows or changes depending from new use-cases and requirements.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But thanks to openArchitectureWare (oAW) we only need some lines in a template to get the needed output into the persistence.xml:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SRs4U1HnP2I/AAAAAAAAATk/wkLmq_WzQAA/s1600-h/generate-classes-list.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SRs4U1HnP2I/AAAAAAAAATk/wkLmq_WzQAA/s400/generate-classes-list.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5267866119647477602" style="cursor: pointer; width: 400px; height: 89px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;automatically all was generated from oAW and is in sync with your entity data model:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SRs4Tx9lbPI/AAAAAAAAATM/JFSMnIqa_8Y/s1600-h/classes-list.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SRs4Tx9lbPI/AAAAAAAAATM/JFSMnIqa_8Y/s400/classes-list.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5267866101620239602" style="cursor: pointer; width: 400px; height: 89px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another example: EasyBeans should be able to inject @EJB MyBusinessInterface correctly. But because of a bug this isn't possible if Business Interfaces are in another bundle and so we need the @EJB.mappedName attribute.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But with oAW its also easy: insert some text into a XPand - Template to add this attribute:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SRs4Vcdm59I/AAAAAAAAATs/zCH4h-SpsSI/s1600-h/stateless_mapped.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SRs4Vcdm59I/AAAAAAAAATs/zCH4h-SpsSI/s400/stateless_mapped.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5267866130208712658" style="cursor: pointer; width: 400px; height: 113px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;... and in your Business Interface:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SRs4UuduGPI/AAAAAAAAATc/ZDqvlFuzYSI/s1600-h/ezb_mapped_name_constant.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SRs4UuduGPI/AAAAAAAAATc/ZDqvlFuzYSI/s400/ezb_mapped_name_constant.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5267866117861153010" style="cursor: pointer; width: 400px; height: 165px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now all Beans get the mappedName attribute, the Business Interfaces get a Constant with this mappedName so you can inject easy:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;@EJB(mappedName = MyInterface.EZB_MAPPED_NAME) MyInterface mi = null;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;These are positive side-effects of model-driven development: developing of workarounds in hundredrs of classes are funny ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;BTW: my whole complex ERP - project would not be possible to be realized from me alone without oAW. You'll hear more about this in another blog series - and of course its your decision if you work model-driven or not - I only can show you my way of working.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SRs5JYVJKxI/AAAAAAAAAT0/_JYMMBIBsVk/s400/de.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5267867022452665106" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width: 16px; height: 11px; " /&gt;&lt;div&gt; blog in &lt;a href="http://ekkes-ecke.org/"&gt;german&lt;/a&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/5484177613731225131-7765258909780181204?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=7765258909780181204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/7765258909780181204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/7765258909780181204'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/11/howto-build-osgi-enterprise-server_12.html' title='HowTo Build an OSGI Enterprise Server: Entity- and EJB- Bundles'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Xv6Yjx9z9no/SRs4UAgDaTI/AAAAAAAAATU/QbE6CKdkL2c/s72-c/entity_ejb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-5361893712353650766</id><published>2008-11-11T13:17:00.009+01:00</published><updated>2008-11-11T13:52:08.971+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Riena'/><category scheme='http://www.blogger.com/atom/ns#' term='EasyBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGI'/><category scheme='http://www.blogger.com/atom/ns#' term='openArchitectureWare'/><title type='text'>HowTo Build An OSGI Enterprise Server: Introduction</title><content type='html'>&lt;div&gt;If you followed my blog series „&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Logging in OSGI Enterprise Applications&lt;/span&gt;“, you probably know that logging is only one small but important aspect of an &lt;a href="http://osgi.org/"&gt;OSGI&lt;/a&gt; Enterprise Server.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This new blog series „&lt;span class="Apple-style-span" style="font-style: italic;"&gt;HowTo Build An OSGI Enterprise Server&lt;/span&gt;“ will give you tips from my experiences how to build and configure an OSGI server, how to structure your project and bundles and how to make it all run.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Main parts of the server are:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/equinox"&gt;Equinox&lt;/a&gt; (OSGI Framework)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/riena"&gt;Riena&lt;/a&gt; (OSGI RemoteServices, ObjectTransactions)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.easybeans.org/"&gt;EasyBeans&lt;/a&gt; (OSGI EJB3 Container, Hibernate JPA)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There will also be a rich client:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Equinox (OSGI Framework)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Eclipse RCP&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Riena (OSGI RemoteServices, ObjectTransactions, UI: Ridgets) &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;(Clients for mobile devices and web will follow.)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Not only the Runtime Platform is important - the whole project is model-driven:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Eclipse Modeling (EMF, UML2)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;openArchitectureWare - oAW (Workflow, XPand, Xtend)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Magicdraw (UML, DSL, oAW Integration)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Server, Client, oAW Templates, MagicDraw Custom DSL Editor will be published as Open Source (EPL) and are used as core of an ERP - Business Solution.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Before giving an overview of the project and then start with chapter „Installation“ I'll jump to chapter „&lt;span class="Apple-style-span" style="font-style: italic;"&gt;EasyBeans as OSGI EJB3 Container integrated with Equinox&lt;/span&gt;“ because I know some are waiting for this.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;From readers of my last blog series I learned that its not always easy to read the entries in right order - to help you I'll always update an index of the blog series. You'll find this index in the column right beside the blog entries.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I hope to help some others with this new blog series and I'm always thankful for your feedback.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Later on blog series will follow "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;HowTo build an OSGI Rich Client&lt;/span&gt;" and also "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Modeling OSGI Client - Server Applications&lt;/span&gt;". &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SRl-djtMnpI/AAAAAAAAATE/L09cuk6r0j0/s400/de.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5267380285452623506" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width: 16px; height: 11px; " /&gt;&lt;div&gt; blog in &lt;a href="http://ekkes-ecke.org/"&gt;german&lt;/a&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/5484177613731225131-5361893712353650766?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=5361893712353650766' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/5361893712353650766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/5361893712353650766'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/11/howto-build-osgi-enterprise-server.html' title='HowTo Build An OSGI Enterprise Server: Introduction'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xv6Yjx9z9no/SRl-djtMnpI/AAAAAAAAATE/L09cuk6r0j0/s72-c/de.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-3494772381239657315</id><published>2008-10-31T15:54:00.003+01:00</published><updated>2008-10-31T16:04:55.643+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Riena'/><category scheme='http://www.blogger.com/atom/ns#' term='EasyBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='SLF4J'/><category scheme='http://www.blogger.com/atom/ns#' term='LOGBack'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGI'/><title type='text'>Index BlogSeries Logging in OSGI Enterprise Applications</title><content type='html'>&lt;div&gt;I got responses that its not easy to read the blog series&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Logging in OSGI Enterprise Applications&lt;/span&gt;" in chronological order.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So here's the index:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Part 1: &lt;a href="http://ekkes-corner.blogspot.com/2008/09/logging-in-osgi-enterprise-applications.html"&gt;An overview&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Part 2: &lt;a href="http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications.html"&gt;How to catch all log events from "classic" logging - frameworks&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Part 3: &lt;a href="http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications_11.html"&gt;How to catch all log events from OSGI Log Services &lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Part 4: &lt;a href="http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications_20.html"&gt;How to start logging bundles the right way inside an OSGI Enterprise application&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Part 5: &lt;a href="http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications_31.html"&gt;Configuration, Fragment-Bundles, Markers&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;...more will follow&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ekke&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-3494772381239657315?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=3494772381239657315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/3494772381239657315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/3494772381239657315'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/10/index-blogseries-logging-in-osgi.html' title='Index BlogSeries Logging in OSGI Enterprise Applications'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-5547068326995735138</id><published>2008-10-31T07:38:00.028+01:00</published><updated>2008-10-31T14:29:24.442+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Riena'/><category scheme='http://www.blogger.com/atom/ns#' term='SLF4J'/><category scheme='http://www.blogger.com/atom/ns#' term='LOGBack'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGI'/><title type='text'>Logging in OSGI Enterprise Applications, Part 5</title><content type='html'>&lt;div&gt;This (fifth) part of my blog series "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Logging in OSGI Enterprise Applications&lt;/span&gt;" will show you some important elements of configuring the logging framework &lt;a href="http://logback.qos.ch/"&gt;LOGBack&lt;/a&gt; we use as &lt;a href="http://www.slf4j.org/"&gt;SLF4J&lt;/a&gt; implementation:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://logback.qos.ch/index.html"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SQrsn4v1DiI/AAAAAAAAAR0/ZFlzJtnaPLY/s400/logbacklogo.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5263279284527894050" style="cursor: pointer; width: 260px; height: 140px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I dont want to talk about the configuration of a logging framework itself - you should be familiar with this. If you're using &lt;a href="http://logback.qos.ch/"&gt;LOGBack&lt;/a&gt; inside an OSGI Enterprise Application there are some special things to watch and problems to solve.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If we're logging in a non-OSGI Java Application we normaly want to know which class logs the event. Logging from an OSGI Enterprise Application its also important to know which bundle causes the LogEvent. Using OSGI LogServices you also have this information from BundleContext..&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Its a good practice to name the Logger with the class name - normaly as static Logger defined in each class. This works with all logging frameworks like Log4J, Commons-Logging, java.util.logging or SLF4J.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using &lt;a href="http://logback.qos.ch/index.html"&gt;SLF4J&lt;/a&gt; as Logging API you can also describe the source of the Log Event more detailed with:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;MDC (Mapped Diagnostic Contexts)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Marker &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;MDC is implemented by Log4J and &lt;a href="http://logback.qos.ch/"&gt;LOGBack&lt;/a&gt;. MDC is great to store informations from a client user session: per ex. Username, IP etc. Its a Map and you're free to store what you like. To  access these informations in the Layout of an Appender is easy: &lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;...N:%X{username}... &lt;/span&gt;&lt;/div&gt;&lt;div&gt;produces&lt;/div&gt;&lt;div&gt;  &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; ...N:JohnDoe...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The LOGBack User Manual chapter 7 (&lt;a href="http://logback.qos.ch/manual/mdc.html"&gt;here&lt;/a&gt;) explains it in detail and gives you some examples.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;Marker and Bundles&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.slf4j.org/apidocs/org/slf4j/Marker.html"&gt;Marker&lt;/a&gt; are part of the &lt;a href="http://www.slf4j.org/apidocs/index.html"&gt;SLF4J API&lt;/a&gt; and they mark (as the name says ;-) Log Messages. At the moment only LOGBack implements Marker.  &lt;/div&gt;&lt;div&gt;From the &lt;a href="http://www.slf4j.org/apidocs/org/slf4j/MarkerFactory.html"&gt;MarkerFactory&lt;/a&gt; for a given String we always get the same Marker: &lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Marker marker = MarkerFactory.getMarker("MyMarker");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Marker can reference other Marker - so you can build an object graph of Marker:&lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Marker special = MarkerFactory.getMarker("special");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;   special.add(MarkerFactory.getMarker("init"))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In our OSGI Enterprise Application we're using Marker to log the Name of the bundle.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SQrsoLckKVI/AAAAAAAAAR8/Ca5VfOSqqb0/s1600-h/bundleMarker.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SQrsoLckKVI/AAAAAAAAAR8/Ca5VfOSqqb0/s400/bundleMarker.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5263279289547368786" style="cursor: pointer; width: 400px; height: 162px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For each bundle we define once (per ex. in the Activator):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;private static final Logger logger = LoggerFactory.getLogger(MyActivator.class);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    public static final String ID = "my.bundle.symbolic.name";&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    public static final Marker bundleMarker = createBundleMarker();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    private static final Marker createBundleMarker() {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        Marker bundleMarker = MarkerFactory.getMarker(ID);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;bundleMarker.add(MarkerFactory.getMarker("IS_MARKER"));&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;return bundleMarker;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In all the other classes of a bundle we define:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;import static MyActivator.bundleMarker;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    private static final Logger logger = LoggerFactory.getLogger(Foo.class);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then the logging statements are looking like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;   &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; logger.debug(bundleMarker,"This is my {} message",xyz);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Remark: LOGBack replaces&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; {}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; with &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;xyz. toString()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. More details later.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To get the marker in the logging - output we can simply use&lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;... %marker ... &lt;/span&gt;&lt;/div&gt;&lt;div&gt;in the Layout of an Appender. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In our application we want to test if a Marker is a BundleMarker and then handle formatting the output different, per ex.: &lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;... - [B:my.symbolic.bundle.name] ...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To do this we have to extend &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ch.qos.logback.classic.pattern.ClassicConverter &lt;/span&gt;and overwrite the methode &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;public String convert(LoggingEvent le)&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In our LOGBack configuration (&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;logback.xml&lt;/span&gt; or &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;logback-test.xml&lt;/span&gt;) we have to insert a new &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ConversionRule&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SQrsogAV-GI/AAAAAAAAASE/pLnp31mpjLU/s1600-h/conversionrule.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SQrsogAV-GI/AAAAAAAAASE/pLnp31mpjLU/s400/conversionrule.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5263279295066142818" style="cursor: pointer; width: 400px; height: 35px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;then we can use it in the Layout of an Appender:&lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;... %bundle ...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;and we get as output&lt;/div&gt;&lt;div&gt;   &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;... - [B:my.symbolic.bundle.name] ...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;or an empty String if the Marker is no BundleMarker.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;Fragment Bundles&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But thats not all - because the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;logback.classic Bundle&lt;/span&gt; doesnt know our &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;BundleConverter&lt;/span&gt; class we need a &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Fragment-Bundle&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SQrsoqM6yJI/AAAAAAAAASM/yhb3VAjTYzg/s1600-h/logback-util-fragment-mf.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SQrsoqM6yJI/AAAAAAAAASM/yhb3VAjTYzg/s400/logback-util-fragment-mf.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5263279297803241618" style="cursor: pointer; width: 400px; height: 117px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;You remember: We already use another Fragment to use our configuration file from Logback Core Bundle:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SQrso5hZKoI/AAAAAAAAASU/NpXcvFNPorI/s1600-h/logback-config-fragment.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SQrso5hZKoI/AAAAAAAAASU/NpXcvFNPorI/s400/logback-config-fragment.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5263279301915650690" style="cursor: pointer; width: 400px; height: 117px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SQrs_l5wvmI/AAAAAAAAASc/0zbJSigKDBE/s1600-h/fragmente.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SQrs_l5wvmI/AAAAAAAAASc/0zbJSigKDBE/s400/fragmente.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5263279691786141282" style="cursor: pointer; width: 400px; height: 192px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Remark: perhaps you have noticed that the Manifest files above are using logback Version 0.9.11: there are new versions of &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.slf4j.org/"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;SLF4J&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; (&lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.slf4j.org/download.html"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Download&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; Version 1.5.5) and &lt;/span&gt;&lt;/span&gt;&lt;a href="http://logback.qos.ch/"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;LOGBack&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; (&lt;/span&gt;&lt;/span&gt;&lt;a href="http://logback.qos.ch/download.html"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Download&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; Version 0.9.11). Because at the moment they are not found from SpringSource EnterpriseBundleRepository we have to build them by ourself. How to do this is explained in &lt;/span&gt;&lt;/span&gt;&lt;a href="http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications.html"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;part 2 &lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;of this blog series.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;Logoutput twice&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It looks so good: we catch all LogEvents from all Logging Frameworks used from other Bundles and also from OSGI LogServices. But it can happen that you found some messages twice in your log output. What happens ? If you're using per ex. Eclipse Riena M4 you got messages twice:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Riena uses Listener to catch OSGI Logservices and logs them using Log4J. Log4J will found the way to our SLF4J / LOGBack implementation. So long so good.&lt;/div&gt;&lt;div&gt;But our own Logging Bundle org.ekkehard.osgi.over.slf4j also catches OSGI Logservices and loggs them using SLF4J / LOGBack.&lt;/div&gt;&lt;div&gt;And now we got some messages twice.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The good news first: in some days Riena will publish Milestone M5 and then you should be able to switch these Listeners from Riena-Logging off.&lt;/div&gt;&lt;div&gt;Because it can happen every day again using other 3rdParty bundles, here's the solution. We need an entry in our LOGBack configuration file logback.xml:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SQrs_nxkRBI/AAAAAAAAASk/H66h-bs87E0/s1600-h/riena-logging-OFF.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SQrs_nxkRBI/AAAAAAAAASk/H66h-bs87E0/s400/riena-logging-OFF.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5263279692288640018" style="cursor: pointer; width: 382px; height: 61px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This will hide those output from &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;org.eclipse.riena&lt;/span&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Riena uses Equinox Extended OSGI Logservices, which contain an own Logger. We catch those ExtendedLogEvents and log the message using the Loggername from ExtendedLogEntry. To distinguish Logging - Output from our Listeners we add a prefix:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SQrs_3DHzhI/AAAAAAAAAS0/7fJEtmiVdwY/s1600-h/xlogger.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SQrs_3DHzhI/AAAAAAAAAS0/7fJEtmiVdwY/s400/xlogger.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5263279696388804114" style="cursor: pointer; width: 400px; height: 136px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now we know where the Logging - Output comes from and as a side-effect its easy to log all LogEvents originally logged from Equinox &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ExtendedLogServices&lt;/span&gt; per ex. at DEBUG Level:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SQrs_mYMQ5I/AAAAAAAAASs/rppoNjYhsqo/s1600-h/config-log-X.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SQrs_mYMQ5I/AAAAAAAAASs/rppoNjYhsqo/s400/config-log-X.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5263279691913773970" style="cursor: pointer; width: 384px; height: 91px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's an example logging output catched by our Listener and logged to LOGBack:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;23:25:41.846 DEBUG [X.o.e.r.c.publisher.ServicePublishBinder] - [B:org.eclipse.riena.core] service endpoints count: 792&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ExtendedLogEntry uses this as Loggername:&lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;org.eclipse.riena.communication.publisher.ServicePublishBinder&lt;/span&gt;&lt;/div&gt;&lt;div&gt;We add the prefix "X."&lt;/div&gt;&lt;div&gt;You also see a Bundlename (from our BundleConverter)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;org.eclipse.riena.core&lt;/span&gt;&lt;/div&gt;&lt;div&gt;We got the name from Context of the catched ExtendedLogEntry: &lt;/div&gt;&lt;div&gt;   &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; getBundle().getSymbolicName()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using Marker from LOGBack is an easy way to get the information of the Bundle logging the event and also not to loose the Bundlename if rooting LogEvents from OSGI LogServices to SLF4J/LOGBack.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;What happens next ?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This blog series isn't finished, but we already talked about the most important informations about Logging in OSGI Enterprise Applications. Of course I'll continue this series next months because there are some more aspects to look at in detail. But expect next blog entries in a time-frame of 2-3 weeks for each.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Blog Series "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Logging in OSGI Enterprise Applications&lt;/span&gt;":&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Part 1: &lt;a href="http://ekkes-corner.blogspot.com/2008/09/logging-in-osgi-enterprise-applications.html"&gt;An overview&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Part 2: &lt;a href="http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications.html"&gt;How to catch all log events from "classic" logging - frameworks&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Part 3: &lt;a href="http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications_11.html"&gt;How to catch all log events from OSGI Log Services &lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Part 4: &lt;a href="http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications_20.html"&gt;How to start logging bundles the right way inside an OSGI Enterprise application&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Part 5: Configuration, Fragment-Bundles, Markers&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Part 6: ... follows (Stay tuned...)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Perhaps some of my older blogs about Logging und OSGI are also interesting:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ekkes-corner.blogspot.com/2008/07/logging-riena-easybeans-equinox.html"&gt;Logging (Riena - EasyBeans - Equinox) reloaded&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ekkes-corner.blogspot.com/2008/06/catch-22-logging-with-osgi-frameworks.html"&gt;Catch-22 Logging in OSGI Environments&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;New blog series coming soon&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now I'll also starting a &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;new  blog series&lt;/span&gt; :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;„&lt;span class="Apple-style-span" style="font-style: italic;"&gt;HowTo build an Equinox-Riena-EasyBeans-OSGI-Server&lt;/span&gt;“. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After working through that blog series you'll get a complete server as Open Source (EPL) to try it out by yourself. This server of course also contains all of the logging aspects I talked about.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SQrtLO5dOEI/AAAAAAAAAS8/aPFzNj3Zl1A/s400/de.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5263279891769276482" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width: 16px; height: 11px; " /&gt;&lt;div&gt;this blog in &lt;a href="http://ekkes-ecke.org/"&gt;german&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/5484177613731225131-5547068326995735138?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=5547068326995735138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/5547068326995735138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/5547068326995735138'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications_31.html' title='Logging in OSGI Enterprise Applications, Part 5'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Xv6Yjx9z9no/SQrsn4v1DiI/AAAAAAAAAR0/ZFlzJtnaPLY/s72-c/logbacklogo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-8520978446704506401</id><published>2008-10-20T00:05:00.013+02:00</published><updated>2008-10-20T01:05:38.767+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Riena'/><category scheme='http://www.blogger.com/atom/ns#' term='EasyBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='SLF4J'/><category scheme='http://www.blogger.com/atom/ns#' term='LOGBack'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGI'/><title type='text'>Logging in OSGI Enterprise Applications, Part 4</title><content type='html'>&lt;div&gt;Part 4 will demonstrate how to start the logging - framework and all the bridges inside an OSGI Enterprise Application.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To remember: At the end of the last (third) part of my blog - series "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Logging in OSGI Enterprise Applications&lt;/span&gt;" we were able to log all events from „&lt;span class="Apple-style-span" style="font-style: italic;"&gt;classic&lt;/span&gt;“ log-frameworks, OSGI LogServices, BundleEvents and FrameworkEvents using a SLF4J Log - implementation (LOGBack):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SPuwCstg6xI/AAAAAAAAAQk/nXc36eTTbFU/s1600-h/catch_all.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SPuwCstg6xI/AAAAAAAAAQk/nXc36eTTbFU/s400/catch_all.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5258990550293474066" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If we want to use it all inside a complex OSGI Enterprise Application its important to start the bundles using the right start-level. We also have to decide which bundles can be auto-started from the framework and which not. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As an example I'll use again my OSGI - Equinox - Riena - EasyBeans - Hibernate - Server. I'll talk in detail about this server later in one of the follow-ups.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SPuwD045cWI/AAAAAAAAARE/UhQhCdhxoNk/s1600-h/start-order.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SPuwD045cWI/AAAAAAAAARE/UhQhCdhxoNk/s400/start-order.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5258990569668571490" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;From OSGI Launch Configuration:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SPuwC-UeNwI/AAAAAAAAAQs/PzANpo8QXYU/s1600-h/launch-config-start-level.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SPuwC-UeNwI/AAAAAAAAAQs/PzANpo8QXYU/s400/launch-config-start-level.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5258990555020277506" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Default Start - Level is set to 3. &lt;/div&gt;&lt;div&gt;Our &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;osgi-over-slf4j - Bundle&lt;/span&gt; must be started before (Start-Level = 2) and the &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;EasyBeans - Agent - Bundle&lt;/span&gt; later (Start-Level = 4)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We also have to watch that some bundles cannot be started with Auto-Start = true ! These bundles will be started under control from EasyBeans Agent bundle.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;What happens now starting the OSGI server application ?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;The OSGI - Framework Equinox will be started&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Our &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;org.ekkehard.osgi.over.slf4j &lt;/span&gt;bundle will be started. The Activator calls in the &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;start() &lt;/span&gt;method &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;SLF4JBridgeHandler.install()&lt;/span&gt; to catch all log - events from &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;java.util.logging&lt;/span&gt; - also the Activator contains &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Logger&lt;/span&gt; - Statements. All this causes starting and activating &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;SLF4J - API&lt;/span&gt; and &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;SLF4J - implementation (LOGBack) - bundles&lt;/span&gt;: our Logging Framework is alive !&lt;br /&gt;&lt;/li&gt;&lt;li&gt;All bundles with &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Auto-Start = true&lt;/span&gt; will be started then from the Framework. This includes all &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Eclipse Riena&lt;/span&gt; bundles. Riena uses &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;LOG4J&lt;/span&gt; - so the LOG4J - bridge will be started. Riena also uses &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Equinox - Extended - OSGI - Log - Services&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;After starting all Default - Start - Level - bundles, the &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;easybeans.agent&lt;/span&gt; will be started. This agent starts all &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;EasyBeans components&lt;/span&gt; and &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Hibernate&lt;/span&gt;. EasyBeans uses &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Commons - Logging&lt;/span&gt; and&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt; java.util.logging&lt;/span&gt; - Hibernate uses &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;SLF4J&lt;/span&gt;. Then all our logging -  framework - bridges are started and active. EasyBeans then starts all Entity - bundles and EJB3 - bundles from our server and registers the EJB3 - Business - Interfaces (Local oder Remote) als OSGI - Services.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;org.ekkehard.server &lt;/span&gt;bundle tracks OSGI Managed Services and recognizes, when all required services are configured from EasyBeans and Hibernate and ready-to-go. Then org.ekkehard.server registers Services as &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;Remote Services&lt;/span&gt; for Eclipse Riena.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Remark: This is only a small part of all the activities and tasks happening while starting the server. More about 4. and 5. later in another blog series. Lets first finishing the logging.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;No black holes ?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If we did it all well, then our SLF4J - Implementation LOGBack should start so early that we get all log - events and nothing is lost in space. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To test this we configure our&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt; logback-test.xml&lt;/span&gt; as follows: set Root Level to DEBUG, output to Console, swich DEBUG - Mode of the configuration itself on and start the server.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SPuwDMIRnWI/AAAAAAAAAQ0/3h77bxpnZ8E/s1600-h/minimal-config.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SPuwDMIRnWI/AAAAAAAAAQ0/3h77bxpnZ8E/s400/minimal-config.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5258990558727216482" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You should get a log like this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SPuwDHJNjtI/AAAAAAAAAQ8/e7RlBbwrhAs/s1600-h/console-log.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SPuwDHJNjtI/AAAAAAAAAQ8/e7RlBbwrhAs/s400/console-log.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5258990557388967634" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Line 1: equinox - osgi - Console&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Line 2 - 7: Debug-output from LOGBack configuration&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Line 8 - 9: Logging-output from osgi-over-slf4j - bundle&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There's no other logging-output on the console before starting SLF4J / LOGBack :-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The next blog will look at the configuration of LOGBack and some special Fragment - Bundles for configuration and also extending the LOGBack - implementation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Part 1: &lt;a href="http://ekkes-corner.blogspot.com/2008/09/logging-in-osgi-enterprise-applications.html"&gt;An overview&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Part 2: &lt;a href="http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications.html"&gt;How to catch all log events from "classic" logging - frameworks&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Part 3: &lt;a href="http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications_11.html"&gt;How to catch all log events from OSGI Log Services &lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Part 4: How to start logging bundles the right way inside an OSGI Enterprise application&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Part 5: ... follows (Stay tuned...)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Perhaps some of my older blogs about Logging und OSGI are also interesting:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ekkes-corner.blogspot.com/2008/07/logging-riena-easybeans-equinox.html"&gt;Logging (Riena - EasyBeans - Equinox) reloaded&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ekkes-corner.blogspot.com/2008/06/catch-22-logging-with-osgi-frameworks.html"&gt;Catch-22 Logging in OSGI Environments&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SPuwSLqRmaI/AAAAAAAAARM/o61o17s54yw/s400/de.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5258990816299424162" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; " /&gt;&lt;div&gt; the blog in &lt;a href="http://ekkes-ecke.org/"&gt;german&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/5484177613731225131-8520978446704506401?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=8520978446704506401' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/8520978446704506401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/8520978446704506401'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications_20.html' title='Logging in OSGI Enterprise Applications, Part 4'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Xv6Yjx9z9no/SPuwCstg6xI/AAAAAAAAAQk/nXc36eTTbFU/s72-c/catch_all.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-4725361515945824670</id><published>2008-10-11T15:55:00.034+02:00</published><updated>2008-10-12T12:35:26.212+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Riena'/><category scheme='http://www.blogger.com/atom/ns#' term='EasyBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='SLF4J'/><category scheme='http://www.blogger.com/atom/ns#' term='PDE'/><category scheme='http://www.blogger.com/atom/ns#' term='LOGBack'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Logging in OSGI Enterprise Applications, Part 3</title><content type='html'>&lt;div&gt;Part 3 explains how to catch all log events logged by OSGI Bundles using  OSGI Log Services. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In &lt;a href="http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications.html"&gt;part 2&lt;/a&gt; you've seen that catching log entries from "classic" Log - Frameworks was very easy:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;✓ Choose the right bundles&lt;br /&gt;&lt;/li&gt;&lt;li&gt;✓ Create a config - file &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;-thats all :-)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Remark:&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; java.util.logging&lt;/span&gt; needs also this one-liner: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;SLF4JBridgeHandler.install();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Running an OSGI Enterprise Application you'll also find bundles logging their log - entries using OSGI Services:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;org.osgi.service.log.LogService &lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;org.osgi.service.log.LogReaderService &lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You have also to watch for Services extending the "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;normal&lt;/span&gt;" OSGI Log Services: Eclipse &lt;a href="http://www.eclipse.org/riena/"&gt;Riena&lt;/a&gt; per ex. uses from Equinox Incubator:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;org.eclipse.equinox.log.ExtendedLogService &lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;org.eclipse.equinox.log.ExtendedLogReaderService&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can read Log entries using the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;LogReaderService&lt;/span&gt;. You only have to register your &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;LogListener&lt;/span&gt;. &lt;/div&gt;&lt;div&gt;The &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;LogListener&lt;/span&gt; gets all &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;LogEntry&lt;/span&gt; (&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ExtendedLogEntry&lt;/span&gt;), then you can log them using &lt;a href="http://www.slf4j.org/"&gt;SLF4J&lt;/a&gt;-API to your &lt;a href="http://logback.qos.ch/"&gt;LOGBack&lt;/a&gt; Implementation. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You have to use the same config file (&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;logback.xml&lt;/span&gt; or &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;logback-test.xml&lt;/span&gt;) as described in &lt;a href="http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications.html"&gt;part 2&lt;/a&gt; (logging the entries from „classic“ Log - frameworks). Details about configuration will follow in another Blog of this series.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Short overview:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SPDNXje5OVI/AAAAAAAAAP0/AOxVnfs6H_o/s1600-h/osgi-log-services-and-slf4j.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SPDNXje5OVI/AAAAAAAAAP0/AOxVnfs6H_o/s400/osgi-log-services-and-slf4j.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5255926569686874450" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We already have following bundles used as &lt;a href="http://www.slf4j.org/legacy.html"&gt;bridges&lt;/a&gt; between „&lt;span class="Apple-style-span" style="font-style: italic;"&gt;classic&lt;/span&gt;“ Log-Frameworks and &lt;a href="http://www.slf4j.org/"&gt;SLF4J&lt;/a&gt; / &lt;a href="http://logback.qos.ch/"&gt;LOGBack&lt;/a&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;slf4j.api&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;jul.to.slf4j&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;log4j.over.slf4j&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;jcl.over.slf4j&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are also the bundles of the &lt;a href="http://www.slf4j.org/"&gt;SLF4J&lt;/a&gt; - implementation &lt;a href="http://logback.qos.ch/"&gt;LOGBack&lt;/a&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;logback.core&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;logback.classic&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You'll find more details in &lt;a href="http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications.html"&gt;part 2&lt;/a&gt; of this Blog series.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Bundle &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;osgi.over.slf4j&lt;/span&gt; (a bridge between OSGI Service and LOG4J)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We need a bundle as bridge between OSGI Log Services and SLF4J / LOGBack. Please create a Plug-In project using PDE:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;my.namespace.osgi.over.slf4j&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SPDMWwK0x2I/AAAAAAAAAPE/B-BZXvXd93M/s1600-h/bridge-osgi-over-slf4j.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SPDMWwK0x2I/AAAAAAAAAPE/B-BZXvXd93M/s400/bridge-osgi-over-slf4j.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5255925456400861026" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Your &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;MANIFEST.MF&lt;/span&gt; should look like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SPDMZmbMZoI/AAAAAAAAAPk/eR0EJH2OAGs/s1600-h/manifest-osgi-over-slf4j.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SPDMZmbMZoI/AAAAAAAAAPk/eR0EJH2OAGs/s400/manifest-osgi-over-slf4j.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5255925505324770946" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;osgi.over.slf4j&lt;/span&gt; - bundle has its own &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;org.slf4j.Logger&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SPDNYMI0owI/AAAAAAAAAP8/77WwRDq9Fd8/s1600-h/slf4j_Logger.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SPDNYMI0owI/AAAAAAAAAP8/77WwRDq9Fd8/s400/slf4j_Logger.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5255926580600152834" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;We'll use this Logger to log events from this bundle itself and also to log all catched LogEntry from other bundles.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To track &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;LogReader&lt;/span&gt; Services we can use a &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ServiceTracker&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SPDNZBJGqKI/AAAAAAAAAQE/xEThG1R8q1w/s1600-h/start+servicetracker.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SPDNZBJGqKI/AAAAAAAAAQE/xEThG1R8q1w/s400/start+servicetracker.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5255926594828413090" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We create our LogServiceTracker with this filter to get only services from type &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;LogReaderService&lt;/span&gt; or &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ExtendedLogReaderService&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;(|(objectClass=org.osgi.service.log.LogReaderService) (objectClass=org.eclipse.equinox.log.ExtendedLogReaderService))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SPDMYy9a0WI/AAAAAAAAAPc/MGnLcG_Ox9s/s1600-h/LogServiceTracker.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SPDMYy9a0WI/AAAAAAAAAPc/MGnLcG_Ox9s/s400/LogServiceTracker.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5255925491509678434" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A LogListener for „&lt;span class="Apple-style-span" style="font-style: italic;"&gt;normal&lt;/span&gt;“ OSGI LogServices:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SPDNXVAOVqI/AAAAAAAAAPs/X02kRMRHQOc/s1600-h/NLoglistener.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SPDNXVAOVqI/AAAAAAAAAPs/X02kRMRHQOc/s400/NLoglistener.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5255926565800138402" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;LogEntry&lt;/span&gt; will be logged using the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Logger&lt;/span&gt; of our &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;osgi.over.slf4j&lt;/span&gt; - bundle.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A LogListener for „&lt;span class="Apple-style-span" style="font-style: italic;"&gt;extended&lt;/span&gt;“ Equinox OSGI LogServices:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SPDNZh5YNUI/AAAAAAAAAQM/H8-D7tKhKdw/s1600-h/XLogListener.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SPDNZh5YNUI/AAAAAAAAAQM/H8-D7tKhKdw/s400/XLogListener.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5255926603620824386" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ExtendedLogEntry&lt;/span&gt; already contains an own &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Logger&lt;/span&gt;. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;We'll use an &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;org.slf4j.Logger&lt;/span&gt; with same name - but to distinguish we use a prefix („&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;X.&lt;/span&gt;“). Details will follow in another Blog.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then we delegate &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;LogEntry&lt;/span&gt; and &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ExtendedLogEntry&lt;/span&gt; to the o&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;rg.slf4j.Logger&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SPDMX5LaxOI/AAAAAAAAAPU/CAT0M6dHP4U/s1600-h/loglogentry.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SPDMX5LaxOI/AAAAAAAAAPU/CAT0M6dHP4U/s400/loglogentry.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5255925475999139042" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;We have to map the OSGI LogService Levels. We can get the origin message and (optional) exception from &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;LogEntry&lt;/span&gt; and delegate to our Logger.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Different from Log4J or Commons-Logging is using a &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Marker&lt;/span&gt;. Markers are part of the SLF4J API, but at the moment only the LOGBack - implementation uses them. We are using Marker to print the bundle-name and perhaps also the service-name. Then we know which bundle / service originally creates the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;LogEntry&lt;/span&gt; or &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ExtendedLogEntry&lt;/span&gt;. &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Remark: More about Marker you'll find in one of the next Blogs of this series.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Logging BundleEvent and FrameworkEvent &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Its a good idea also to log &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;org.osgi.framework.BundleEvent &lt;/span&gt;and &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;org.osgi.framework.FrameworkEvent&lt;/span&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To do this we need these Listener:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SPDMXcErirI/AAAAAAAAAPM/GrAzKi_5q1k/s1600-h/bundleAndFrameworkListener.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SPDMXcErirI/AAAAAAAAAPM/GrAzKi_5q1k/s400/bundleAndFrameworkListener.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5255925468186249906" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Dependent from the Event - Type we create the message and level.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Remark: More about SLF4J - Marker in one of the follow-ups.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;--------------------------------------------------------------------------------&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now we are ready to catch and log all events from „&lt;span class="Apple-style-span" style="font-style: italic;"&gt;classic&lt;/span&gt;“ Log-Frameworks, OSGI LogServices, BundleEvents or FrameworkEvents using SLF4J / LOGBack:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SPHStYU6iJI/AAAAAAAAAQc/Ou1hAZyonZU/s1600-h/catch_all.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SPHStYU6iJI/AAAAAAAAAQc/Ou1hAZyonZU/s400/catch_all.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5256213917184198802" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This was the third part of my blog series "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Logging in OSGI Enterprise Applications&lt;/span&gt;":&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Part 1: &lt;a href="http://ekkes-corner.blogspot.com/2008/09/logging-in-osgi-enterprise-applications.html"&gt;An overview&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Part 2: &lt;a href="http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications.html"&gt;How to catch all log events from "classic" logging - frameworks&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Part 3: How to catch all log events from OSGI Log Services &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Part 4: ... follows (Stay tuned...)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Perhaps some of my older blogs about Logging und OSGI are also interesting:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ekkes-corner.blogspot.com/2008/07/logging-riena-easybeans-equinox.html"&gt;Logging (Riena - EasyBeans - Equinox) reloaded&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ekkes-corner.blogspot.com/2008/06/catch-22-logging-with-osgi-frameworks.html"&gt;Catch-22 Logging in OSGI Environments&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SPDN39_pUCI/AAAAAAAAAQU/ITfaKc49Jyo/s400/de.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5255927126559379490" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; " /&gt;&lt;div&gt;the blog in &lt;a href="http://ekkes-ecke.org/"&gt;german&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-4725361515945824670?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=4725361515945824670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/4725361515945824670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/4725361515945824670'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/10/logging-in-osgi-enterprise-applications_11.html' title='Logging in OSGI Enterprise Applications, Part 3'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xv6Yjx9z9no/SPDNXje5OVI/AAAAAAAAAP0/AOxVnfs6H_o/s72-c/osgi-log-services-and-slf4j.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-2371189710168868226</id><published>2008-09-24T17:42:00.030+02:00</published><updated>2008-09-25T16:18:37.866+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Riena'/><category scheme='http://www.blogger.com/atom/ns#' term='EasyBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='SLF4J'/><category scheme='http://www.blogger.com/atom/ns#' term='LOGBack'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGI'/><title type='text'>Logging in OSGI Enterprise Applications, Part 1</title><content type='html'>&lt;a href="http://www.slf4j.org/"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SNtMgWjN45I/AAAAAAAAAN0/YfwPDPhCLFI/s400/slf4j-logo.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5249873909323260818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Logging is an important part of ERP Applications and should be easy using a modern logging framework ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My actual work-in-progress (german ERP solution) contains: &lt;a href="http://www.eclipse.org/equinox/"&gt;Equinox&lt;/a&gt; as OSGI Framework, Eclipse &lt;a href="http://www.eclipse.org/riena/"&gt;Riena&lt;/a&gt; for Remote Services + UI, &lt;a href="http://wiki.easybeans.org/xwiki/bin/view/Main/WebHome"&gt;EasyBeans&lt;/a&gt; as EJB3 Container + JPA (&lt;a href="http://hibernate.org/"&gt;Hibernate&lt;/a&gt;) etc.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This means I have to integrate different logging - frameworks:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;org.osgi.service.log&lt;br /&gt;&lt;/li&gt;&lt;li&gt;org.eclipse.equinox.log (Extended Log Services from 1.1.0.HEAD)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;org.apache.commons.logging&lt;br /&gt;&lt;/li&gt;&lt;li&gt;org.apache.log4j&lt;br /&gt;&lt;/li&gt;&lt;li&gt;org.slf4j&lt;br /&gt;&lt;/li&gt;&lt;li&gt;java.util.logging (JSR47)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you already followed some of my blogs, then you probably know that its not easy to design a clean OSGI architecture for a complex business application.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Actually I was confronted with the newest snapshot of EasyBeans containing a new Hibernate release (3.4) now using &lt;a href="http://www.slf4j.org/"&gt;SLF4&lt;/a&gt; as logging framework. This causes me to rethink my logging architecture.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The logging solution should make my OSGI client / server - application independent from logging frameworks. I'll explain all in detail later.  At first I'll give you an overview to see the differences between "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;classic&lt;/span&gt;" Java logging frameworks and OSGI Logging Services.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;"&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;Classic&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;" Java Logging Frameworks&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="http://commons.apache.org/logging/"&gt;Apache Commons - Logging&lt;/a&gt; (JCL)&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://logging.apache.org/log4j/"&gt;Log4J&lt;/a&gt; - Logging&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://www.slf4j.org/"&gt;SLF4J&lt;/a&gt; - Logging&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/package-summary.html"&gt;JDK&lt;/a&gt; - Logging (java.util.logging)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Usually logging works this way:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Logger definition:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Commons-Logging:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;private static Log logger = LogFactory.getLog(MyClass.class);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Log4J:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;private static Logger logger = Logger.getLogger(MyClass.class.getName());&lt;/span&gt;&lt;/div&gt;&lt;div&gt;SLF4J:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;private static Logger logger = LoggerFactory.getLogger(MyClass.class);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;JDK:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;private static Logger logger = Logger.getLogger(MyClass.class.getName());&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Logging a message:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;logger.info(„my message“)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Because concatenating Strings is slowly we also find: &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;if (logger.isDebugEnabled())&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;   logger.debug("message part 1" + aVar&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;   + "message part 2");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Remark:&lt;/span&gt; &lt;span class="Apple-style-span"  style="font-size:small;"&gt;If you're using SLF4J (&lt;/span&gt;&lt;a href="http://www.slf4j.org/faq.html#logging_performance"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;FAQ&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;) in many cases you can simple use a parameterized message string:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;logger.debug("message part 1 {} message part 2", aVar);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Configuring logging - frameworks:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Configuration can be made using Java code - but mostly you'll find a configuration file - wether in properties or XML format. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Whats different if you're using these logging frameworks under OSGI ?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;you need a bundle for each JAR. You can find bundles for Commons-Logging, LOG4J and SLF4J partly in Eclipse or get them from a bundle repository&lt;br /&gt;&lt;/li&gt;&lt;li&gt;logging itself is the same as in normal Java applications&lt;br /&gt;&lt;/li&gt;&lt;li&gt;you have to place the configuration file into a Fragment-Bundle&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;OSGI Logging Services&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Under OSGI you can use Logging Services:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Standard OSGI : org.osgi.log (OSGI Logging, implemented by org.equinox.log)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Extended: org.equinox.log (1.1.0.HEAD Version from CVS or Riena download), extended Logging)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;OSGI Logging uses Services and Listeners. Equinox implements OSGI Log Services as ManagementServices. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;LogService or ExtendedLogService - writes all log messages&lt;br /&gt;&lt;/li&gt;&lt;li&gt;LogReaderService or ExtendedLogReaderService - where you can read log messages from&lt;br /&gt;&lt;/li&gt;&lt;li&gt;LogListener - gets the messages from ReaderService and you can handle them&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;OSGI LogService can be compared with the Logger from "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;classic&lt;/span&gt;" Java logging. Its a good idea to place LogService Logger objects into the Activator of a bundle.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;LogService logger = ...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Logging a message is nearly the same as logging in non - OSGI environments - of course we have to test if the service is available:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;if (logger != null) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;     logger.log(LogService.LOG_INFO, „my message“);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The LogEvent can then be read using the LogReaderService. You can "track" this ReaderService  and add your own LogListener. This LogListener gets all messages and you can persist the messages or print to console or use one of the "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;classic&lt;/span&gt;" logging frameworks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Equinox allows you to configure how many messages should be cached from LogReader Service and at which Log Level. But important to know: The LogReaderService sends always all messages to all registered LogListener independent from your configuration !&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;"&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Classic&lt;/span&gt;" Logging or OSGI Log Services ?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lets look at the differences between "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;classic&lt;/span&gt;" Java - logging und OSGI - Log Services:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;a) Which messages will be logged - and when ?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Classic&lt;/span&gt;" Logging only creates log - messages if the Logger answers "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;yes&lt;/span&gt;" to &lt;span class="Apple-style-span" style="font-style: italic;"&gt;„should I really log this message at those level for 'the.logger.name'&lt;/span&gt;“ ? It depends from the content of your configuration file, what you want to log at which level. If the Logger answers "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;no&lt;/span&gt;" - nothing will be logged.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;OSGI Log Services always log ALL messages. The Log Reader Service gets them ALL. The Log Reader Service will inform all Log Listeners about all logged messages. Also the Log Reader Service will cache a configurable amount of messages.&lt;/div&gt;&lt;div&gt;The main task of a Log Listener is to filter the messages and to persist or print them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;b) What will be logged ? And whats the content of the Log Messages&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here you'll see the most important content of a Log Entry:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SNtMgCqLaCI/AAAAAAAAANs/qTJkTiPBHxk/s1600-h/was-wird-geloggt.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SNtMgCqLaCI/AAAAAAAAANs/qTJkTiPBHxk/s400/was-wird-geloggt.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5249873903983749154" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The different logging frameworks are also using different Log Levels, so they have to be mapped.&lt;/div&gt;&lt;div&gt;The logged Message is a String or will be created from myObject.toString().&lt;/div&gt;&lt;div&gt;MDC (&lt;a href="http://logback.qos.ch/manual/mdc.html"&gt;Mapped Diagnostic Context&lt;/a&gt;) - a Thread - local Map where you can store context informations, per ex. user info of client sessions.&lt;/div&gt;&lt;div&gt;Marker - a tree of Strings you can mark messages with.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In an OSGI environment its very useful to log informations about the Bundle (and perhaps the Service Reference) where the logged message comes from.&lt;/div&gt;&lt;div&gt;Using OSGI Log Services you'll get this for free. If you're using SLF4J / LOGBack you can also store Bundle- and Service Names. (Using the Marker - more about this later)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;c) Whats the best to use ? "Classic" Logging Frameworks or OSGI Log Services ?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Don't ask this question if you're developing an OSGI Enterprise - Application ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Why not ? &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;You'll never know in advance, which (foreign) projects you'll have to integrate while the whole life-cycle of your business application. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;You have to live with 3rdParty Bundles using all kind of logging - frameworks and -strategies. (Sometimes they change it as with Hibernate happened)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But you have to find the answer, HOW to combine and integrate them all without loosing flexibility. If you've solved this issue, then it also doesn't matter what you're using in your own bundles, because your logging architecture consumes it all :-)&lt;/div&gt;&lt;div&gt;Perhaps specific use cases can force you to use '&lt;span class="Apple-style-span" style="font-style: italic;"&gt;classic&lt;/span&gt;' logging and OSGI Log Services.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;Integration of all Logging Frameworks and Log Services&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SNtMfxUNu5I/AAAAAAAAANk/Ta-U7LISQQI/s1600-h/framework-flow.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SNtMfxUNu5I/AAAAAAAAANk/Ta-U7LISQQI/s400/framework-flow.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5249873899328224146" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The heart of my solution is &lt;a href="http://www.slf4j.org/"&gt;SLF4J&lt;/a&gt; with &lt;a href="http://logback.qos.ch/"&gt;LOGBack&lt;/a&gt; as native implementation. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SNtqViU18KI/AAAAAAAAAOM/5DasO_3Nrtw/s1600-h/logbacklogo.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SNtqViU18KI/AAAAAAAAAOM/5DasO_3Nrtw/s400/logbacklogo.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5249906708854468770" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;SLF4J (Logback) has already bridges for all '&lt;span class="Apple-style-span" style="font-style: italic;"&gt;classic&lt;/span&gt;' logging frameworks: this enables you to use bundles logging to Commons-Logging (JCL), Log4J, JDK (java.util.logging) or SLF4J. All logged messages will be transparently routed to LOGBack.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also all OSGI LogServices - wether Standard or Extended - will be catched from Log Listeners and delegated to SLF4J (LOGBack) delegiert.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So you have ONE place to handle all your logging :-) It depends only from your configuration, if LOGBack prints messages to Console or sends them to a socket (local or remote), to your filesystem, RDBMS or to a LogServer or ... &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;(Logging) - Integration of Eclipse Riena&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.eclipse.org/riena/"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SNtMguphryI/AAAAAAAAAOE/K1wfEOfOfZo/s400/riena_ei.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5249873915792174882" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you're using Eclipse &lt;a href="http://www.eclipse.org/riena/"&gt;Riena&lt;/a&gt; M4 there are currently two small problems to solve:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;1. Log4J-over-SLF4J&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The bridge Log4J-over-SLF4J only  provides the package org.apache.log4j, but  org.eclipse.riena.core has a dependency to org.apache.log4j.xml. Please change this to "optional" in the MANIFEST.MF:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Import-Package: org.apache.log4j,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;org.apache.log4j.xml;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;resolution:=optional&lt;/span&gt;&lt;/span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;org.osgi.framework;version="1.3.0",&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;org.osgi.service.cm;version="1.2.0",&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;org.osgi.service.log;version="1.3.0"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;2. multiple log entries&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Starting with M5 Riena's logging can be configured and its promised that you can switch it all OFF. While using M4 you'll notice two extra messages printed from Rienas LogListener to Console. (Bugzilla &lt;a href="http://bugs.eclipse.org/247680"&gt;247680&lt;/a&gt;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;(Logging) - Integration of EasyBeans OSGI&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://wiki.easybeans.org/xwiki/bin/view/Main/WebHome"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SNtMgXMXnSI/AAAAAAAAAN8/7XhB-6IMEJY/s400/easybeans.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5249873909495864610" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://wiki.easybeans.org/xwiki/bin/view/Main/WebHome"&gt;EasyBeans&lt;/a&gt; logging is now transparently routed to LOGBack without any problems. Since some days the Snapshots of EasyBeans 1.1.0 includes Hibernate 3.4, which itself now is using SLF4J. This also causes no problems because LOGBack is native Implementation of SLF4J.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;additional informations&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This blog is only the first one of a serie about Logging and OSGI. Perhaps it makes sense that you also take a look at my (older) blogs to know the hard way I went ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ekkes-corner.blogspot.com/2008/07/logging-riena-easybeans-equinox.html"&gt;Logging (Riena - EasyBeans - Equinox) reloaded&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ekkes-corner.blogspot.com/2008/06/catch-22-logging-with-osgi-frameworks.html"&gt;Catch-22 Logging in OSGI Environments&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Links:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Simple Logging Facade for Java (&lt;a href="http://www.slf4j.org/"&gt;SLF4J&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://logback.qos.ch/"&gt;LOGBack&lt;/a&gt; - Loggingframework, native SLF4J implementation&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Eclipse &lt;a href="http://www.eclipse.org/riena/"&gt;Riena&lt;/a&gt; (Remote Services, UI enhancements)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Eclipse &lt;a href="http://www.eclipse.org/equinox"&gt;Equinox&lt;/a&gt; (OSGI Framework)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.easybeans.org/xwiki/bin/view/Main/WebHome"&gt;EasyBeans&lt;/a&gt; OSGI (EJB3 Container as OSGI bundles)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://hibernate.org/"&gt;Hibernate&lt;/a&gt; (JPA - integrated into EasyBeans)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;How goes it on ?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This blog is only part 1 of the series „&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Logging in OSGI Enterprise Applications&lt;/span&gt;&lt;/span&gt;“ giving only a short overview - the following themes will be later discussed in detail with source codee examples - so stay tuned.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;HowTo registrier OSGI Logging Services&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Tracking (standard and extended) OSGI Logging Reader Services&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Adding Log Listeners to LogReader Services&lt;br /&gt;&lt;/li&gt;&lt;li&gt;HowTo configure LOGBack for OSGI&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Mapping of LogLevels&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Details of used Bundles, Manifest - files, dependencies,...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Fragment-Bundles&lt;br /&gt;&lt;/li&gt;&lt;li&gt;OSGI Launch configurations&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Testing the whole stuff&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use of EasyBeans JDBC Pooling to persist messages from LOGBack in RDBMS&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Performance issues (frameworks, "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;classic&lt;/span&gt;" logging vs. OSGI LogServices)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;HowTo migrate existing code&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Useful Eclipse PlugIns (Log4E, LogBack Console)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Client-/Server Logging Strategy, Remote Services, MDC - Userinfo...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The „black hole“: how to log before the services are ready ?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use of SLF4J Marker to put Bundle- und Service - informations into&lt;br /&gt;&lt;/li&gt;&lt;li&gt;What happens if other bundles are also using Log Listeners and log messages ?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Remark&lt;/span&gt;:&lt;span class="Apple-style-span"  style="font-size:small;"&gt; In my article I'm not covering &lt;/span&gt;&lt;a href="http://wiki.ops4j.org/confluence/display/ops4j/Pax+Logging"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;PAX OSGI Logging&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. PAX uses Log4J as implementation and also integrates some logging frameworks (JCL, JDK, SLF4J, Avalon). Perhaps you should also take a look at PAX before deciding how to use logging in your OSGI application.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A more detailed complete article is already in work about &lt;span class="Apple-style-span" style="font-style: italic;"&gt;„&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Logging in OSGI Enterprise Applications&lt;/span&gt;&lt;/span&gt;“ - and I'll continue this blog series.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Examples with sourcecode will also follow - I'm jst preparing a sample of my  Equinox -based &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Riena-Easybeans-Server&lt;/span&gt;, where the logging of course is an important aspect.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://eclipse.org/equinox"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SNtqVzKU_CI/AAAAAAAAAOU/MnoqVwEOEH8/s400/equinox5.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5249906713373768738" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hopefully you can get some ideas from my experiences and ideas how to solve the logging problem. I promise: if you're developing OSGI enterprise applications - one day you'll run into logging problems, so its better you're prepared.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SNtsR0rWMLI/AAAAAAAAAOc/AGmbtiF9MXg/s400/de.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5249908844084474034" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; " /&gt;&lt;div&gt; in &lt;a href="http://web.mac.com/ekkehard.gentz/ekkes-corner/blog/blog.html"&gt;german&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/5484177613731225131-2371189710168868226?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=2371189710168868226' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/2371189710168868226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/2371189710168868226'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/09/logging-in-osgi-enterprise-applications.html' title='Logging in OSGI Enterprise Applications, Part 1'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Xv6Yjx9z9no/SNtMgWjN45I/AAAAAAAAAN0/YfwPDPhCLFI/s72-c/slf4j-logo.jpg' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-2851082285158716704</id><published>2008-09-14T12:42:00.006+02:00</published><updated>2008-09-14T13:36:22.737+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSX'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Eclipse Projects + OSX - some Tips</title><content type='html'>&lt;div&gt;More and more developers are using eclipse under OSX. Here are two tips from my current experiences:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;1. Never name an Eclipse Project *.service&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A project name like &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;my.namespace.something.service&lt;/span&gt; causes OSX to think its an OSX service and the Finder will show it as an OSX Service and not as folder:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SMzrbe9cZ2I/AAAAAAAAANM/dm-fy3SaD4M/s1600-h/no+folder.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SMzrbe9cZ2I/AAAAAAAAANM/dm-fy3SaD4M/s400/no+folder.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5245826523379558242" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using right-mouse-click you can look into the "package":&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SMzrbj_DpSI/AAAAAAAAANU/f17mq_XByw0/s1600-h/paketinhalt.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SMzrbj_DpSI/AAAAAAAAANU/f17mq_XByw0/s400/paketinhalt.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5245826524728501538" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Last months it happens sometimes, that my &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;*.service&lt;/span&gt; projects suddenly contain only 0 Bytes and the projects were empty. So I renamed all those projects.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;2..DS_Store can confuse P2&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using the Finder of OSX to view folders and files from Eclipse installations causes the Finder to create &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;.DS_Store&lt;/span&gt; files.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Suddenly I got on error while starting Eclipse (&lt;a href="http://bugs.eclipse.org/247177"&gt;Bugzilla 247177&lt;/a&gt;). Reason was an unexpected &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;.DS_Store&lt;/span&gt; file.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using this command you can remove all &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;.DS_Store&lt;/span&gt; files from a whole folder hierarchy:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;find . -name *.DS_Store -type f -exec rm {} \;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(Its always a good idea on OSX to make „&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;.&lt;/span&gt;“ - Systemfiles visible, because many important Eclipse files start with „&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;.&lt;/span&gt;“: &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;.project&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;.classpath&lt;/span&gt;, ...)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SMzro00qB_I/AAAAAAAAANc/xlKD_NJ13GY/s1600-h/de.gif"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SMzro00qB_I/AAAAAAAAANc/xlKD_NJ13GY/s400/de.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5245826752586582002" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; " /&gt;&lt;/a&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;a href="http://web.mac.com/ekkehard.gentz/ekkes-corner/blog/Einträge/2008/9/14_Eclipse_%2B_OSX_-_Tips_%2B_Tricks.html"&gt;blog in german&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-2851082285158716704?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=2851082285158716704' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/2851082285158716704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/2851082285158716704'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/09/eclipse-projects-osx-some-tips.html' title='Eclipse Projects + OSX - some Tips'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Xv6Yjx9z9no/SMzrbe9cZ2I/AAAAAAAAANM/dm-fy3SaD4M/s72-c/no+folder.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-6836579588150622657</id><published>2008-09-11T15:56:00.012+02:00</published><updated>2008-09-11T16:40:50.866+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDE'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='openArchitectureWare'/><title type='text'>PDE and MDSD [problem generated code and nested src]</title><content type='html'>Its a good practice in a model-driven project to separate generated code from manually written code. (Generated code normaly will not be in your cvs / svn)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.eclipse.org/modeling"&gt;Eclipse Modeling&lt;/a&gt; and &lt;a href="http://www.openarchitectureware.org/"&gt;openArchitectureWare&lt;/a&gt; makes this easy: you can define different outlets in your workflow and XPand templates for generated code. manual code, resources etc.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SMkoyEFkpdI/AAAAAAAAAMk/QNFC-PsweoU/s1600-h/outlet.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SMkoyEFkpdI/AAAAAAAAAMk/QNFC-PsweoU/s400/outlet.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5244768081605338578" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As result you get a Plug-In Project with some nested src - folders. This is no problem for the Eclipse Java Compiler.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SMkoyvTpx8I/AAAAAAAAAM8/FcNsWHzaD_A/s1600-h/two+src+folder.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SMkoyvTpx8I/AAAAAAAAAM8/FcNsWHzaD_A/s400/two+src+folder.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5244768093207119810" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you try to &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Export PDE - as deployable Plug-In&lt;/span&gt; you run into an error: &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SMkoyawO3LI/AAAAAAAAAM0/2yPMha66Uog/s1600-h/pde+export+wizard+1.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SMkoyawO3LI/AAAAAAAAAM0/2yPMha66Uog/s400/pde+export+wizard+1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5244768087689845938" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Errordialog:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SMkox_c8SgI/AAAAAAAAAMc/juvWIjx_4Vw/s1600-h/export+error.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SMkox_c8SgI/AAAAAAAAAMc/juvWIjx_4Vw/s400/export+error.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5244768080361179650" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Logfile:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SMkoydwpKjI/AAAAAAAAAMs/jdGo8631cGs/s1600-h/PDE+error+log.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SMkoydwpKjI/AAAAAAAAAMs/jdGo8631cGs/s400/PDE+error+log.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5244768088496876082" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PDE cannot export Plug-In projects with nested src folders. (s.a. &lt;a href="http://bugs.eclipse.org/241830"&gt;Bugzilla with a small example project from me 241830&lt;/a&gt;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Workarounds: &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Before PDE - Exporting copy the Plug-In Project into a temporary second Plug-In and merge all src - folders into the one and only /src root folder. (Now the workflow while developing and testing isn't as easy as before)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Instead of PDE Export you can use a normal Java - Export as JAR (Loosing the comfort from PDE to auto-detect the Manifest file, versioning ....)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create some ANT Tasks...&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But I'm still looking for the pure PDE solution. Perhaps anyone has an idea how to make PDE happy with nested src folders ?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SMkpqLvRGQI/AAAAAAAAANE/x_aOurVDxeM/s1600-h/de.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SMkpqLvRGQI/AAAAAAAAANE/x_aOurVDxeM/s400/de.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5244769045731940610" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; " /&gt;&lt;/a&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;a href="http://web.mac.com/ekkehard.gentz/ekkes-corner/blog/Einträge/2008/9/11_PDE_und_MDSD_%5BProblem_mit_generiertem_Code%5D.html"&gt;blog in german&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-6836579588150622657?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=6836579588150622657' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/6836579588150622657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/6836579588150622657'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/09/pde-and-mdsd-problem-generated-code-and.html' title='PDE and MDSD [problem generated code and nested src]'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Xv6Yjx9z9no/SMkoyEFkpdI/AAAAAAAAAMk/QNFC-PsweoU/s72-c/outlet.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-5499413931466467258</id><published>2008-09-11T12:46:00.015+02:00</published><updated>2008-09-11T13:22:46.050+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EasyBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='PDE'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>PDE Target Platform - Rename Bundles [OSX]</title><content type='html'>&lt;div&gt;Sometimes we have to add "foreign" bundles to our Target Platform where the filenames are not conform to usual Eclipse naming conventions. EasyBeans per ex. uses a minus („&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;-&lt;/span&gt;“) to separate the version-number where Eclipse uses Underline („&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;_&lt;/span&gt;“).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Problems using „&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;-&lt;/span&gt;“ in Symbolic Names are fixed for Eclipse 3.4.1  (Bugzilla &lt;a href="http://bugs.eclipse.org/197503"&gt;197503&lt;/a&gt;). Equinox has no real problems with bundle - filenames separating versions with "&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;-&lt;/span&gt;", but its a good idea to rename them. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you're using plug-in names in &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;osgi.bundles&lt;/span&gt; of &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;config.ini&lt;/span&gt; there's a difference: &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bundle - Filenames separating the version with underline „&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;_&lt;/span&gt;“ can be used without the version:&lt;/div&gt;&lt;div&gt;   &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;easybeans-core&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But if there's a minus „&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;-&lt;/span&gt;“ you have to enter the full filename including versioning: &lt;/div&gt;&lt;div&gt;   &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;easybeans-core-1.1.0-SNAPSHOT&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;s.a. Bugzilla &lt;a href="http://bugs.eclipse.org/240018"&gt;240018&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course you can integrate the renaming into your build-process, but sometimes its handy to do it manually. Under OSX the application &lt;a href="http://www.versiontracker.com/dyn/moreinfo/macosx/31207"&gt;NameChanger&lt;/a&gt; helps. (Freeware)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Download EasyBeans Bundles, actual &lt;a href="http://maven.objectweb.org/maven2-snapshot/org/ow2/easybeans/osgi/ow2-easybeans-osgi/1.1.0-SNAPSHOT/ow2-easybeans-osgi-1.1.0-SNAPSHOT-hibernate.tar.gz"&gt;SNAPSHOT&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;unzip&lt;br /&gt;&lt;/li&gt;&lt;li&gt;open NameChanger&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Drag'n'Drop EaysyBeans Bundles into NameChanger&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Replace All Occurences of „&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;-1.&lt;/span&gt;“ with „_1.“&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Click on Rename&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SMj5-vXyU0I/AAAAAAAAAMU/bwF27qr_T-w/s1600-h/NameChangerRename.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SMj5-vXyU0I/AAAAAAAAAMU/bwF27qr_T-w/s400/NameChangerRename.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5244716622336381762" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SMj53zWAcnI/AAAAAAAAAMM/KFZBbgQ3Hy0/s1600-h/de.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SMj53zWAcnI/AAAAAAAAAMM/KFZBbgQ3Hy0/s400/de.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5244716503143576178" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; " /&gt;&lt;/a&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;a href="http://web.mac.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2008/9/11_PDE_Target_Platform_-_Rename_Bundles_%5BOSX%5D.html"&gt;blog in german&lt;/a&gt;&lt;/span&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/5484177613731225131-5499413931466467258?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=5499413931466467258' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/5499413931466467258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/5499413931466467258'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/09/pde-target-platform-rename-bundles-osx.html' title='PDE Target Platform - Rename Bundles [OSX]'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Xv6Yjx9z9no/SMj5-vXyU0I/AAAAAAAAAMU/bwF27qr_T-w/s72-c/NameChangerRename.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-7076418056376008100</id><published>2008-09-11T12:07:00.015+02:00</published><updated>2008-09-11T16:59:13.207+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EasyBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='PDE'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>PDE Target Platform - Avoid Duplicate Bundles [OSX]</title><content type='html'>&lt;div&gt;An important part while developing OSGI - Enterprise - Applications is the correct use of PDE Target Platforms. My current ERP project uses:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Eclipse SDK&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Eclipse Equinox SDK&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Eclipse Riena&lt;br /&gt;&lt;/li&gt;&lt;li&gt;....&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While creating your Target Platform you'll notice that some downloads contain the same bundles, per ex. downloading Eclipse Platform SDK and Equinox SDK.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You should know that there are some problems with Target Platforms using duplicates at different locations. Bugzilla &lt;a href="http://bugs.eclipse.org/209915"&gt;209915&lt;/a&gt;, &lt;a href="http://bugs.eclipse.org/233096"&gt;233096&lt;/a&gt;. So its a good idea to avoid duplicates.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you have installed Apples XCode Tools for OSX, then you can use the application FileMerge:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SMjwnUl0KnI/AAAAAAAAALs/Bq5JNKR83WE/s1600-h/xcode_developer_applications_utilities.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SMjwnUl0KnI/AAAAAAAAALs/Bq5JNKR83WE/s400/xcode_developer_applications_utilities.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5244706324405824114" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Whats our goal ? We need all bundles from Equinox SDK not contained in Eclipse Platform SDK.  We choose the following directory locations:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SMjwnjBKnXI/AAAAAAAAAL0/kswJiBkhr7o/s1600-h/compare+plugin+folders.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SMjwnjBKnXI/AAAAAAAAAL0/kswJiBkhr7o/s400/compare+plugin+folders.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5244706328278637938" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;LEFT: plugins folder from Platform SDK&lt;/div&gt;&lt;div&gt;RIGHT: plugins folder from Equinox SDK&lt;/div&gt;&lt;div&gt;MERGE: target plugins folder to get only those Equinox Plug-Ins not already contained in Platform SDK.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Click COMPARE:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SMjwnv3MH_I/AAAAAAAAAL8/aOuhWSX6Jvw/s1600-h/equinox_minus_sdk.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SMjwnv3MH_I/AAAAAAAAAL8/aOuhWSX6Jvw/s400/equinox_minus_sdk.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5244706331726454770" style="cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;EXCLUDE: Identical + Changed Left&lt;/div&gt;&lt;div&gt;EDIT Menu: Select ALL&lt;/div&gt;&lt;div&gt;MERGE - USE RIGHT&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now we can add the merged folder as location to our Target Platform.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SMj2nNPZlYI/AAAAAAAAAME/oLrlmJlvI3Q/s1600-h/de.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SMj2nNPZlYI/AAAAAAAAAME/oLrlmJlvI3Q/s400/de.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5244712919502525826" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; " /&gt;&lt;/a&gt;&lt;div&gt;&lt;a href="http://web.mac.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2008/9/11_PDE_Target_Platform_-_Avoid_Duplicate_Bundles_%5BOSX%5D.html"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; blog in german&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-7076418056376008100?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=7076418056376008100' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/7076418056376008100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/7076418056376008100'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/09/pde-target-platform-avoid-duplicate.html' title='PDE Target Platform - Avoid Duplicate Bundles [OSX]'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Xv6Yjx9z9no/SMjwnUl0KnI/AAAAAAAAALs/Bq5JNKR83WE/s72-c/xcode_developer_applications_utilities.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-1394117059082280913</id><published>2008-09-10T09:41:00.033+02:00</published><updated>2008-09-10T12:40:49.161+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Riena'/><category scheme='http://www.blogger.com/atom/ns#' term='EasyBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='PDE'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGI'/><title type='text'>PDE and 3rdParty Bundles in OSGI Enterprise apps</title><content type='html'>&lt;div&gt;If you're developing an OSGI based Enterprise Application you'll always reach a point where you have to integrate external libraries, bundles or whole projects. In many cases &lt;a href="http://www.eclipse.org/pde/"&gt;PDE&lt;/a&gt; tooling will be your friend.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You have to watch some rules to make life easier - for you and others using your bundles. I already talked about this in previous blog entries. Hopefully it will help you to avoid chaos in your OSGI environment.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;1. JAR - Files as Bundles&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As a good citizen of OSGI world there's the first rule: &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 102, 0);"&gt;&lt;blockquote&gt;Rule 1: &lt;/blockquote&gt;&lt;blockquote&gt;Always put dependent JAR Files in separate bundles and describe the dependencies in your Manifest file. &lt;/blockquote&gt;&lt;blockquote&gt;Don't hide those JARs in your own bundle. &lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then its much easier to re-use bundles or to let your bundles play together with others.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PDE makes it very easy to create bundles (plug-ins) from JAR - Files: Select &lt;span class="Apple-style-span" style="font-style: italic;"&gt;New - Plug-In Development - Plug-in from existing JAR - archives&lt;/span&gt;, choose the JAR File - and thats it :-). &lt;/div&gt;&lt;div&gt;Attention - please use this comfortable function as last of your steps ! At first follow the next rule for good OSGI citizens:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 153, 0);"&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 102, 0);"&gt;Rule 2: &lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 102, 0);"&gt;If a Bundle for your dependent JAR File already exists in one of the Bundle Repositories - then choose this. &lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 102, 0);"&gt;Don't create your own bundles for existing ones.&lt;/span&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;How do you know, if there's already a bundle ? Here's my way to search bundles:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Does the bundle exist in the &lt;a href="http://www.springsource.com/repository/app/"&gt;SpringSource Enterprise Bundle Repository&lt;/a&gt; ? SpringSource is my first choose, because all bundles and dependencies are described there in detail. A great thanks to the SpringSource Team for this great work.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Does the bundle exist in the Eclipse Orbit Repository ? You can find an overview &lt;a href="http://wiki.eclipse.org/Orbit_Bundles"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;To be sure also search for the bundle at OSGI (look at &lt;a href="http://www.osgi.org/Repository/HomePage"&gt;OBR Bundle Repository&lt;/a&gt;).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Only if all search results are negative, I'm creating my own bundle with help of PDE as descibed above. If its a common JAR - File used in many projects, then I create an entry into SpringSource JIRA "wishing" to have this bundle there. Some time ago I was looking for bundles of Drools Rule Engine, but nothing exists in any of the repositories. So I put an entry into &lt;a href="https://issuetracker.springsource.com/browse/BRITS-4"&gt;SpringSource JIRA&lt;/a&gt;. Some days later: „Mission completed“ - if you're now looking for it you'll find per ex.: &lt;a href="http://www.springsource.com/repository/app/bundle/version/detail?name=com.springsource.org.drools&amp;amp;version=4.0.7"&gt;Drools Rules Engine Core&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;2. Using "foreign" Bundles&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Great - with the help of the repositories of PDE - Tooling we got all the dependent bundles providing the needed functionality and APIs. Now we can integrate them into our own OSGI Project.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Analyzing other projects and bundles in many cases I found, that the easiest way was used: Need a bundle ? Put a dependency with &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Require-Bundle&lt;/span&gt;. And because its so fast and easy re-export it simply hitting &lt;span class="Apple-style-span" style="font-style: italic;"&gt;„Re-Export this dependency“&lt;/span&gt; in Manifest editor.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To get a clean OSGI architecture there's something more to think about ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My next rule to watch follows. I know that there's some controverse discussion about required bundles vs. importing packages. But from my experiencies you should do this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 102, 0);"&gt;&lt;blockquote&gt;Rule 3: &lt;/blockquote&gt;&lt;blockquote&gt;If possible use &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Import-Package&lt;/span&gt; to resolve your dependencies. &lt;/blockquote&gt;&lt;blockquote&gt;Export only your "public" packages  - no internal. &lt;/blockquote&gt;&lt;blockquote&gt;Use &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Require-Bundle &lt;/span&gt;only to resolve dependencies inside your own „universe“, not against common bundles. &lt;/blockquote&gt;&lt;blockquote&gt;Always version &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Require-Bundle&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Import-Package&lt;/span&gt; und &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Export-Package&lt;/span&gt;.&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Require-Bundle&lt;/span&gt; always has a dependency to a bundle with a specific name. You cannot change an Eclipse Orbit Bundle (per ex. org.apache.commons.logging) with a SpringSource Bundle (com.springsource.org.apache.commons.logging) if you're using &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Require-Bundle&lt;/span&gt; - only using &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Import-Package&lt;/span&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Import-Package&lt;/span&gt; isn't dependent from the name of the bundle, so its more flexible. Of course its more work to look at your packages and decide which you need to import or to export compared to a one-liner with &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Require-Bundle&lt;/span&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One example: &lt;a href="http://www.eclipse.org/riena/"&gt;Eclipse Riena&lt;/a&gt; needs a special Hessian Bundle because of Eclipse Buddy Policy. If you have a bundle where Require-Bundle points to another Hessian bundle you cannot use the one Riena needs. If you're using Import-Package you can avoid much trouble.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have some more rules I'm watching to work easier with PDE:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="color: rgb(204, 0, 0);"&gt;&lt;blockquote&gt;Rule 4: &lt;/blockquote&gt;&lt;blockquote&gt;If a bundle itself contains packages inside the bundle and exports them, never put these packages also into the Manifest as imported packages.&lt;/blockquote&gt;&lt;blockquote&gt;This can cause PDE to detect cycles and then some functionalities of PDE tooling don't run as expected.&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;s.a. Bugzilla &lt;a href="http://bugs.eclipse.org/246615"&gt;246615&lt;/a&gt;, &lt;a href="http://bugs.eclipse.org/246617"&gt;246617&lt;/a&gt; and &lt;a href="http://bugs.eclipse.org/208011"&gt;208011&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="color: rgb(204, 0, 0);"&gt;&lt;blockquote&gt;Rule 5: &lt;/blockquote&gt;&lt;blockquote&gt;Before deploying of a bundle as plug-in be sure the Package-Uses are re-calculated. &lt;/blockquote&gt;&lt;blockquote&gt;Wrong Package-Use entries for exported packages can stop PDE to export your Plug-In.&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;s.a. Bugzilla &lt;a href="http://bugs.eclipse.org/246615"&gt;246615&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="color: rgb(204, 0, 0);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="color: rgb(204, 0, 0);"&gt;Rule 6: &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(204, 0, 0); font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="color: rgb(204, 0, 0);"&gt;Avoid nesting  JAR - Files - better use multiple bundles.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;s.a. Bugzilla &lt;a href="http://bugs.eclipse.org/157375"&gt;157375&lt;/a&gt; - esp. &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=157375#c31"&gt;comment #31&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Workaround: If a dependency to a „foreign“ binary bundle with nested JAR Files is causing PDE Build - problems, most time it helps to load another plug-in exporting these classes into the workspace.&lt;/div&gt;&lt;div&gt;Attention: You need this plug-in only to build / compile your bundle not for Runtime or OSGI Launch Configurations, because Equinox has no problem using bundles with nested JAR Files.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you watch these DOs &amp;amp; DON‘Ts, then I'm sure you have less trouble and chaos and also your bundles itself can easy be integrated into foreign OSGI projects.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;3.Integration of whole ("foreign") OSGI Projekts &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sorry, but the reality isn't so easy as described above building complex OSGI Enterprise applications. You have to live with other projects not following those rules.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As an example try to integrate the OSGI EJB3 container from &lt;a href="http://wiki.easybeans.org/xwiki/bin/view/Main/WebHome"&gt;EasyBeans&lt;/a&gt;. EasyBeans contains some different components, utilities, an agent and a core bundle.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Not watching  Rule 1 and Rule 2:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;bundle org.ow2.easybeans.core contains uncount JAR Files (the core bundle has a size of 12 MB). Many of these JAR Files are already available as bundles in OSGI Repositories. This makes it very hard to work with the core bundle and to let your own architecture clean. The EasyBeans team knows about this, so hopefully in the future this will become better.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Not watching Rule 4 and Rule 5:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;org.ow2.easybeans.core causes problems with PDE Dependency Analyzing: PDE reports cycles and wrong package-uses. If only using the easybeans.core bundle in runtime or OSGI launch configurations, all works perfect. &lt;/div&gt;&lt;div&gt;Problems arrive if an own bundle has dependencies to org.ow2.easybeans.core: PDE cannot export the bundle as Deployable Plug-In, because cycles and wrong Package - Uses are reported. (s.a. Bugzilla &lt;a href="http://bugs.eclipse.org/246615"&gt;246615&lt;/a&gt;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Workaround to export your bundle with PDE tooling:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At first load bundle org.ow2.easybeans.core as Source Project into your workspace.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;PDE reports incorrect Package-Uses of org.ow2.easybeans.core if you try to export your bundle as deployable plug-in. Open MANIFEST.MF of org.ow2.easybeans.core bundle from workspace, tab Runtime - Exported Packages re-caclulate Uses. Save MANIFEST.MF and try again to export your bundle.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Now PDE detects the cycles. Again open MANIFEST.MF, tab Dependencies, Dependency Analysis „Find unused Dependencies“ and remove all selected. Save MANIFEST.MF and try to export again.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now you can export your bundle :-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Remark: PDE is happy with this manipulated easybeans.core bundle - but never try to use this in runtime or from OSGI launch configs ! &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Problems with bundle - filenames:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;EasyBeans uses filenames like &lt;/div&gt;&lt;div&gt;    easybeans-component-hsqldb-1.1.0-SNAPSHOT&lt;/div&gt;&lt;div&gt;Eclipse uses filenames like &lt;/div&gt;&lt;div&gt;    easybeans-component-hsqldb_1.1.0-SNAPSHOT&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Did you notice the difference ? Eclipse uses underlines (_) before the version (1.1.0) and EasyBeans uses minus (-).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm always replacing -1.1.0 by _1.1.0 after downloading from EasyBeans. This makes some things easier, per ex. in bundle.info of config.ini I can use the plug-in - name only. Without replacing I always have to enter the whole filename, which means I have to change the config.ini for all version-changes, because Equinox cannot find the version number with all these "-" (&lt;a href="http://jira.easybeans.org/browse/EZB-274"&gt;Bug JIRA&lt;/a&gt;).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Problems with Bundle - Symbolic Names:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PDE has a problem using "-" in Symbolic Names. (s.a. Blog &lt;a href="http://mea-bloga.blogspot.com/2008/07/dash-of-legacy.html"&gt;A dash of legacy&lt;/a&gt; from Chris Aniszczyk). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;EasyBeans contains some Util Bundles, where the symbolic name contains "-" (per ex. org.ow2.bundles.ow2-util-event-api). If you load such bundles into your workspace, they are marked as error (Bundle symbolic name contains illegal characters.  Legal characters are A-Z a-z 0-9 . _). You have to change the symbolic name.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Result:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hopefully my rules, solutions and workarounds will help others fighting with OSGI bundle - dependencies.&lt;/div&gt;&lt;div&gt;If you're noticing problems with logging, please read my blog entries about "&lt;a href="http://web.mac.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2008/9/9_PDE_und_3rdParty_Bundles.html"&gt;Logging in OSGI Projects&lt;/a&gt;".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Follow - Up:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Some more blogs are work-in-process and will follow soon to demonstrate the use of EasyBeans 1.1.0, Eclipse Riena M4 and Equinox 3.4 in a small example project.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SMeauZVgvPI/AAAAAAAAALM/Cu0dR_knvko/s400/de.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5244330412962004210" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; " /&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;a href="http://web.mac.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2008/9/9_PDE_und_3rdParty_Bundles.html"&gt;blog in german&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-1394117059082280913?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=1394117059082280913' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/1394117059082280913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/1394117059082280913'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/09/pde-and-3rdparty-bundles-in-osgi.html' title='PDE and 3rdParty Bundles in OSGI Enterprise apps'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Xv6Yjx9z9no/SMeauZVgvPI/AAAAAAAAALM/Cu0dR_knvko/s72-c/de.gif' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-1533188685823814078</id><published>2008-07-21T19:45:00.005+02:00</published><updated>2008-07-21T20:01:51.525+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='P2'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Equinox P2 - Thanks for "Revert Configuration"</title><content type='html'>You know - there are some problems using &lt;a href="http://wiki.eclipse.org/Equinox_p2"&gt;P2&lt;/a&gt;, but today it was good using P2. After Updating to Mylyn 3.0.1 I couldn't open the Task List View:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SITLjwfKDzI/AAAAAAAAAKk/xH6g4Vz8M3s/s1600-h/tasklist+error.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SITLjwfKDzI/AAAAAAAAAKk/xH6g4Vz8M3s/s400/tasklist+error.png" alt="" id="BLOGGER_PHOTO_ID_5225525282828062514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(s.a. Bugzilla &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=241524"&gt;241524&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;But this is no problem - with P2 you're in luck: you can always revert to previous configurations:&lt;br /&gt;&lt;br /&gt;Help | Software Updates | Installed Software | Revert Configuration&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SITL4Y_oTGI/AAAAAAAAAKs/ZqSIF76LH-Q/s1600-h/revert.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SITL4Y_oTGI/AAAAAAAAAKs/ZqSIF76LH-Q/s400/revert.png" alt="" id="BLOGGER_PHOTO_ID_5225525637299063906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Find and select the configuration using Mylyn 3.0.0, hit Finish, restart Eclipse and you're done. Thats all you have to do !&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SITMK83wwYI/AAAAAAAAAK0/SB0J9pW-W0E/s1600-h/tasklist+ok.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SITMK83wwYI/AAAAAAAAAK0/SB0J9pW-W0E/s400/tasklist+ok.png" alt="" id="BLOGGER_PHOTO_ID_5225525956167385474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;... all runs as before :-)&lt;br /&gt;&lt;br /&gt;Some asked why P2 doesn't remove unused bundles - think its clear now: P2 needs them to be able to revert to older configurations. Did you remember the old days before P2 how much time is costs to fix an update disaster ?&lt;br /&gt;&lt;br /&gt;Thanks P2 :-) ...I saved much time.&lt;br /&gt;&lt;br /&gt;ekke&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ekkes-ecke.org"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SITOzINix3I/AAAAAAAAAK8/srXaLXCdI9E/s400/de.png" alt="" id="BLOGGER_PHOTO_ID_5225528845429557106" border="0" /&gt;&lt;/a&gt;&lt;a href="http://ekkes-ecke.org"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-style: italic;"&gt;in german&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-1533188685823814078?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=1533188685823814078' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/1533188685823814078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/1533188685823814078'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/07/equinox-p2-thanks-for-revert.html' title='Equinox P2 - Thanks for &quot;Revert Configuration&quot;'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Xv6Yjx9z9no/SITLjwfKDzI/AAAAAAAAAKk/xH6g4Vz8M3s/s72-c/tasklist+error.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-4895734924240688097</id><published>2008-07-18T09:17:00.004+02:00</published><updated>2008-07-18T09:47:04.483+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Riena'/><category scheme='http://www.blogger.com/atom/ns#' term='EasyBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGI'/><title type='text'>Logging (Riena - EasyBeans - Equinox) Reloaded</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SIBIcmYODFI/AAAAAAAAAKU/rTtFSZRGgF0/s1600-h/EZB_R_L.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SIBIcmYODFI/AAAAAAAAAKU/rTtFSZRGgF0/s400/EZB_R_L.png" alt="" id="BLOGGER_PHOTO_ID_5224255223925443666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There are some improvements since blogging about&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ekkes-corner.blogspot.com/2008/06/catch-22-logging-with-osgi-frameworks.html"&gt;Catch-22 Logging with OSGI Frameworks&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Eclipse Riena:&lt;/span&gt;&lt;br /&gt;Eclipse &lt;a href="http://www.eclipse.org/riena/"&gt;Riena&lt;/a&gt; (M3 here for &lt;a href="http://www.eclipse.org/downloads/download.php?file=/rt/riena/Riena-1.0.0.M3-incubator-platform-macosx.carbon.tar.gz"&gt;OSX&lt;/a&gt; and here for &lt;a href="http://www.eclipse.org/downloads/download.php?file=/rt/riena/Riena-1.0.0.M3-incubator-platform-win32.win32.win32.zip"&gt;Windows&lt;/a&gt;) has changed the dependency to &lt;a href="http://logging.apache.org/log4j/1.2/index.html"&gt;log4J&lt;/a&gt; from &lt;span style="font-family:courier new;"&gt;Require-Bundle &lt;/span&gt;into &lt;span style="font-family:courier new;"&gt;Import-Package&lt;/span&gt; - now you can use any log4j bundle, per ex.  log4J from &lt;a href="http://www.springsource.com/repository/app/"&gt;SpringSource Enterprise Bundle Repository&lt;/a&gt; (S2).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;EasyBeans:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://wiki.easybeans.org/"&gt;EasyBeans&lt;/a&gt; Version 1.1.0 (Snapshot &lt;a href="http://maven.objectweb.org/maven2-snapshot/org/ow2/easybeans/osgi/ow2-easybeans-osgi/1.1.0-SNAPSHOT/"&gt;here&lt;/a&gt;) can now work with installations using &lt;a href="http://commons.apache.org/logging/"&gt;Commons Logging&lt;/a&gt; and also log4J - the stacktrace „ &lt;span style="font-family:courier new;"&gt;No suitable Log implementation&lt;/span&gt;“ doesn't happen anymore.&lt;br /&gt;&lt;br /&gt;Now you can use configurations like:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Riena + log4J + S2-commons-logging + EasyBeans + ow2-commons-logging&lt;/span&gt;&lt;br /&gt;If you want to use ow2-commons-logging bundle from EasyBeans distribution, then you need also  S2-commons-logging, because Jetty (Riena dependency) needs an import with version number, but ow2-commons-logging exports the packages without a version.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Riena + EasyBeans + log4J + S2-commons-logging&lt;/span&gt;&lt;br /&gt;Now you can completely remove ow2-commons-logging and only use commons-logging bundle from SpringSource - this bundle works together with EasyBeans 1.1.0 and also Jetty. (I also prefer not to use ow2-commons-logging in  this case, because there's a dynamic-import of log4j and its always good to try to use as less dynamic-imports as possible.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Remarks:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Riena still uses a special log bundle (equinox.log_1.1.0.HEAD) - details see &lt;a href="http://ekkes-corner.blogspot.com/2008/06/catch-22-logging-with-osgi-frameworks.html"&gt;here&lt;/a&gt;.&lt;/span&gt; &lt;span style="font-style: italic;"&gt;&lt;br /&gt;Instead of commons-logging from S2 (SpringSource) you can also use the commons-logging bundle delivered by  Eclipse.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Thanks to the teams of Riena and EasyBeans for soon fixing of bugs making the life of an Enterprise OSGI applications developers easier.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ekkes-ecke.org/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SIBJ18F9-qI/AAAAAAAAAKc/Lfedoa3IO8o/s400/de.gif" alt="" id="BLOGGER_PHOTO_ID_5224256758762830498" border="0" /&gt;&lt;/a&gt;&lt;a href="http://ekkes-ecke.org/"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-style: italic;"&gt;the blog in german&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-4895734924240688097?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=4895734924240688097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/4895734924240688097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/4895734924240688097'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/07/logging-riena-easybeans-equinox.html' title='Logging (Riena - EasyBeans - Equinox) Reloaded'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Xv6Yjx9z9no/SIBIcmYODFI/AAAAAAAAAKU/rTtFSZRGgF0/s72-c/EZB_R_L.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-2507784926321748870</id><published>2008-07-02T16:44:00.003+02:00</published><updated>2008-07-02T21:44:35.806+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ganymede'/><category scheme='http://www.blogger.com/atom/ns#' term='P2'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Eclipse Ganymede P2 Installer trouble</title><content type='html'>Today I tried again my workflow to install some shared installations and prepare a new blog about it.&lt;br /&gt;&lt;br /&gt;Suddenly  P2 Installer doesn't run any more. (you should read my blog &lt;a href="http://ekkes-corner.blogspot.com/2008/06/eclipse-ganymede-p2-shared.html"&gt;Eclipse Ganymede - P2 Shared Installations (Bundle Pool)&lt;/a&gt; to understand the whole story ;-)&lt;br /&gt;&lt;br /&gt;I deleted &lt;span style="font-family: courier new;"&gt;/configurations/.settings &lt;/span&gt;and &lt;span style="font-family: courier new;"&gt;/p2&lt;/span&gt; from P2 Installer directory and started P2 Installer again. This time I got a message and was pointed to the .log file  to be found in &lt;span style="font-family: courier new;"&gt;/configurations&lt;/span&gt; and there was really an error logged:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;java.lang.OutOfMemoryError: Java heap space...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So I modified the &lt;span style="font-family: courier new;"&gt;p2installer.ini&lt;/span&gt; and added:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-Xms256m&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-Xmx1000m&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-XX:MaxPermSize=256m&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then I started again the P2 Installer&lt;br /&gt;&lt;br /&gt;This time the installer downloads all plugins into my bundle pool location and then runs and runs and runs and runs ...&lt;br /&gt;&lt;br /&gt;After some time I looked at the OSX activity monitor and noticed:&lt;br /&gt;&lt;br /&gt;SWT (= P2 Installer Application)  consumes 1 GB physical RAM and runs endless until I killed the task. Then I deleted the content of my bundle pool directory, the &lt;span style="font-family: courier new;"&gt;/configuration/.settings&lt;/span&gt; and &lt;span style="font-family: courier new;"&gt;/p2&lt;/span&gt; from P2 Installer Directory.&lt;br /&gt;&lt;br /&gt;...and started again:&lt;br /&gt;&lt;br /&gt;Now it runs perfectly AND the P2 Installer asks at the end if I want to start the SDK :-)&lt;br /&gt;&lt;br /&gt;Memory consumed was now only up t0 100 - 200 MB&lt;br /&gt;&lt;br /&gt;Of course I did the next test and started P2 Installer again for the second (shared) installation and it also runs without any problems - memory consumed this time only 60 - 170 MB&lt;br /&gt;&lt;br /&gt;You remember from my last blog &lt;a href="http://ekkes-corner.blogspot.com/2008/06/eclipse-ganymede-p2-shared.html"&gt;Eclipse Ganymede - P2 Shared Installations (Bundle Pool)&lt;/a&gt; that always the first run of P2 Installer for shared installations quits without any message, the second run works well. From my experiences today it seems that it was a memory problem, but nothing was logged by P2 Installer. The installed Eclipse SDK runs without an error - but who knows if all was really correctly installed ?&lt;br /&gt;&lt;br /&gt;I used TimeMachine to look back to .log files from previous installations, but never found a error msg that there isn't enough memory.&lt;br /&gt;&lt;br /&gt;I added these informations to bugzilla &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=238947"&gt;238947&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;conclusion:&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;add -Xms, -Xmx, -XX to the P2 installer (think the defaults from normal eclipse.app will be ok - not everyone can use 1000m like me ;-)&lt;/li&gt;&lt;li&gt;if P2 Installer hangs: delete /configura/.settings and /p2 before restarting&lt;/li&gt;&lt;li&gt;if P2 Installer disappears without any message: look into .log if there's something reported, dont rely on the installation, extend memory allocation, delete installed SDK and start again&lt;/li&gt;&lt;/ol&gt;ekke&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-2507784926321748870?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=2507784926321748870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/2507784926321748870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/2507784926321748870'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/07/eclipse-ganymede-p2-installer-trouble.html' title='Eclipse Ganymede P2 Installer trouble'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-8599469111656202866</id><published>2008-07-02T16:28:00.007+02:00</published><updated>2008-07-02T20:25:22.640+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='private'/><title type='text'>hello planet eclipse</title><content type='html'>... perhaps someone has noticed that on monday the first time a blog from me appears at &lt;a href="http://planeteclipse.org/planet/"&gt;Planet Eclipse&lt;/a&gt;: "&lt;a href="http://ekkes-corner.blogspot.com/2008/06/eclipse-ganymede-p2-shared.html"&gt;Eclipse Ganymede - P2 Shared Installations (Bundle Pool)&lt;/a&gt;"&lt;br /&gt;&lt;br /&gt;I'm glad that I'm now listed at Planet Eclipse where I myself have learned so much from the experience of you all and I hope some of you will enjoy what I'm writing on...&lt;br /&gt;&lt;br /&gt;I'm working as an independent software architect / business application developer since 30 years now and I'm using Eclipse since Version 2.&lt;br /&gt;&lt;br /&gt;My actual project is a german ERP solution for small and medium sized companies of Waste &amp;amp; Recycling. The core of the application and also the developed openArchitectureWare cartridges will become open source (EPL).&lt;br /&gt;&lt;br /&gt;The ERP solution is&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;model-driven (Eclipse Modeling Project, openArchitectureWare)&lt;/li&gt;&lt;li&gt;OSGI Client/Server Architecture (Equinox, Eclipse Riena, EasyBeans OSGI)&lt;/li&gt;&lt;li&gt;Business Process / Business Rules Driven (jBPM, Drools)&lt;/li&gt;&lt;li&gt;RCP Client (SWT/JFace, Eclipse Databinding, Instatiations SWT Designer)&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I'll report here  about all what happens around the development of such a complex business application.&lt;br /&gt;&lt;br /&gt;At the moment I'm fighting with P2 ;-)&lt;br /&gt;...but I'm still thinking its worth to try&lt;br /&gt;&lt;br /&gt;ekke&lt;span style="font-style: italic;font-size:78%;" &gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ekkes-ecke.org/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SGuUGM88mVI/AAAAAAAAAKM/AUV9jSvZa_c/s400/de.png" alt="" id="BLOGGER_PHOTO_ID_5218427427515832658" border="0" /&gt;&lt;/a&gt;&lt;a href="http://ekkes-ecke.org/"&gt;my blogs are also available in german&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-8599469111656202866?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=8599469111656202866' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/8599469111656202866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/8599469111656202866'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/07/hello-planet-eclipse.html' title='hello planet eclipse'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xv6Yjx9z9no/SGuUGM88mVI/AAAAAAAAAKM/AUV9jSvZa_c/s72-c/de.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-8215289249470485437</id><published>2008-06-29T21:58:00.022+02:00</published><updated>2008-07-02T21:52:25.707+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ganymede'/><category scheme='http://www.blogger.com/atom/ns#' term='P2'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Eclipse Ganymede - P2 Shared Installations (Bundle Pool)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://wiki.eclipse.org/Equinox_p2"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SGfqacZS_yI/AAAAAAAAAIs/oD65oxGiMJQ/s400/p2_Came_From_Beneath_Equinox.png" alt="" id="BLOGGER_PHOTO_ID_5217396433351802658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Eclipse &lt;a href="http://eclipse.org/ganymede"&gt;Ganymede&lt;/a&gt; and &lt;a href="http://wiki.eclipse.org/Equinox_p2"&gt;P2&lt;/a&gt; will change your update workflows from ground up.&lt;br /&gt;&lt;br /&gt;There are some Cons (I'm missing the external locations from Software Update),&lt;br /&gt;&lt;br /&gt;but many Pros so for me its time to change.&lt;br /&gt;&lt;br /&gt;If you don't want you can still use the old Update Manager. (&lt;span style="font-style: italic;"&gt;Preferences - General - Capabilities&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There are many new things in P2 - today I'll concentrate on:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Dropins  - a folder where you can place and structure plugins. These plugins were scanned at startup automagically by Eclipse P2.&lt;/li&gt;&lt;li&gt;Bundle Pooling - now its possible that some Eclipse Installations can share their bundles using the Bundle Pool.&lt;/li&gt;&lt;/ul&gt;In my project I'm using some Eclipse Instances:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Eclipse for Modeling (EMF, UML2, openArchitectureWare, ...)&lt;/li&gt;&lt;li&gt;Eclipse for OSGI Client/Server (Eclipse Riena, RCP, Equinox, EasyBeans, ...)&lt;/li&gt;&lt;li&gt;....&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The old classic way I had to &lt;a href="http://www.eclipse.org/downloads/packages/"&gt;download&lt;/a&gt; the Ganymede Packages for Modeling and also the  Ganymede Packages for RCP/Plugin and then manage them separately.&lt;br /&gt;&lt;br /&gt;Eclipse P2 allows bundle pooling and now we'll try to install this.&lt;br /&gt;&lt;br /&gt;Attention: All installation examples in this blog are OSX specific - perhaps you have to make some fine tuning for your OS.&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:180%;"&gt;Shared Installations - first try&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As good Eclipse „citizens“ at first we look at the Eclipse wiki and read from &lt;a href="http://wiki.eclipse.org/Equinox_p2_Getting_Started"&gt;Equinox P2 Getting Started&lt;/a&gt; and &lt;a href="http://wiki.eclipse.org/Equinox_p2_Installer"&gt;Equinox P2 Installer&lt;/a&gt; and then we're ready to start:&lt;br /&gt;&lt;br /&gt;Download the P2 Installers from &lt;a href="http://download.eclipse.org/eclipse/equinox/drops/R-3.4-200806172000/index.php#Provisioning"&gt;here&lt;/a&gt; - we choose the Mac OSX version:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;equinox.p2.installer-3.4-macosx.carbon.ppc.tar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Doubleclick to unzip the Installer into &lt;span style="font-family:courier new;"&gt;/your_path&lt;/span&gt;&lt;your_path&gt;&lt;span style="font-family:courier new;"&gt;/e34p2installer&lt;/span&gt; and open the installer  &lt;span style="font-family:courier new;"&gt;/your_path&lt;/span&gt;&lt;your_path&gt;&lt;span style="font-family:courier new;"&gt;/e34p2installer/eclipse/p2installer.app&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SGfrbouVPNI/AAAAAAAAAI0/j5dlc2mgA6A/s1600-h/p2install.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SGfrbouVPNI/AAAAAAAAAI0/j5dlc2mgA6A/s400/p2install.png" alt="" id="BLOGGER_PHOTO_ID_5217397553352752338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We're choosing &lt;span style="font-style: italic;"&gt;Shared install&lt;/span&gt;, select our &lt;span style="font-style: italic;"&gt;Product install directory&lt;/span&gt; (&lt;span style="font-family:courier new;"&gt;/your_path&lt;/span&gt;&lt;your_path&gt;&lt;span style="font-family:courier new;"&gt;/e34modeling&lt;/span&gt;) and start the p2 Installer.&lt;br /&gt;&lt;br /&gt;It takes some time to download the SDK bundles - unfortunately I cannot select a prefered mirror and there's also no chance to select the &lt;a href="http://www.eclipse.org/donate"&gt;Friends of Eclipse&lt;/a&gt; Mirror ;-)&lt;br /&gt;see @ Bugzilla &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=215916"&gt;215916&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Suddenly the window of the P2 Installer disappears without any message - but lets think positive and start the new Eclipse from &lt;span style="font-family:courier new;"&gt;/your_path&lt;/span&gt;&lt;your_path&gt;&lt;span style="font-family:courier new;"&gt;/e34modeling&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;All runs well without any problem or error :-)&lt;br /&gt;&lt;br /&gt;But its not the end of the story - otherwise there would be no reason to write this blog ;-)&lt;br /&gt;&lt;br /&gt;Where are the shared plugins stored ? Where's my bundle pool ? You remember: there was no possibility to select the bundle pool location from p2 Installer.&lt;br /&gt;&lt;br /&gt;Searching the Getting started under &lt;a href="http://wiki.eclipse.org/Equinox_p2_Getting_Started#Bundle_pooling"&gt;Bundle pooling&lt;/a&gt; we found an example:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Documents and Settings&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Username&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;.p2/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;org/eclipse.equinox.p2.core&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;org/eclipse.equinox.p2.director&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;org/eclipse.equinox.p2.engine&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;org/eclipse.equinox.p2.touchpoint.eclipse&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; plugins/&lt;/span&gt;&lt;/span&gt;      &lt;-- shared bundle pool      But there are no plugins - the plugins of the bundle pool were stored into the P2 Installer location:  &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;/your_path&lt;/span&gt;&lt;/span&gt;&lt;your_path&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;/e34p2installer/eclipse/p2/ org.eclipse.equinox.p2.touchpoint.eclipse/plugins/&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Now you're in luck if you don't followed the &lt;a href="http://wiki.eclipse.org/Equinox_p2_Installer#How_do_I_use_the_installer.3F"&gt;advice&lt;/a&gt; to delete the P2 Installer  („&lt;span style="font-style: italic;font-size:85%;" &gt;... When finished, you can delete the installer...&lt;/span&gt;“) ;.-)&lt;br /&gt;&lt;br /&gt;We need a way to select the location of your bundle pool - lets start a next try:&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;Shared Installations - second try&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Download and unzip the P2 Installer as described above and look into the &lt;span style="font-family:courier new;"&gt;p2installer.ini&lt;/span&gt; file (you'll find this file under /your_plugin&lt;your_path&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;/e34p2installer/eclipse/p2installer.app/Contents/MacOS/ p2installer.ini&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Inside the &lt;span style="font-family:courier new;"&gt;p2installer.ini&lt;/span&gt; you'll find a link to a properties file. Please open  &lt;a href="http://download.eclipse.org/eclipse/testUpdates/sdk-installer.properties"&gt;http://download.eclipse.org/eclipse/testUpdates/sdk-installer.properties&lt;/a&gt; in your webbrowser and you'll see:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;eclipse.p2.metadata=http://download.eclipse.org/eclipse/updates/3.4milestones/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;eclipse.p2.artifacts=http://download.eclipse.org/eclipse/updates/3.4milestones/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;eclipse.p2.flavor=tooling&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;eclipse.p2.profileName=Eclipse SDK&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;eclipse.p2.launcherName=eclipse&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;eclipse.p2.rootId=org.eclipse.sdk.ide&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;eclipse.p2.autoStart=true&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Copy the content from the browser window into an empty textfile and add following entry pointing to the bundle pool&lt;your_path&gt;:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;eclipse.p2.bundleLocation=/&lt;/span&gt;&lt;your_path&gt;&lt;span style="font-family:courier new;"&gt;your_path/e34pool&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Save this textfile under &lt;span style="font-family:courier new;"&gt;/your_path&lt;/span&gt;&lt;your_path&gt;&lt;span style="font-family:courier new;"&gt;/e34p2installer/sdk-installer.properties&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SGfr4RLIiXI/AAAAAAAAAI8/XqUa1rC_7fA/s1600-h/sdk-installer.properties.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SGfr4RLIiXI/AAAAAAAAAI8/XqUa1rC_7fA/s400/sdk-installer.properties.png" alt="" id="BLOGGER_PHOTO_ID_5217398045247310194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now we have to open the &lt;span style="font-family:courier new;"&gt;p2.installer.ini&lt;/span&gt; file to change the path of the sdk-installer.properties:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;-Dorg.eclipse.equinox.p2.installDescription=&lt;br /&gt;file:/your_path&lt;/span&gt;&lt;/span&gt;&lt;your_path&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;/e34p2installer/sdk-installer.propertiesfile: /your_path&lt;/span&gt;&lt;/span&gt;&lt;your_path&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;/e34p2installer/&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Start the P2 Installer, select the product install directory (&lt;span style="font-family:courier new;"&gt;/your_path&lt;/span&gt;&lt;your_path&gt;&lt;span style="font-family:courier new;"&gt;/e34modeling&lt;/span&gt; - screenshot see above from first try)&lt;br /&gt;&lt;br /&gt;The same happens again: the P2 Installer appliation disappears without any message - but Eclipse (from  &lt;span style="font-family:courier new;"&gt;/your_path&lt;/span&gt;&lt;your_path&gt;&lt;span style="font-family:courier new;"&gt;/e34modeling&lt;/span&gt;) runs without problems and now all shared plugins are stored in our bundle pool under &lt;span style="font-family:courier new;"&gt;/your_path&lt;/span&gt;&lt;your_path&gt;&lt;span style="font-family:courier new;"&gt;/e34pool/plugins&lt;/span&gt; :-)&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;2008-07_02 add-on: its not ok, that the P2 installer disappears - you have to add more memory, delete all and start again. see additional info in blog &lt;/span&gt;&lt;a style="font-weight: bold; color: rgb(204, 0, 0);" href="http://ekkes-corner.blogspot.com/2008/07/eclipse-ganymede-p2-installer-trouble.html"&gt;P2 Installer Trouble&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now we want to install the second Eclipse installation (&lt;span style="font-family:courier new;"&gt;/your_path/e34osgi_rcp&lt;/span&gt;) and so we start again the P2 Installer, select our product install directory, choose Shared Installation and really - this time it takes only some seconds to "download" and install the Eclipse SDK :-)&lt;br /&gt;&lt;br /&gt;Really great P2 !&lt;br /&gt;&lt;br /&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SGfsPvfgnPI/AAAAAAAAAJE/4AvFPVA2iTQ/s1600-h/p2installcomplete.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SGfsPvfgnPI/AAAAAAAAAJE/4AvFPVA2iTQ/s400/p2installcomplete.png" alt="" id="BLOGGER_PHOTO_ID_5217398448522829042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;But whats that:&lt;br /&gt;This time the  P2 Installer window remains open and asks if we want to start Eclipse SDK immediately.&lt;br /&gt;&lt;br /&gt;After some tests it was reproducable: in shared installations the first time a bundle pool was used the p2 installer disappears without any message.&lt;br /&gt;&lt;br /&gt;Both SDK installations run without any problems - &lt;span style="font-style: italic;"&gt;About Eclipse - configuration details&lt;/span&gt; logs that all bundles come from our bundle pool.&lt;br /&gt;&lt;br /&gt;Good work, P2 :-)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Configure Eclipse Installations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The first steps were easy - but now you have to do some work: - unfortunately there are no prepared shared Installs like Ganymede Packages (I have found none)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.eclipse.org/downloads/packages/compare-packages"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SGf_USHBNlI/AAAAAAAAAJ0/rnlaFHqSr_g/s400/compare+packages.png" alt="" id="BLOGGER_PHOTO_ID_5217419417255753298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Instead of selecting a whole package or groups of plugins we have to choose and select them plugin for plugin: Please start your two SDK installations and select menu &lt;span style="font-style: italic;"&gt;Help - Software Updates...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Installed Software&lt;/span&gt; shows the already installed Eclipse SDK.&lt;br /&gt;&lt;br /&gt;Got to tab &lt;span style="font-style: italic;"&gt;Available Software&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;Ganymede Update&lt;/span&gt;: there you'll find the needed plugins. P2  makes sure, that all dependencies will satisfied, only correct combinations will be installed - so we always have a correct installation running.&lt;br /&gt;&lt;br /&gt;In my ERP project one &lt;your_path&gt; Eclipse installation (&lt;/your_path&gt;&lt;span style="font-family:courier new;"&gt;/your_path/e34modeling&lt;/span&gt;)&lt;your_path&gt; contains the plugins from &lt;a href="http://www.eclipse.org/downloads/packages/eclipse-modeling-tools-includes-incubating-components/ganymeder"&gt;Ganymede Modeling Package&lt;/a&gt; + ECF and the other&lt;your_path&gt; Eclipse installation (&lt;/your_path&gt;&lt;/your_path&gt;&lt;span style="font-family:courier new;"&gt;/your_path/e34osgi_rcp&lt;/span&gt; )&lt;your_path&gt;&lt;your_path&gt; contains the plugins from &lt;a href="http://www.eclipse.org/downloads/packages/eclipse-rcpplug-developers/ganymeder"&gt;Ganymede RCP/Plugin Package&lt;/a&gt; + &lt;a href="http://www.eclipse.org/downloads/packages/eclipse-ide-java-and-report-developers/ganymeder"&gt;Ganymede Reporting&lt;/a&gt; + Subversion.&lt;br /&gt;&lt;br /&gt;To get an idea whats needed you can take a look at the &lt;a href="http://www.eclipse.org/downloads/packages/eclipse-modeling-tools-includes-incubating-components/ganymeder"&gt;feature lists&lt;/a&gt; of the Ganymede Packages, per ex. for the modeling package:&lt;br /&gt;&lt;br /&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.eclipse.org/downloads/packages/eclipse-modeling-tools-includes-incubating-components/ganymeder"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SGfs5pYPH1I/AAAAAAAAAJU/qcjJCy2l72E/s400/ganymede+package+featurelist.png" alt="" id="BLOGGER_PHOTO_ID_5217399168436215634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After configuring both Eclipse Installations we can look at our bundle pool to see that all plugins are contained in the one and only bundle pool :-)&lt;br /&gt;&lt;br /&gt;Would be really nice using Software Update to select bundles directly from your bundle pool. This would be an easy way to get bundles not contained in the actual Eclipse Installation, but already installed in another Eclipse application sharing the bundle pool.&lt;br /&gt;So you have to select all bundles thru the updatesite - even if they are already contained in the bundle pool.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Dropins and Bundle Pool&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After finishing the installations using &lt;span style="font-style: italic;"&gt;Software Update...&lt;/span&gt; in many cases you have to install more (external) plugins (bundles).&lt;br /&gt;&lt;br /&gt;You can use two different strategies:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Bundles from Update Sites (&lt;span style="font-style: italic;"&gt;Menu Software Updates...&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;Available Software... Add Site...&lt;/span&gt;) -  this works the same as in previous Eclipse versions, but without the possibility to store them at external locations&lt;/li&gt;&lt;li&gt;Bundles using the new Dropins folder (a „Watched Directory“). At startup Eclipse will scan this dropins folder automatically to see if there are new or changed plugins. All bundles from the dropins folder are added to the current Eclipse Installation.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;This dropins folder will be found directly inside your Eclipse Installation directory parallel to the Eclipse Application.&lt;br /&gt;&lt;br /&gt;You can also use an own extra dropins folder: simply add a parameter into &lt;span style="font-family:courier new;"&gt;eclipse.ini&lt;/span&gt; (/your_path&lt;eclipse_installations_verzechnis&gt;&lt;span style="font-family:courier new;"&gt;/Eclipse.app/Contents/MacOS&lt;/span&gt;):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;-Dorg.eclipse.equinox.p2.reconciler.dropins.directory= /&lt;/span&gt;&lt;/span&gt;&lt;your_path&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;your_path/e34shared_dropin&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;This extra dropins location can be used from more then one Eclipse installations - so you can  use it as a shared dropins (watched directory).&lt;br /&gt;&lt;br /&gt;Now we have all pieces together:&lt;br /&gt;&lt;br /&gt;&lt;/your_path&gt;&lt;/eclipse_installations_verzechnis&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SGftQroKv6I/AAAAAAAAAJc/JcPTai4GhiU/s1600-h/p2+shared+verzeichnisse.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SGftQroKv6I/AAAAAAAAAJc/JcPTai4GhiU/s400/p2+shared+verzeichnisse.png" alt="" id="BLOGGER_PHOTO_ID_5217399564176900002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Each Eclipse Installation only uses those bundles from bundle pool, which were selected from  &lt;span style="font-style: italic;"&gt;Software Update...&lt;/span&gt;, also the bundles from the (default) own dropins folder and perhaps bundles scanned from an extra (shared) dropins location.&lt;br /&gt;&lt;br /&gt;You can put bundles into a dropins folder in different ways as &lt;a href="http://wiki.eclipse.org/Equinox_p2_Getting_Started#Supported_dropins_formats"&gt;decribed&lt;/a&gt; into the Getting Started.&lt;br /&gt;&lt;br /&gt;Using link files inside your dropins directory you can manage external locations, but you loose the possibility to install them from inside Eclipse using &lt;span style="font-style: italic;"&gt;Software Update...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Shared Installations and Target Platforms&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I found out some problems with shared installations and the use of target platforms (&lt;span style="font-style: italic;"&gt;Preferences - PDE - Target Platform&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;If you create a target platform only from external locations then there's no difference to previous versions of Eclipse because you select the bundles to use by yourself without using bundles from your current Eclipse application.&lt;br /&gt;&lt;br /&gt;But if you dont want to configure the target platform completely and instead use your current Eclipse as target, then there are some bugs:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Using Eclipse as shared installation you cannot select the bundles configured for your current Eclipse application as target platform&lt;/li&gt;&lt;li&gt;Bundles from dropins locations are not recognized in shared installations&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Using Shared Installations the default target platform points to the bundle pool listing ALL  bundles from your bundle pool, so you see also bundles from other Eclipse installations in you default target and you have to deselect the not-used bundles:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SGfto1mldvI/AAAAAAAAAJk/Mjik0BCnMRE/s1600-h/target+aus+pool.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SGfto1mldvI/AAAAAAAAAJk/Mjik0BCnMRE/s400/target+aus+pool.png" alt="" id="BLOGGER_PHOTO_ID_5217399979171477234" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I think there should be also an option to automatically „&lt;span style="font-style: italic;"&gt;Disable bundles not used in current Eclipse Installation&lt;/span&gt;“.&lt;br /&gt;&lt;br /&gt;Next problem with dropins in shared installations. &lt;a href="http://wiki.eclipse.org/Equinox_p2_Getting_Started#Dropins"&gt;Getting Started... &lt;/a&gt;notes „&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;In other words, new plug-ins installed via the dropins folder behave exactly like plug-ins installed via the user interface.&lt;/span&gt;&lt;/span&gt;“&lt;br /&gt;&lt;br /&gt;Attention: If you're using a shared installation the bundles from your dropins are missing !&lt;br /&gt;You only see all bundles from pool (and there you are seeing too much as described above) and you dont see the bundles from your dropins.&lt;br /&gt;&lt;br /&gt;The only way to change this is using &lt;span style="font-style: italic;"&gt;Add.. &lt;/span&gt;for all plugins folders inside your dropins. If you have structured your dropins, this means you have to select each plugins folder from there. It can happen easily to forget something or loosing the overview.&lt;br /&gt;&lt;br /&gt;Shared Installations brings you much more comfort, but also more work with target platforms :-(&lt;br /&gt;&lt;br /&gt;If you're using separate (not shared) installations then the behaviour is as aspected - the bundles from all your dropins plugins folders appear automagically in your target platform:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SGft7reI6pI/AAAAAAAAAJs/io4NcX12swI/s1600-h/single_target.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SGft7reI6pI/AAAAAAAAAJs/io4NcX12swI/s400/single_target.png" alt="" id="BLOGGER_PHOTO_ID_5217400302869211794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I hope, that these bugs will be fixed soon:&lt;br /&gt;&lt;br /&gt;Bugzilla &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236923"&gt;236923&lt;/a&gt; [installer] p2 shared installation does not works without the installer directory&lt;br /&gt;Bugzilla &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=238947"&gt;238947&lt;/a&gt; P2 Installer Window disappears&lt;br /&gt;Bugzilla &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=238949"&gt;238949&lt;/a&gt; P2 Shared Installations - Target Platform too much bundles&lt;br /&gt;Bugzilla &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=238950"&gt;238950&lt;/a&gt; P2 Shared Installations - Target Platform Dropins missing&lt;br /&gt;&lt;br /&gt;and some enhancements as well:&lt;br /&gt;&lt;br /&gt;Bugzilla &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=238952"&gt;238952&lt;/a&gt; Feature Request P2 Software Update should be able to select from Bundle Pool&lt;br /&gt;Bugzilla &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=238953"&gt;238953&lt;/a&gt; request P2 Installer select Bundle Pool Location&lt;br /&gt;&lt;br /&gt;as always: if you're interested, then please Vote for the Bugzillas ;-)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Over all P2 is a great step into te right direction - and please remember: its the first release - so give it a try !&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ekkes-ecke.org/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SGibHxO4wpI/AAAAAAAAAJ8/peEVfs8ZZEA/s400/de.png" alt="" id="BLOGGER_PHOTO_ID_5217590726085886610" border="0" /&gt;&lt;/a&gt;&lt;a href="http://ekkes-ecke.org/"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-style: italic;"&gt;the blog in german&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;eclipse_installations_verzechnis&gt;&lt;your_path&gt;&lt;your_path&gt;&lt;your_path&gt;&lt;your_path&gt;&lt;your_path&gt;&lt;your_path&gt;&lt;your_path&gt;&lt;your_path&gt;&lt;your_path&gt;&lt;your_path&gt;&lt;your_path&gt;&lt;your_path&gt;&lt;your_path&gt;&lt;your_path&gt;&lt;your_path&gt;&lt;your_path&gt;&lt;your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/your_path&gt;&lt;/eclipse_installations_verzechnis&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-8215289249470485437?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=8215289249470485437' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/8215289249470485437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/8215289249470485437'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/06/eclipse-ganymede-p2-shared.html' title='Eclipse Ganymede - P2 Shared Installations (Bundle Pool)'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Xv6Yjx9z9no/SGfqacZS_yI/AAAAAAAAAIs/oD65oxGiMJQ/s72-c/p2_Came_From_Beneath_Equinox.png' height='72' width='72'/><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-9115521380806824981</id><published>2008-06-16T18:21:00.007+02:00</published><updated>2008-06-16T21:35:14.793+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ganymede'/><category scheme='http://www.blogger.com/atom/ns#' term='OSX'/><category scheme='http://www.blogger.com/atom/ns#' term='PDE'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Eclipse Ganymede - IDE and platform</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-family:lucida grande;"&gt;2008 - june - 25&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SFaT9UTXMLI/AAAAAAAAAFQ/AwkphJBI1Wc/s1600-h/Day_The_Net_Stood_Still.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SFaT9UTXMLI/AAAAAAAAAFQ/AwkphJBI1Wc/s400/Day_The_Net_Stood_Still.png" alt="" id="BLOGGER_PHOTO_ID_5212516300359151794" border="0" /&gt;&lt;/a&gt;I started using Eclipse with version 2 as Java IDE.&lt;p style="padding-top: 0pt;" class="Body"&gt;Now (25th of june 2008) version 3.4 (Ganymede) will be ready to download.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Eclipse evolves over the years and now acts as a platform.&lt;br /&gt;&lt;/p&gt;&lt;p class="Body"&gt;There are so many projects hosted at Eclipse.org - who knows all their names...&lt;/p&gt;&lt;p class="Body"&gt;The Ganymede release counts 24 projects ready to download.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;In my ERP project I'm using&lt;br /&gt;&lt;/p&gt;                                      &lt;ul&gt;&lt;li&gt;&lt;span style="position: relative; top: 2px;" class="Aufzählungszeichen"&gt;&lt;/span&gt;&lt;span style="width: 10px;" class="inline-block"&gt;&lt;/span&gt;Eclipse as IDE&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="position: relative; top: 2px;" class="Aufzählungszeichen"&gt;&lt;/span&gt;&lt;span style="width: 10px;" class="inline-block"&gt;&lt;/span&gt;Eclipse RCP - Rich Clients under windows and OSX&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="position: relative; top: 2px;" class="Aufzählungszeichen"&gt;&lt;/span&gt;&lt;span style="width: 10px;" class="inline-block"&gt;&lt;/span&gt;BIRT - Reporting&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="position: relative; top: 2px;" class="Aufzählungszeichen"&gt;&lt;/span&gt;&lt;span style="width: 10px;" class="inline-block"&gt;&lt;/span&gt;Eclipse Riena - Remote (Client/Server)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="position: relative; top: 2px;" class="Aufzählungszeichen"&gt;&lt;/span&gt;&lt;span style="width: 10px;" class="inline-block"&gt;&lt;/span&gt;Equinox - OSGI Plattform&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="position: relative; top: 2px;" class="Aufzählungszeichen"&gt;&lt;/span&gt;&lt;span style="width: 10px;" class="inline-block"&gt;&lt;/span&gt;Eclipse Modeling - openArchitectureWare&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="position: relative; top: 2px;" class="Aufzählungszeichen"&gt;&lt;/span&gt;&lt;span style="width: 10px;" class="inline-block"&gt;&lt;/span&gt;SWT / JFace / Eclipse Databinding - GUI&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="position: relative; top: 2px;" class="Aufzählungszeichen"&gt;&lt;/span&gt;&lt;span style="width: 10px;" class="inline-block"&gt;&lt;/span&gt;Mylyn - Taskmanagement&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="position: relative; top: 2px;" class="Aufzählungszeichen"&gt;&lt;/span&gt;.....&lt;/li&gt;&lt;/ul&gt;                                                                                                                                                                                                                                                                                                                                                                                                        &lt;p class="Body"&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;Remark: Eclipse Riena is a new project and not part of Ganymede&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Here are some of the news worth switching to Ganymede.&lt;br /&gt;&lt;/p&gt;&lt;p class="Body"&gt;It's only a small part of all the new things making your daily work easier then before - wether you're using Eclipse as IDE, for Plugin - Development, with Mylyn, Birt or other projects  ...&lt;br /&gt;&lt;/p&gt;                                      &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="line-height: 28px;" class="style"&gt;More comfort developing plugins (PDE)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;                   &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SFaT90M_rRI/AAAAAAAAAFg/oJ292FWbZwU/s1600-h/spy.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SFaT90M_rRI/AAAAAAAAAFg/oJ292FWbZwU/s400/spy.png" alt="" id="BLOGGER_PHOTO_ID_5212516308922379538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;               &lt;p class="Body"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="line-height: 23px;" class="style_1"&gt;Plugin Spy&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="Body"&gt;tells you all you want to know from dialogs or windows.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                                      &lt;div style="text-align: left;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Remark:&lt;br /&gt;on my Mac under OSX I couldn't use the keystroke &lt;/span&gt;&lt;span style="line-height: 18px; font-style: italic;font-family:courier new;" class="style_2" &gt;alt-Shift-F1&lt;/span&gt;&lt;span style="font-style: italic;"&gt; - after changing to &lt;/span&gt;&lt;span style="line-height: 18px; font-style: italic;font-family:courier new;" class="style_2" &gt;alt-Shift-F13 &lt;/span&gt;&lt;span style="font-style: italic;"&gt;it works.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;                                                     &lt;br /&gt;&lt;p class="Body"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SFaT-P03peI/AAAAAAAAAFo/-7G085jxvfE/s1600-h/export+launch+config.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SFaT-P03peI/AAAAAAAAAFo/-7G085jxvfE/s400/export+launch+config.png" alt="" id="BLOGGER_PHOTO_ID_5212516316337382882" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="line-height: 23px;" class="style_1"&gt;&lt;span style="font-size:130%;"&gt;Launch Configurations&lt;/span&gt; now can be exported to the local filesystem and also imported from there.&lt;/span&gt;&lt;br /&gt;               &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p style="font-style: italic;" class="Body"&gt;&lt;span style="font-size:85%;"&gt;Remark:&lt;/span&gt;&lt;/p&gt;&lt;p style="font-style: italic;" class="Body"&gt;&lt;span style="font-size:85%;"&gt;I'm using variables in my launch configurations - so they are portable and I can easy change them between different projects exporting / importing to local files.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;               &lt;br /&gt;&lt;p class="Body"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="line-height: 23px;" class="style_1"&gt;PDE Tools --&gt; Convert Jars to Plugin-Projects... &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;In PDE now its possible to create a plugin - project from a single jar. This makes it easy to design a clear plugin structure without storing external jars inside of your bundles.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Attention: You should only create your own bundle if there doesn't exist one for this jar. Please search at first at &lt;a href="http://www.osgi.org/Repository/HomePage"&gt;OSGI&lt;/a&gt; or at &lt;a href="http://www.springsource.com/repository/app/"&gt;SpringSource Enterprise Bundle Repository&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;span style="line-height: 28px;" class="style"&gt;&lt;span style="font-size:180%;"&gt;Java Editor&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SFaUOSYEGtI/AAAAAAAAAFw/1jqAOXbYMf0/s1600-h/brotkrumen.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SFaUOSYEGtI/AAAAAAAAAFw/1jqAOXbYMf0/s400/brotkrumen.png" alt="" id="BLOGGER_PHOTO_ID_5212516591899777746" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;Breadcrumbs&lt;/span&gt;: the Java editor optionally shows a breadcrumb bar.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;               &lt;p class="Body"&gt;From this bar you can easy navigate through the path of your java file and tree structures to open other java files in the editor - a very fast and comfortable way to access other classes, interfaces, methods,... from your current context.&lt;br /&gt;&lt;/p&gt;               &lt;br /&gt;&lt;p class="Body"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SFaUOl5e93I/AAAAAAAAAF4/y8oD1vH0MZc/s1600-h/hover.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SFaUOl5e93I/AAAAAAAAAF4/y8oD1vH0MZc/s400/hover.png" alt="" id="BLOGGER_PHOTO_ID_5212516597140223858" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="line-height: 23px;" class="style_1"&gt;JavaDoc Hover&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;You know the situation: pointing with your mouse cursor over a declaration  a hover shows you JavaDoc informations.&lt;br /&gt;&lt;br /&gt;Wouldn't it be great to jump directly into the hover, scroll the text etc. ?&lt;br /&gt;&lt;br /&gt;With Ganymede you can do it now !&lt;br /&gt;Point your mouse a second inside the hover and you can jump in and scroll or even execute some actions from there. (Please watch the toolbar at the bottom)&lt;br /&gt;&lt;br /&gt;For me this is one of the coolest things in Ganymede.&lt;br /&gt;&lt;br /&gt;           &lt;br /&gt;&lt;span style="line-height: 28px;" class="style"&gt;&lt;span style="font-size:180%;"&gt;Better support for OSX&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SFaUO5adNPI/AAAAAAAAAGA/APiM9V_iX6o/s1600-h/search+JREs.png"&gt; &lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SFaUO5adNPI/AAAAAAAAAGA/APiM9V_iX6o/s400/search+JREs.png" alt="" id="BLOGGER_PHOTO_ID_5212516602378794226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="line-height: 23px;" class="style_1"&gt;JREs:&lt;/span&gt; &lt;/span&gt;All installed JRE‘s will now be detected automagically.                  &lt;/p&gt;&lt;p class="Body"&gt;&lt;/p&gt;&lt;p class="Body"&gt;&lt;span style="line-height: 23px;" class="style_1"&gt;&lt;span style="font-size:130%;"&gt;Voice Over&lt;/span&gt; &lt;/span&gt;(Command-F5) is now supported from Eclipse. Maybe I'll need this later.&lt;br /&gt;&lt;/p&gt;                                      &lt;p class="Body"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="line-height: 23px;" class="style_1"&gt;Drag‘n‘Drop&lt;/span&gt;&lt;/span&gt; support in trees now shows the insertionpoint more exactly then before under OSX.&lt;br /&gt;&lt;/p&gt;                                      &lt;span style="font-size:130%;"&gt;&lt;span style="line-height: 23px;" class="style_1"&gt;Mac Cocoa Port of&lt;/span&gt;&lt;/span&gt; SWT is still under construction and not ready to use with Ganymede :-(&lt;br /&gt;But there must be a reason to wait for first milestones of Eclipse 3.5 ;-)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.eclipse.org/donate/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SFaT9h8j79I/AAAAAAAAAFY/II4dOr79TK0/s400/friendslogo200.jpg" alt="" id="BLOGGER_PHOTO_ID_5212516304021614546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ekkes-ecke.org/"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;this bog in german&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ekkes-ecke.org/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SFaT9EVXr_I/AAAAAAAAAFI/nDDi_VkyKz8/s400/de.png" alt="" id="BLOGGER_PHOTO_ID_5212516296072605682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="line-height: 28px;" class="style"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-9115521380806824981?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=9115521380806824981' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/9115521380806824981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/9115521380806824981'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/06/eclipse-ganymede-ide-and-platform.html' title='Eclipse Ganymede - IDE and platform'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Xv6Yjx9z9no/SFaT9UTXMLI/AAAAAAAAAFQ/AwkphJBI1Wc/s72-c/Day_The_Net_Stood_Still.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-7126507593504556038</id><published>2008-06-16T00:59:00.007+02:00</published><updated>2008-06-16T14:44:43.300+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Riena'/><category scheme='http://www.blogger.com/atom/ns#' term='EasyBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGI'/><title type='text'>Catch-22 Logging with OSGI Frameworks</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SFWfNXlfruI/AAAAAAAAAE4/_iRabxhSUrw/s1600-h/logging.jpg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SFWfNXlfruI/AAAAAAAAAE4/_iRabxhSUrw/s400/logging.jpg" alt="" id="BLOGGER_PHOTO_ID_5212247195769614050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;p style="padding-top: 0pt;" class="Body"&gt;Logging is easy and there are no problems since &lt;a href="http://logging.apache.org/log4j/1.2/index.html"&gt;apache.log4j&lt;/a&gt; and &lt;a href="http://commons.apache.org/logging/"&gt;apache.commons.logging&lt;/a&gt;  etc. exist. Using OSGI bundles its also easy to have the correct versions of bundles in your classpath. Standard Bundles can be re-used easy in OSGI frameworks - the newest example in this direction is &lt;a href="http://www.springsource.com/repository/app/"&gt;SpringSource Enterprise Bundle Repository&lt;/a&gt;. Hey - logging paradise is out there ....&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;My actual project (ERP solution) has to integrate Eclipse &lt;a href="http://www.eclipse.org/riena/"&gt;Riena&lt;/a&gt;, &lt;a href="http://wiki.easybeans.org/"&gt;EasyBeans&lt;/a&gt; and &lt;a href="http://www.eclipse.org/equinox/"&gt;Equinox&lt;/a&gt;. Some problems were to resolve to make Riena and EasyBeans run under Eclipse + Equinox 3.4.RC4. (see also &lt;a href="http://ekkes-corner.blogspot.com/2008/06/easybeans-und-equinox.html"&gt;here&lt;/a&gt; and &lt;a href="http://ekkes-corner.blogspot.com/2008/06/eclipse-riena-getting-started-in.html"&gt;here)&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;The focus of this blog is only logging if these projects were used together - I'll talk later about the functional use.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;The first small problem was easy to solve: Eclipse Riena needs a special version of equinox.log - replacing the equinox.log bundle from Equinox SDK with the version from Riena also works with EasyBeans.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="line-height: 28px;" class="style"&gt;Riena Logging&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Riena has a dependency to log4j (Require-Bundle) - would be better to use Import-Package instead to make it possible to use log4j Bundles from other repositories.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Riena uses Jetty (contained in Equinox SDK and Platform SDK), Jetty itself has a dependency to org.apache.commons.logging (Import-Package).&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;All works well with Eclipse Riena - org.apache.commons.logging detects org.apache.log4J and uses this implementation.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="line-height: 28px;" class="style"&gt;EasyBeans Logging&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;EasyBeans components are also dependent from von commons.logging (Import-Package) and they found this package as part of the EasyBeans Bundle ow2-bundles-externals-commons-logging.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;As expected - this works wel with EasyBeans - commons.logging sees no log4j and uses the Java JDK &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/package-summary.html"&gt;Logging.&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="line-height: 28px;" class="style"&gt;Riena and EasyBeans Logging - the problems&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Are we happy with logging ? YES ! ...if we only use Riena OR EasyBeans - but not together :-(&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Unfortunately the logging in EasyBeans has an implementation only working with JDK - Logging.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;But org.apache.commons.logging chooses log4j - if found - and doesn't look for the JDK logging as implementation.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Running Riena and EasyBeans without changes together (changing start-level doesn't matter), then there's an error from commons.logging @ EasyBeans Bundle: &lt;span style="line-height: 17px;" class="style_1"&gt;NoClassDefFoundError: org/apache/log4j/Category&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Next try: We remove the Equinox Bundle org.apache.commons.logging. EasyBeans Bundle ow2-bundles-externals-commons-logging also exports the contained   org.apache.commons.logging - packages.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Starting again bundle org.mortbay.jetty reports an error: org.apache.commons.logging expected from version 1.0.0 - the EasyBeans Bundle instead exports  org.apache.commons.logging without any version.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Another try: We replace org.apache.commons.logging with com.springsource.org.apache.commons.logging from SpringSource Enterprise Bundle Repository and restart. Now com.springsource.org.apache.commons.logging reports an error: import of log4J needs version 1.2.15, org.apache.log4J from Riena is version 1.2.8 and doesn't match. We can't use com.springsource.org.apache.log4j from Spring, because Riena uses  Bundle-Required instead of Import-Package.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Also EasyBeans reports an error:&lt;span style="line-height: 17px;" class="style_1"&gt; No suitable Log implementation&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;EasyBeans cannot use log4j as logger - only JDK logging.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="line-height: 28px;" class="style"&gt;Riena and EasyBeans Logging - the solution&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                                          &lt;ol&gt;&lt;li&gt;&lt;span class="Aufzählungszeichen"  style="font-size:14;"&gt;&lt;/span&gt;&lt;span style="width: 4px;" class="inline-block"&gt;&lt;/span&gt;use equinox.log_1.1.0.HEAD from Riena instead of equinox.log_1.1.0 from Equinox SDK&lt;br /&gt;&lt;/li&gt;&lt;li&gt;remove &lt;span class="Aufzählungszeichen"  style="font-size:14;"&gt;&lt;/span&gt;&lt;span style="width: 4px;" class="inline-block"&gt;&lt;/span&gt;org.apache.commons.logging from Equinox SDK&lt;br /&gt;&lt;/li&gt;&lt;li&gt;patch org.mortbay.jetty from Equinox SDK / Platfprm SDK: remove version from Package-Import org.apache.commons.logging&lt;/li&gt;&lt;/ol&gt;                                                                                                                                &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;It's not an elegant solution, but it works: I'm able to log from Riena and EasyBeans running together in Equinox !&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="line-height: 28px;" class="style"&gt;My wishes&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                                          &lt;ol&gt;&lt;li&gt;&lt;span class="Aufzählungszeichen"  style="font-size:14;"&gt;&lt;/span&gt;&lt;span style="width: 4px;" class="inline-block"&gt;&lt;/span&gt;Riena should use Package-Import instead of Bundle-Required for org.apache.log4j (Bugzilla &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=237221"&gt;237221&lt;/a&gt; and &lt;a href="http://www.eclipse.org/newsportal/article.php?id=43&amp;amp;group=eclipse.rt.riena#43"&gt;Newsgroup&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Aufzählungszeichen"  style="font-size:14;"&gt;&lt;/span&gt;&lt;span style="width: 4px;" class="inline-block"&gt;&lt;/span&gt;Riena should use standard equinox.log_version instead of equinox.log_version.HEAD, perhaps adding a fragment for additional functionality from equinox.log. (&lt;a href="http://www.eclipse.org/newsportal/article.php?id=47&amp;amp;group=eclipse.rt.riena#47"&gt;Newsgroup&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;EasyBeans should also work using „standard“ org.apache.commons.logging bundles (from Equinox, Spring etc). EasyBeans should also allow log4j as logging implementation (&lt;a href="http://jira.easybeans.org/browse/BUNDLE-2"&gt;JIRA&lt;/a&gt;)&lt;/li&gt;&lt;/ol&gt;                                                                                                             This would make life as an OSGI - application developer easier. Please vote for the bugs - thanks !&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SFWu7gWlheI/AAAAAAAAAFA/v0R1RtEd47E/s1600-h/de.png"&gt;&lt;/a&gt;&lt;a href="http://ekkes-ecke.org/"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;blog in german&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://ekkes-ecke.org/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SFWu7gWlheI/AAAAAAAAAFA/v0R1RtEd47E/s400/de.png" alt="" id="BLOGGER_PHOTO_ID_5212264481071400418" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-7126507593504556038?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=7126507593504556038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/7126507593504556038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/7126507593504556038'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/06/catch-22-logging-with-osgi-frameworks.html' title='Catch-22 Logging with OSGI Frameworks'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Xv6Yjx9z9no/SFWfNXlfruI/AAAAAAAAAE4/_iRabxhSUrw/s72-c/logging.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-7085273354054307897</id><published>2008-06-12T22:36:00.014+02:00</published><updated>2008-06-13T00:30:25.146+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Riena'/><category scheme='http://www.blogger.com/atom/ns#' term='Ganymede'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Eclipse Riena Getting Started in Ganymede (Eclipse 3.4)</title><content type='html'>&lt;a style="color: rgb(0, 0, 0);" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://eclipse.org/ganymede"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SFGJL6XzYdI/AAAAAAAAADw/RDTMZtCbsu0/s320/ganymedeFriend.jpg" alt="" id="BLOGGER_PHOTO_ID_5211097081585033682" border="0" /&gt;&lt;/a&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;Only two weeks remaining and the next Eclipse Version 3.4 (&lt;span style="font-weight: bold;"&gt;Ganymede&lt;/span&gt;) can be downloaded. This time there are 24 projects together with simultan releases.&lt;br /&gt;&lt;br /&gt;It makes sense to start working with Ganymede - but even 24 projects are only a small part of the big Eclipse universe.&lt;br /&gt;&lt;br /&gt;So - what do I need in my project, what's not part of Ganymede:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eclipse.org/gmt/oaw/download/"&gt;openArchitectureWare 4.3&lt;/a&gt; runs successfully under Ganymede.&lt;br /&gt;&lt;br /&gt;EasyBeans - a "foreign" project - I already found the soution how to make it run under 3.4.&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="color: rgb(0, 0, 0);" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.eclipse.org/riena/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SFGJMKf7PrI/AAAAAAAAAD4/BL8Iko3FMYA/s320/riena_ei.jpg" alt="" id="BLOGGER_PHOTO_ID_5211097085914070706" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Eclipse Riena 1.0.M2 is only available (at the moment) for Eclipse 3.3.&lt;br /&gt;&lt;br /&gt;This blog will show you how to make Eclipse Riena run under Ganymede.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.eclipse.org/downloads/download.php?file=/rt/riena/Riena_Platform_1.0.0.M2-incubator.zip"&gt;download&lt;/a&gt; from Riena provides a target platform containing bundles from Eclipse SDK 3.3, Equinox 3.3 and Riena 10.M2 - also some "external" (Hessian, Log4J, ...).&lt;br /&gt;&lt;br /&gt;Please read my blog "&lt;a href="http://ekkes-corner.blogspot.com/2008/06/pde-target-platform-from-different.html"&gt;PDE Target Platform from different locations (Bugs)&lt;/a&gt;" before you go on.Because of these problems we have to build the target platform „manually“ from:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;                                    Eclipse &lt;a href="http://download.eclipse.org/eclipse/downloads/drops/S-3.4RC4-200806091311/index.php"&gt;Platform SDK 3.4&lt;/a&gt; (we're using the SDK as IDE and also as Host for the target platform)f&lt;/li&gt;&lt;li&gt;rom &lt;a href="http://download.eclipse.org/eclipse/equinox/drops/S-3.4RC4-200806091311/index.php"&gt;Equinox SDK 3.4&lt;/a&gt; some bundles which are not contained in the Platform SDK&lt;/li&gt;&lt;li&gt;from Riena M2 - download all *.riena.* Bundles, Hessian and Log4J&lt;/li&gt;&lt;/ul&gt;                                                                                                                           &lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                 Remarks:&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;                                        Log4J can be used from Riena distribution or from SpringSource Enterprise Bundle &lt;a href="http://www.springsource.com/repository/app/bundle/version/detail?name=com.springsource.org.apache.log4j&amp;amp;version=1.2.15&amp;amp;searchType=bundlesByName&amp;amp;searchQuery=log4j"&gt;Repository&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Problem with &lt;span style="font-family: courier new;"&gt;org.junit&lt;/span&gt; bundle from Platform SDK: If you followed the documentation "&lt;a href="http://wiki.eclipse.org/Riena_Getting_started"&gt;Riena Getting started&lt;/a&gt;" from Riena wiki and imported the bundle org.eclipse.riena.tests as Plug-in with Source into your workspace then you'll notice some errors, because Ganymede uses &lt;span style="font-family: courier new;"&gt;org.junit4&lt;/span&gt;. Please replace org.junit in project org.eclipse.riena.tests,  MANIFEST.MF, Dependencies --&gt; Required Plug-ins with  org.junit4 from Eclipse Platform SDK 3.4.                                                                                                      &lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;If you create the following folder - structure for your target platform, then you can use my prepared Target Definition Files (see below) and easyly create your target platform.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;                                    ${target_riena}/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;---- fromEquinoxSDK/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-------- eclipse/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;------------plugins/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;---- fromRienaM2/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-------- eclipse/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;------------plugins/                                                                                                                                                      &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here you can see the content of the plugins - folders:&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="color: rgb(0, 0, 0);" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SFGQGCb8mvI/AAAAAAAAAEA/vo6ChGTGprg/s1600-h/target+folder+from+sdk.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SFGQGCb8mvI/AAAAAAAAAEA/vo6ChGTGprg/s320/target+folder+from+sdk.png" alt="" id="BLOGGER_PHOTO_ID_5211104677252078322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Remark&lt;/span&gt;:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;bundle &lt;span style="font-family: courier new;"&gt;org.eclipse.equinox.log.1.1.0&lt;/span&gt; from Equinox 3.4 can't be used, because Riena uses a modified version&lt;span style="font-family: courier new;"&gt; org.eclipse.equinox.log.1.1.0.HEAD&lt;/span&gt; containing a class org.eclipse.equinox.log.Logger. Please use the HEAD version from Riena M2 and delete the bundle from Equinox 3.4 inside the folder of the target platform.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;a style="color: rgb(0, 0, 0);" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SFGQixxXPCI/AAAAAAAAAEI/-MwI-MGybeg/s1600-h/target+folder+from+riena.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SFGQixxXPCI/AAAAAAAAAEI/-MwI-MGybeg/s320/target+folder+from+riena.png" alt="" id="BLOGGER_PHOTO_ID_5211105170994707490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Target Definition File (2 different versions)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can create new Target Definition files using menu &lt;span style="font-style: italic;"&gt;File --&gt; New --&gt; Target Definition&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;To make it comfortable I've prepared files you can download, unzip and vopy into your workspace:&lt;br /&gt;&lt;a href="http://web.mac.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2008/6/12_Eclipse_Riena_in_Ganymede_%28Eclipse_3.4%29__starten_files/riena.target.zip"&gt;&lt;br /&gt;riena.target.zip&lt;/a&gt; und &lt;a href="http://web.mac.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2008/6/12_Eclipse_Riena_in_Ganymede_%28Eclipse_3.4%29__starten_files/riena_minimal.target.zip"&gt;riena_minimal.target.zip&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;riena_minimal contains only the smallest set of needed bundles to start a Riena server and to run the Riena Unit tests. Please dont forget to read the documentation &lt;a href="http://wiki.eclipse.org/Riena_Getting_started"&gt;Riena getting started&lt;/a&gt; from Riena wiki.&lt;br /&gt;&lt;br /&gt;Please create a new variable &lt;span style="font-family: courier new;"&gt;target_riena&lt;/span&gt; under &lt;span style="font-style: italic;"&gt;Preferences --&gt; Run/Debug --&gt; String Substitutions&lt;/span&gt; pointing to the root of the target platform folder.&lt;br /&gt;&lt;br /&gt;After opening the file riena.target in your workspace you should see:&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="color: rgb(0, 0, 0);" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SFGRAq6xgCI/AAAAAAAAAEQ/UJdOe7NNVSQ/s1600-h/riena+target+overview.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SFGRAq6xgCI/AAAAAAAAAEQ/UJdOe7NNVSQ/s320/riena+target+overview.png" alt="" id="BLOGGER_PHOTO_ID_5211105684551204898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="color: rgb(0, 0, 0);" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SFGRBwREMEI/AAAAAAAAAEY/MkK1HXN15_I/s1600-h/riena+target+content.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SFGRBwREMEI/AAAAAAAAAEY/MkK1HXN15_I/s320/riena+target+content.png" alt="" id="BLOGGER_PHOTO_ID_5211105703166750786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 0);"&gt;&lt;/span&gt;riena_minimal contains only 64 bundles instead of 126 bundles.&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="color: rgb(0, 0, 0);" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SFGRepJw_PI/AAAAAAAAAEg/BSu9MP_GovE/s1600-h/set+as+target.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SFGRepJw_PI/AAAAAAAAAEg/BSu9MP_GovE/s320/set+as+target.png" alt="" id="BLOGGER_PHOTO_ID_5211106199473290482" border="0" /&gt;&lt;/a&gt;If you click on &lt;span style="font-style: italic;"&gt;Set as Target Platform&lt;/span&gt; you can start using this target platform and easy change to another target.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Now have fun to start working with Riena 1.0.M2 under Ganymede.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One of my next blogs will show the use of Eclipse Riena together with EasyBeans in Ganymede.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: right; font-style: italic;"&gt;&lt;a href="http://ekkes-ecke.org/"&gt;&lt;span style="font-size:85%;"&gt;this blog in german&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: right; font-style: italic; color: rgb(0, 0, 0);"&gt;&lt;a href="http://ekkes-ecke.org/"&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ekkes-ecke.org/"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SFGR6_R3nxI/AAAAAAAAAEo/LWY4NLcmiTA/s320/de.png" alt="" id="BLOGGER_PHOTO_ID_5211106686449196818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-7085273354054307897?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=7085273354054307897' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/7085273354054307897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/7085273354054307897'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/06/eclipse-riena-getting-started-in.html' title='Eclipse Riena Getting Started in Ganymede (Eclipse 3.4)'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xv6Yjx9z9no/SFGJL6XzYdI/AAAAAAAAADw/RDTMZtCbsu0/s72-c/ganymedeFriend.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-3823203419956364776</id><published>2008-06-09T15:44:00.010+02:00</published><updated>2008-06-13T07:51:35.301+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Riena'/><category scheme='http://www.blogger.com/atom/ns#' term='Ganymede'/><category scheme='http://www.blogger.com/atom/ns#' term='PDE'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>PDE Target Platform from different locations (Bugs)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SE00mZf_H1I/AAAAAAAAADg/W6MGN8GMxKA/s1600-h/pde_target_overview.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SE00mZf_H1I/AAAAAAAAADg/W6MGN8GMxKA/s320/pde_target_overview.png" alt="" id="BLOGGER_PHOTO_ID_5209878178222251858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I'm using Eclipse Riena for my ERP project. Riena's version is actually 1.0.M2 for Eclipse 3.3.&lt;br /&gt;&lt;br /&gt;Riena provides an already configured target platform as &lt;a href="http://www.eclipse.org/downloads/download.php?file=/rt/riena/Riena_Platform_1.0.0.M2-incubator.zip"&gt;download&lt;/a&gt; - featuring bundles from Eclipse SDK, Equinox and Riena, also some 'foreign' bundles like Hessian, Log4J, ... - but all these bundles are from Eclipse Platform SDK / Equinox 3.3.&lt;br /&gt;                &lt;p class="Body"&gt;So I had to manage the task to build a new target platform designed to run with Eclipse 3.4 (actually version 3.4.RC3).&lt;br /&gt;&lt;/p&gt;                                      &lt;p class="Body"&gt;We need:&lt;br /&gt;&lt;/p&gt;                                          &lt;ul&gt;&lt;li&gt;&lt;span class="Aufzählungszeichen"  style="font-size:14;"&gt;&lt;/span&gt;Eclipse Platform SDK 3.4 (as IDE and target platform)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Aufzählungszeichen"  style="font-size:14;"&gt;&lt;/span&gt;Equinox SDK 3.4 (target platform)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Aufzählungszeichen"  style="font-size:14;"&gt;&lt;/span&gt;Riena - Bundles (target platform)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Aufzählungszeichen"  style="font-size:14;"&gt;&lt;/span&gt;other Bundles from Riena - distribution (target platform)&lt;/li&gt;&lt;/ul&gt;                                                                                                                                                                                               &lt;p class="Body"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="line-height: 25px;" class="style"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="Body"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="line-height: 25px;" class="style"&gt;Target Definition File (Bug using different locations and versions)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;                                      From my opinion the easiest (and comfortable) way in such situations is to create a &lt;span style="font-family:courier new;"&gt;Target Definition File&lt;/span&gt;: &lt;span style="font-style: italic;"&gt;Menu &lt;/span&gt;&lt;span class="style_1"&gt;&lt;span style="font-style: italic;"&gt;File --&gt; New --&gt; Target Definition&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SE00mUy9OmI/AAAAAAAAADY/8vUbl--Wfo8/s1600-h/riena_target3locs.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SE00mUy9OmI/AAAAAAAAADY/8vUbl--Wfo8/s320/riena_target3locs.png" alt="" id="BLOGGER_PHOTO_ID_5209878176959642210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="Body"&gt;As usual I'm working with variables, so the definitions are easy to port into other workspaces and Eclipse versions.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   Under &lt;span class="style_2"  style="font-family:courier new;"&gt;Overview&lt;/span&gt; I choose / add three locations: Riena, Equinox und SDK.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SE00mCNTzDI/AAAAAAAAADQ/kzmgry0JIp4/s1600-h/riena_target3locs_content.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SE00mCNTzDI/AAAAAAAAADQ/kzmgry0JIp4/s320/riena_target3locs_content.png" alt="" id="BLOGGER_PHOTO_ID_5209878171969899570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="Body"&gt;Under &lt;span class="style_2"  style="font-family:courier new;"&gt;Content&lt;/span&gt; I can select which of the plug-ins I want to use in my target platform.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Unfortunately it doesn't work as expected :-(&lt;br /&gt;&lt;/p&gt;                                                         If you try to add the plug-ins you're seeing only plug-ins from one location - there's no way to decide which plug-ins should be selected from which locations.&lt;br /&gt;&lt;br /&gt;&lt;p class="Body"&gt;&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=233095"&gt;Bug 233095 ([target] deal with multiple versions of bundles and different locations)&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;span style="line-height: 25px;" class="style"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="Body"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="line-height: 25px;" class="style"&gt;Target Platform Preferences (Bug using different locations and versions)&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   The next try: to build the target platform directly using &lt;span style="font-style: italic;" class="style_1"&gt;Preferences --&gt; Plug-in Development --&gt; Target Platform&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SE00lscEK9I/AAAAAAAAADI/b_IkBLY2C0g/s1600-h/riena_prefs_3loc.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SE00lscEK9I/AAAAAAAAADI/b_IkBLY2C0g/s320/riena_prefs_3loc.png" alt="" id="BLOGGER_PHOTO_ID_5209878166126210002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="Body"&gt;Using &lt;span class="style_2"  style="font-family:courier new;"&gt;Add...&lt;/span&gt; different locations can be selected. If &lt;span class="style_2"  style="font-family:courier new;"&gt;Group plug-ins by location&lt;/span&gt; is marked you can see all plug-ins from these locations.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Then its possible to select the bundles you need from each of the 3 locations (Riena, SDK, Equinox). The example above shows &lt;span style="font-family:courier new;"&gt;110 of 467 bundles selected&lt;/span&gt;.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Doesn't this look nice ? Yes - and after hitting &lt;span class="style_2"  style="font-family:courier new;"&gt;Apply&lt;/span&gt; you can start your Riena - Server, run Tests etc.&lt;br /&gt;&lt;/p&gt;&lt;p class="Body"&gt;Now the best you can do is to never restart Eclipse ;-) ... after restarting eclipse you'll see:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SE00lSYAlQI/AAAAAAAAADA/ANv-0M09OAI/s1600-h/riena_prefs_3locReopen.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SE00lSYAlQI/AAAAAAAAADA/ANv-0M09OAI/s320/riena_prefs_3locReopen.png" alt="" id="BLOGGER_PHOTO_ID_5209878159129875714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="Body"&gt;Now there are only 53 instead of 110 plug-ins (bundles) selected for your target platform  - and the selected ones are other ones then before.&lt;br /&gt;&lt;/p&gt;                                      &lt;p class="Body"&gt;&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=233096"&gt;Bug 233096 Preferences - PDE - target platform - after restart selection changed&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;So because of these two bugs its not possible to build target platforms from some locations if there are multiple versions of plug-ins.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;&lt;br /&gt;&lt;/p&gt;                   &lt;p style="padding-bottom: 0pt;" class="Body"&gt;BTW: Please vote for bugs 233095 and 233096, if you also need to be fixed. thx.&lt;/p&gt;&lt;p class="Body"&gt;&lt;span style="font-size:78%;"&gt;&lt;a style="font-style: italic;" href="http://ekkes-ecke.org/"&gt;this blog in german:&lt;/a&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ekkes-ecke.org/"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SElAJ4r9tRI/AAAAAAAAACs/Ei5heHO6Vyc/s320/de.png" alt="" id="BLOGGER_PHOTO_ID_5208764982610474258" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-3823203419956364776?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=3823203419956364776' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/3823203419956364776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/3823203419956364776'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/06/pde-target-platform-from-different.html' title='PDE Target Platform from different locations (Bugs)'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Xv6Yjx9z9no/SE00mZf_H1I/AAAAAAAAADg/W6MGN8GMxKA/s72-c/pde_target_overview.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-921800320303305744</id><published>2008-06-05T16:17:00.029+02:00</published><updated>2008-06-13T07:52:48.440+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EasyBeans'/><category scheme='http://www.blogger.com/atom/ns#' term='Ganymede'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGI'/><title type='text'>EasyBeans und Equinox</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://easybeans.org/"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SEkV06P_UXI/AAAAAAAAABM/uL7hXnMunOE/s320/easybeans.png" alt="" id="BLOGGER_PHOTO_ID_5208718442764390770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=225109"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SEkV1PrylLI/AAAAAAAAABU/e_l_9QSmXjw/s320/equinox5.png" alt="" id="BLOGGER_PHOTO_ID_5208718448518141106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="padding-top: 0pt;" class="Body"&gt;After the decision to design my upcoming ERP solution as OSGI - Client/Server application using Eclipse Riena (Remoting, ObjectTransactions), Equinox (OSGI) and Hibernate (JPA / ORM) one point remains open: how to integrate EJB (Stateless and Stateful Sessionbeans) ?&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;The answer: there's a great open source EJB - OSGI solution: &lt;a href="http://easybeans.org/"&gt;EasyBeans&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p class="Body"&gt;First step:&lt;/p&gt;&lt;p class="Body"&gt;Integrate EasyBeans with Eclipse 3.4 + Equinox 3.4. (EasyBeans default OSGI framework is &lt;a href="http://felix.apache.org/site/index.html"&gt;Felix&lt;/a&gt; from Apache)&lt;br /&gt;&lt;/p&gt;                                                         &lt;p class="Body"&gt;... here's my HowTo:&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;What do we need: Eclipse Platform SDK, Equinox SDK and Easybeans OSGI - Hibernate-Version. All tests are done and are only running under Eclipse 3.4. At the moment of writing this blog Eclipse 3.4.RC3 is the newest one and EasyBeans OSGI 1.0.0:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;                   Eclipse Platform SDK &lt;a href="http://download.eclipse.org/eclipse/downloads/drops/S-3.4RC3-200805301730/index.php"&gt;download&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Equinox SDK &lt;a href="http://download.eclipse.org/eclipse/equinox/drops/S-3.4RC3-200805301730/download.php?dropFile=eclipse-equinox-SDK-3.4RC3.zip"&gt;download&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EasyBeans OSGI Hibernate &lt;a href="http://download.fr.forge.objectweb.org/easybeans/ow2-easybeans-osgi-1.0.0-hibernate.tar.gz"&gt;download&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class="Body"&gt;We have to differentiate between Eclipse as IDE and as target platform. At first you should install Eclipse Platform SDK as IDE as usual.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;If you want to follow this tutorial then you should create a folder structure for the target platform as below.&lt;br /&gt;&lt;/p&gt;&lt;div style="text-align: left;"&gt;                   To make the configuration and installation portable, we define a variable in Eclipse pointing to the root of our target files: &lt;span style="line-height: 18px;font-family:courier new;" class="style" &gt;${target_easybeans}&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SEkV1aVW1PI/AAAAAAAAABc/PaAxq_eZ1yk/s1600-h/prefs_string_substitution.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SEkV1aVW1PI/AAAAAAAAABc/PaAxq_eZ1yk/s320/prefs_string_substitution.png" alt="" id="BLOGGER_PHOTO_ID_5208718451376837874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Then we create the following structure at&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;${target_easybeans}/&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SEkV15sbq-I/AAAAAAAAABk/IJu_h0vgPH0/s1600-h/target_folder_structure.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SEkV15sbq-I/AAAAAAAAABk/IJu_h0vgPH0/s320/target_folder_structure.png" alt="" id="BLOGGER_PHOTO_ID_5208718459795123170" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="Body"&gt;No we have to copy the needed plug-ins (bundles).&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Which plug-ins you should copy depends on the needs of your project - to be flexible I made examples for two different target platforms: easybeans_target_full and easybeans_target_minimal.&lt;br /&gt;&lt;/p&gt;                   You can download the two target definition files to import them into your Eclipse project: &lt;a href="http://web.mac.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2008/6/5_Easybeans_und_Equinox_files/easybeans_target_full.target.zip"&gt;easybeans_target_full.target.zip&lt;/a&gt; and &lt;a href="http://web.mac.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2008/6/5_Easybeans_und_Equinox_files/easybeans_target_minimal.target.zip"&gt;easybeans_target_minimal.target.zip&lt;/a&gt;.&lt;br /&gt;&lt;p style="font-weight: bold;" class="paragraph_style_1"&gt;&lt;span style="font-size:130%;"&gt;easybeans_target_full (complete environment)&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;                                      &lt;p class="Body"&gt;please copy into &lt;span style="font-family:courier new;"&gt;${target_easybeans}/easybeans_target_full/eclipse/configuration/plugins&lt;/span&gt;:&lt;span class="Aufzählungszeichen"  style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Aufzählungszeichen"  style="font-size:100%;"&gt;all from&lt;/span&gt; Eclipse Platform SDK plugins - folder&lt;span class="Aufzählungszeichen"  style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Aufzählungszeichen"  style="font-size:100%;"&gt;all from &lt;/span&gt;&lt;span style="font-size:100%;"&gt;Equinox SDK plugins - Ordner, if not contained in Platform SDK - Plugins)&lt;/span&gt;&lt;span class="Aufzählungszeichen"  style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Aufzählungszeichen"  style="font-size:100%;"&gt;from&lt;/span&gt;&lt;span style="font-size:100%;"&gt; ow2-easybeans-osgi-1.0.0/bundles: all without *.felix.*&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;                                                                                                                                                                    &lt;p style="font-weight: bold;" class="paragraph_style_1"&gt;&lt;span style="font-size:130%;"&gt;easybeans_target_minimal (Target Platform only with needed bundles)&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;                                      &lt;p class="Body"&gt;please copy into &lt;span style="font-family:courier new;"&gt;${target_easybeans}/easybeans_target_minimal/eclipse/configuration/plugins&lt;/span&gt;:&lt;br /&gt;&lt;/p&gt;&lt;p class="Body"&gt;&lt;span class="Aufzählungszeichen"  style="font-size:100%;"&gt;from&lt;/span&gt;&lt;span style="font-size:100%;"&gt; Equinox SDK:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;                   &lt;ul&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;org.eclipse.osgi&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;org.eclipse.equinox.common&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;org.eclipse.osgi.services&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;org.eclipse.equinox.cm&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;org.eclipse.equinox.ds&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;org.eclipse.equinox.log&lt;/span&gt;&lt;/li&gt;&lt;li style="line-height: 21px; padding-left: 13px; text-indent: -13px;" class="full-width"&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;org.eclipse.equinox.util&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: left;"&gt;&lt;span style="line-height: 18px;font-size:100%;" class="style" &gt;from&lt;/span&gt;&lt;span style="font-size:100%;"&gt; EasyBeans bundles:&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;ow2-bundles-externals-commons-logging&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-core&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-component-carol&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-component-hsqldb&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-component-jdbcpool&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-component-joram&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-component-jotm&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-component-quartz&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-agent&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class="Body"&gt;if wanted also the examples - bundles from EasyBeans:&lt;br /&gt;&lt;/p&gt;                                                                                                                                                        &lt;ul&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-example-osgi&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-examples-entitybean&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-examples-mdb&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-examples-migrationejb21&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-examples-security&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-examples-statefulbean&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-examples-statelessbean&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-examples-timerservice&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;                                      &lt;p class="paragraph_style_3"&gt;&lt;span style="font-weight: bold;" class="style_1"&gt;Warning&lt;/span&gt;&lt;span class="style_2"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;                   &lt;ol&gt;&lt;li value="1" style="line-height: 17px; padding-left: 15px; text-indent: -15px;" class="full-width"&gt;                       &lt;p style="text-indent: -15px;" class="paragraph_style_4"&gt;&lt;span class="style_2"&gt;Bundles from EasyBeans (Version 1.0.0) were not named like Equinox - rules: &lt;/span&gt;&lt;span style="line-height: 13px;font-family:courier new;" class="style_3" &gt;easybeans-core&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;-&lt;/span&gt;1.0.0&lt;/span&gt;&lt;span class="style_2"&gt; should be &lt;/span&gt;&lt;span style="line-height: 13px;font-family:courier new;" class="style_3" &gt;easybeans-core&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;_&lt;/span&gt;1.0.0&lt;/span&gt;&lt;span class="style_2"&gt;. You can simple rename the bundles (change minus inti underline) or to use the name together with the version if adding bundles to  bundle.info from config.ini. (&lt;/span&gt;&lt;a title="http://jira.easybeans.org/browse/EZB-274" onkeypress="window.open(this.href); return false;" onclick="window.open(this.href); return false;" href="http://jira.easybeans.org/browse/EZB-274" class="style_2"&gt;Bug JIRA&lt;/a&gt;&lt;span class="style_2"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;                     &lt;/li&gt;&lt;li style="line-height: 17px; padding-left: 15px; text-indent: -15px;" class="full-width" value="2"&gt;                       &lt;p style="text-indent: -15px;" class="paragraph_style_4"&gt;&lt;span class="style_2"&gt; Bundle &lt;/span&gt;&lt;span style="line-height: 14px;font-family:courier new;" class="style_4" &gt;easybeans-component-joram-1.0.0&lt;/span&gt;&lt;span class="style_2"&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;contains a wrong import in MANIFEST.MF: &lt;/span&gt;&lt;span style="line-height: 17px;" class="style_5"&gt;&lt;span style="font-family:courier new;"&gt;com.scalagent.scheduler&lt;/span&gt; This import must be removed&lt;/span&gt;&lt;span class="style_2"&gt;. (&lt;/span&gt;&lt;a title="http://jira.easybeans.org/browse/EZB-272" onkeypress="window.open(this.href); return false;" onclick="window.open(this.href); return false;" href="http://jira.easybeans.org/browse/EZB-272" class="style_2"&gt;Bug JIRA&lt;/a&gt;&lt;span class="style_2"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;                     &lt;/li&gt;&lt;/ol&gt;Its always a good idea to define Target Definition files for your target platforms in Eclipse: &lt;span style="font-style: italic;"&gt;Menu File--&gt;New--&gt;Target Definition&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SEkV2CQ01sI/AAAAAAAAABs/giXc1oxwSns/s1600-h/targetLocation.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SEkV2CQ01sI/AAAAAAAAABs/giXc1oxwSns/s320/targetLocation.png" alt="" id="BLOGGER_PHOTO_ID_5208718462095251138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After defining the targets you can change to this target with one click from within the target definition file or you do it directly from &lt;span style="font-style: italic;"&gt;Preferences - Plug-in Development - Target Platform&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SEkWY5tYoAI/AAAAAAAAAB0/9df4DlG1Eqs/s1600-h/prefs_target_platform.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SEkWY5tYoAI/AAAAAAAAAB0/9df4DlG1Eqs/s320/prefs_target_platform.png" alt="" id="BLOGGER_PHOTO_ID_5208719061094539266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Please check the box (yellow marked). Because we want to build the target platform only using the plug-ins (bundles) stored at target platform location. (see the &lt;a href="http://mea-bloga.blogspot.com/2008/04/new-target-platform-preference.html"&gt;blog&lt;/a&gt; from Chris Aniszczyk)&lt;br /&gt;&lt;br /&gt;To start EasyBeans easy ;-) in Eclipse we create OSGI Launch configurations.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Run Configurations... &lt;/span&gt;               &lt;br /&gt;We need two different OSGI Launch configurations:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SEkWZGml4nI/AAAAAAAAAB8/O2mcDw5BDD4/s1600-h/osgi_framework_configs.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SEkWZGml4nI/AAAAAAAAAB8/O2mcDw5BDD4/s320/osgi_framework_configs.png" alt="" id="BLOGGER_PHOTO_ID_5208719064555709042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;                  &lt;ul&gt;&lt;li&gt;first launcher uses a configuration file (config.ini in folder configuration), where all bundles were listed under property bundle.info&lt;/li&gt;&lt;li&gt;second launcher runs without using a configuration file - all bundles and arguments are defined directly in the launch configuration                     &lt;/li&gt;&lt;/ul&gt;                       &lt;p class="Body"&gt;&lt;span style="line-height: 28px;" class="style_6"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;OSGI Framework Launch Configuration with config.ini&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;                   &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SEkWZPIas9I/AAAAAAAAACE/xYV-kdCEcMA/s1600-h/bundleinfo_bundles.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SEkWZPIas9I/AAAAAAAAACE/xYV-kdCEcMA/s320/bundleinfo_bundles.png" alt="" id="BLOGGER_PHOTO_ID_5208719066845066194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="Body"&gt;There are no bundles selected from target platform, because they are all listed inside config.ini.&lt;br /&gt;&lt;/p&gt;              &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SEkWZQeTDLI/AAAAAAAAACM/Vp3baokBKGE/s1600-h/bundleinfo_args.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SEkWZQeTDLI/AAAAAAAAACM/Vp3baokBKGE/s320/bundleinfo_args.png" alt="" id="BLOGGER_PHOTO_ID_5208719067205274802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="Body"&gt;The most important program argument is &lt;span style="font-family:courier new;"&gt;-configuration&lt;/span&gt;, you also see the use of the defined variable. Inside this configuration folder you have to place the config.ini.&lt;br /&gt;&lt;/p&gt;                                      Content of &lt;span style="font-family:courier new;"&gt;config.ini&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;Its no application - we only want to run these bundles:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;eclipse.ignoreApp=true&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;osgi.noShutdown=true&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Following bundles have to be installed and partly to be started from OSGI framework:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;osgi.bundles=\&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;org.eclipse.equinox.common&lt;span style="font-weight: bold;"&gt;@&lt;span style="color: rgb(255, 0, 0);"&gt;2&lt;/span&gt;:start&lt;/span&gt;, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;org.eclipse.osgi.services&lt;span style="font-weight: bold;"&gt;@start&lt;/span&gt;, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;org.eclipse.equinox.cm&lt;span style="font-weight: bold;"&gt;@start&lt;/span&gt;, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;org.eclipse.equinox.ds&lt;span style="font-weight: bold;"&gt;@star&lt;/span&gt;t, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;org.eclipse.equinox.log&lt;span style="font-weight: bold;"&gt;@start&lt;/span&gt;, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;org.eclipse.equinox.util&lt;span style="font-weight: bold;"&gt;@start&lt;/span&gt;,  \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;ow2-bundles-externals-commons-logging-1.0.5&lt;span style="font-weight: bold;"&gt;@start&lt;/span&gt;, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-core-1.0.0, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-component-carol-1.0.0, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-component-hsqldb-1.0.0, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-component-jdbcpool-1.0.0, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-component-joram-1.0.0, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-component-jotm-1.0.0, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-component-quartz-1.0.0, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-agent-1.0.0&lt;span style="font-weight: bold;"&gt;@start&lt;/span&gt;, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-example-osgi-1.0.0, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-examples-entitybean-1.0.0, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-examples-mdb-1.0.0, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-examples-migrationejb21-1.0.0, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-examples-security-1.0.0, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-examples-statefulbean-1.0.0, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-examples-statelessbean-1.0.0, \&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;easybeans-examples-timerservice-1.0.0&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;                                                                                                                                                                                                                                                                                                                                                                                                                                                     Informations about bootdelegation - these packages are loaded from system classloader:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;org.osgi.framework.bootdelegation=sun.*,com.sun.*&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;System packages - these packages are exported from the OSGI system bundle and can be imported from other bundles:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt;org.osgi.framework.system.packages=org.osgi.framework; version=1.3.0, \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.accessibility; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.activity; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.imageio; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.imageio.event; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.imageio.metadata; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.imageio.plugins.bmp; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.imageio.plugins.jpeg; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.imageio.spi; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.imageio.stream; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.management; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.management.loading; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.management.modelmbean; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.management.monitor; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.management.openmbean; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.management.relation; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.management.remote; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.management.remote.rmi; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.management.timer; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.naming; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.naming.directory; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.naming.event; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.naming.ldap; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.naming.spi; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.net; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.net.ssl; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.print; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.print.attribute; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.print.attribute.standard; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.print.event; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.rmi; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.rmi.CORBA; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.rmi.ssl; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.security.auth; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.security.auth.callback; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.security.auth.kerberos; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.security.auth.login; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.security.auth.spi; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.security.auth.x500; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.security.sasl; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.sound.midi; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.sound.midi.spi; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.sound.sampled; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.sound.sampled.spi; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.sql; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.sql.rowset; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.sql.rowset.serial; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.sql.rowset.spi; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.swing; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.swing.border; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.swing.colorchooser; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.swing.event; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.swing.filechooser; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.swing.plaf; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.swing.plaf.basic; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.swing.plaf.metal; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.swing.plaf.multi; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.swing.plaf.synth; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.swing.table; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.swing.text; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.swing.text.html; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.swing.text.html.parser; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.swing.text.rtf; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.swing.tree; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.swing.undo; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.xml; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.xml.datatype; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.xml.namespace; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.xml.parsers; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.xml.transform; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.xml.transform.dom; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.xml.transform.sax; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.xml.transform.stream; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.xml.validation; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; javax.xml.xpath; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.ietf.jgss; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.CORBA; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.CORBA_2_3; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.CORBA_2_3.portable; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.CORBA.DynAnyPackage; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.CORBA.ORBPackage; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.CORBA.portable; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.CORBA.TypeCodePackage; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.CosNaming; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.CosNaming.NamingContextExtPackage; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.CosNaming.NamingContextPackage; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.Dynamic; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.DynamicAny; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.DynamicAny.DynAnyFactoryPackage; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.DynamicAny.DynAnyPackage; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.IOP; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.IOP.CodecFactoryPackage; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.IOP.CodecPackage; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.Messaging; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.PortableInterceptor; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.PortableInterceptor.ORBInitInfoPackage; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.PortableServer; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.PortableServer.CurrentPackage; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.PortableServer.POAManagerPackage; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.PortableServer.POAPackage; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.PortableServer.portable; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.PortableServer.ServantLocatorPackage; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.SendingContext; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.stub.java.rmi; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.omg.stub.javax.management.remote.rmi; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.w3c.dom; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.w3c.dom.bootstrap; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.w3c.dom.css; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.w3c.dom.events; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.w3c.dom.html; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.w3c.dom.ls; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.w3c.dom.ranges; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.w3c.dom.stylesheets; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.w3c.dom.traversal; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.w3c.dom.views; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.xml.sax; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.xml.sax.ext; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; org.xml.sax.helpers; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; sun.rmi.server; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; sun.rmi.transport; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; sun.rmi.registry; \&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="line-height: 18px;font-size:85%;" class="style" &gt; version=1.5.0&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SEkWa1X_vvI/AAAAAAAAACU/79KqXI4R3KE/s1600-h/bundleinfo_settings.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SEkWa1X_vvI/AAAAAAAAACU/79KqXI4R3KE/s320/bundleinfo_settings.png" alt="" id="BLOGGER_PHOTO_ID_5208719094290824946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="Body"&gt;Even while testing its a good idea to use an own location for the Configuration Area in the settings of the launch configuration. (We also use our above defined variable here).&lt;br /&gt;&lt;/p&gt;                   Here you can download the launch configuration: &lt;a href="http://web.mac.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2008/6/5_Easybeans_und_Equinox_files/easybeans%20%28bundle.info%20in%20config.ini%29.launch.zip"&gt;easybeans (bundle.info in config.file).launch.zip&lt;/a&gt;&lt;br /&gt;And the config.ini for this scenario: &lt;a href="http://web.mac.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2008/6/5_Easybeans_und_Equinox_files/config.ini.zip"&gt;config.ini.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="line-height: 28px;" class="style_6"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;OSGI Framework Launch Configuration without config.ini&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SEkWt4OvF7I/AAAAAAAAACc/fCPkhceT6pY/s1600-h/launch_bundles.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SEkWt4OvF7I/AAAAAAAAACc/fCPkhceT6pY/s320/launch_bundles.png" alt="" id="BLOGGER_PHOTO_ID_5208719421474805682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="Body"&gt;In this case you have to select the needed bundles in the launcher.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Please watch the Start Level: equinox.common needs Level 2, all the other bundles get automatically the Default Start Level 4 and then the easybeans.agent with Start Level 5 will be started.&lt;br /&gt;&lt;/p&gt;                   The other bundles from easybeans have set Auto-Start = false, because its the task of the easybeans.agent to start them in the right order.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SEkWualxgyI/AAAAAAAAACk/ZC76Up7CQlg/s1600-h/launch_args.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_Xv6Yjx9z9no/SEkWualxgyI/AAAAAAAAACk/ZC76Up7CQlg/s320/launch_args.png" alt="" id="BLOGGER_PHOTO_ID_5208719430698238754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="Body"&gt;At programm arguments there's no &lt;span style="font-family:courier new;"&gt;-configuration&lt;/span&gt; - of course all of them now have to be defined as VM Arguments.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Please watch, that &lt;span style="font-family:courier new;"&gt;-Dorg.osgi.framework.system.packages&lt;/span&gt; has to be entered without any spaces - the other arguments are identical to the content of the config.ini in the first scenario.&lt;br /&gt;&lt;/p&gt;                   And here's the launch configuration to Download: &lt;a href="http://web.mac.com/ekkehard.gentz/ekkes-corner/blog/Eintr%C3%A4ge/2008/6/5_Easybeans_und_Equinox_files/easybeans%20%28launch%20config%29.launch.zip"&gt;easybeans (launch config).launch.zip&lt;/a&gt;&lt;br /&gt;&lt;p class="Body"&gt;&lt;span style="line-height: 23px;" class="style_7"&gt;&lt;span style="font-weight: bold;"&gt;YOU ARE READ&lt;/span&gt;Y&lt;/span&gt; - all configuration and installation is done and you can run EasyBeans with different target platforms and different OSGI Framework launch configurations.&lt;br /&gt;&lt;/p&gt;                   &lt;p class="Free_Form"  style="font-family:courier new;"&gt;&lt;span style="line-height: 16px;" class="style"&gt;Framework is launched.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              &lt;p class="Free_Form"&gt;&lt;span style="line-height: 16px;font-family:courier new;" class="style" &gt;idState       Bundle&lt;br /&gt;0ACTIVE      org.eclipse.osgi_3.4.0.v20080521-1400&lt;br /&gt;1ACTIVE      org.eclipse.equinox.common_3.4.0.v20080421-2006&lt;br /&gt;2ACTIVE      org.eclipse.osgi.services_3.1.200.v20071203&lt;br /&gt;3ACTIVE      org.eclipse.equinox.cm_1.0.0.v20080509-1800&lt;br /&gt;4ACTIVE      org.eclipse.equinox.ds_1.0.0.v20080427-0830&lt;br /&gt;5ACTIVE      org.eclipse.equinox.log_1.1.0.v20080414&lt;br /&gt;6ACTIVE      org.eclipse.equinox.util_1.0.0.v20080414&lt;br /&gt;7ACTIVE      org.ow2.bundles.ow2-bundles-externals-commons-logging_1.0.5&lt;br /&gt;8ACTIVE      org.ow2.easybeans.core_1.0.0&lt;br /&gt;9ACTIVE      org.ow2.easybeans.component.carol_1.0.0&lt;br /&gt;10ACTIVE      org.ow2.easybeans.component.hsqldb_1.0.0&lt;br /&gt;11ACTIVE      org.ow2.easybeans.component.jdbcpool_1.0.0&lt;br /&gt;12ACTIVE      org.ow2.easybeans.component.joram_1.0.0&lt;br /&gt;13ACTIVE      org.ow2.easybeans.component.jotm_1.0.0&lt;br /&gt;14ACTIVE      org.ow2.easybeans.component.quartz_1.0.0&lt;br /&gt;15ACTIVE      org.ow2.easybeans.agent_1.0.0&lt;br /&gt;16RESOLVED    org.ow2.easybeans.examples.osgi_1.0.0&lt;br /&gt;17RESOLVED    org.ow2.easybeans.examples.entitybean_1.0.0&lt;br /&gt;18RESOLVED    org.ow2.easybeans.examples.messagedriven_1.0.0&lt;br /&gt;19RESOLVED    org.ow2.easybeans.examples.migrationejb21_1.0.0&lt;br /&gt;20RESOLVED    org.ow2.easybeans.examples.security_1.0.0&lt;br /&gt;21RESOLVED    org.ow2.easybeans.examples.stateful_1.0.0&lt;br /&gt;22RESOLVED    org.ow2.easybeans.examples.stateless_1.0.0&lt;br /&gt;23RESOLVED    org.ow2.easybeans.examples.timer_1.0.0&lt;/span&gt;&lt;span style="line-height: 15px;" class="style_5"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;                   &lt;p class="Body"&gt;Good luck and have fun with EasyBeans. In some days I'll report my experiences how to run  EasyBeans and Eclipse Riena together.&lt;/p&gt;&lt;p class="Body"&gt;&lt;span style="font-size:78%;"&gt;&lt;a style="font-style: italic;" href="http://ekkes-ecke.org/"&gt;this blog in german:&lt;/a&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ekkes-ecke.org/"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SElAJ4r9tRI/AAAAAAAAACs/Ei5heHO6Vyc/s320/de.png" alt="" id="BLOGGER_PHOTO_ID_5208764982610474258" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-921800320303305744?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=921800320303305744' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/921800320303305744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/921800320303305744'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/06/easybeans-und-equinox.html' title='EasyBeans und Equinox'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xv6Yjx9z9no/SEkV06P_UXI/AAAAAAAAABM/uL7hXnMunOE/s72-c/easybeans.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-6359895724685989929</id><published>2008-06-05T14:13:00.009+02:00</published><updated>2008-06-13T07:53:20.366+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ganymede'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Eclipse Ganymede ante portas</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://divby0.blogspot.com/2008/05/ganymede-poster-contest.html"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_Xv6Yjx9z9no/SEfcIcBgccI/AAAAAAAAAA0/N6DWolfUd5o/s320/Day_The_Net_Stood_Still.png" alt="" id="BLOGGER_PHOTO_ID_5208373531596845506" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://divby0.blogspot.com/2008/05/ganymede-poster-contest.html"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_Xv6Yjx9z9no/SEfcI8BgcdI/AAAAAAAAAA8/p_amq_rdBkU/s320/p2_Came_From_Beneath_Equinox.png" alt="" id="BLOGGER_PHOTO_ID_5208373540186780114" border="0" /&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;&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;Same procedure as every year: a new Eclipse release is coming: Eclipse 3.4 (Ganymede). There's no other software project publishing every year a new release at the same day.&lt;br /&gt;&lt;br /&gt;Since some weeks I'm working daily using the 3.4 Milestones and you should do the same: &lt;a href="http://download.eclipse.org/eclipse/downloads/drops/S-3.4RC3-200805301730/index.php"&gt;download&lt;/a&gt; the actual release candidate and test your environment.&lt;br /&gt;&lt;br /&gt;Enhancements in Databinding, PDE Tooling and Equinox are most important for me - best you take a look at the "&lt;a href="http://download.eclipse.org/eclipse/downloads/drops/S-3.4M7-200805020100/eclipse-news-M7.html"&gt;New and Noteworthy&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;Something problematic is the new &lt;a href="http://download.eclipse.org/eclipse/downloads/drops/S-3.4M7-200805020100/eclipse-news-M7.html"&gt;P2&lt;/a&gt; - replacing the old Update mechanism. In 3.4 Eclipse - Installations can share a bundle pool. Loosing the external locations for bundles is hard for me, because I use them heavy.&lt;br /&gt;&lt;br /&gt;Also using &lt;a href="http://toedter.com/blog/?p=24"&gt;P2 in RCP applications&lt;/a&gt; is hard and still has some bugs. But from my opinion we should give P2 a chance - but there are hot discussions at &lt;a href="http://planeteclipse.org/planet/"&gt;PlanetEclipse&lt;/a&gt;.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ekkes-ecke.org/"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_Xv6Yjx9z9no/SEffCsBgceI/AAAAAAAAABE/tkza5-ZQJ7E/s200/de.png" alt="" id="BLOGGER_PHOTO_ID_5208376731347481058" border="0" /&gt;&lt;/a&gt; &lt;a href="http://ekkes-ecke.org/"&gt;&lt;span style="font-size:78%;"&gt;blog in german&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-6359895724685989929?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=6359895724685989929' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/6359895724685989929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/6359895724685989929'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/06/eclipse-ganymede-ante-portas.html' title='Eclipse Ganymede ante portas'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Xv6Yjx9z9no/SEfcIcBgccI/AAAAAAAAAA0/N6DWolfUd5o/s72-c/Day_The_Net_Stood_Still.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5484177613731225131.post-3018970174928875785</id><published>2008-05-28T09:16:00.004+02:00</published><updated>2008-05-30T07:59:24.017+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='private'/><title type='text'>about this blog</title><content type='html'>in the past I blogged only in german, but there were always people asking for an english translation. so I have decided to blog in both languages: in german at &lt;a href="http://ekkes-ecke.org/"&gt;http://ekkes-ecke.org&lt;/a&gt; and all the technical stuff also in english here.&lt;br /&gt;ekke&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5484177613731225131-3018970174928875785?l=ekkes-corner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5484177613731225131&amp;postID=3018970174928875785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/3018970174928875785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5484177613731225131/posts/default/3018970174928875785'/><link rel='alternate' type='text/html' href='http://ekkes-corner.blogspot.com/2008/05/about-this-blog.html' title='about this blog'/><author><name>ekke</name><uri>http://www.blogger.com/profile/12524911202665703266</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://gentz-software.de/ekke/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
