<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>SOA@WORK</title><link>http://www.soa-at-work.com/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/soaatwork" /><description>{by Eduard Hildebrandt}</description><language>en</language><managingEditor>noreply@blogger.com (Eduard Hildebrandt)</managingEditor><lastBuildDate>Wed, 20 Jun 2012 07:50:12 PDT</lastBuildDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">9</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">25</openSearch:itemsPerPage><feedburner:info uri="soaatwork" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><media:copyright>Copyright by Eduard Hildebrandt. All rights reserved.</media:copyright><media:thumbnail url="http://1.bp.blogspot.com/_h_UWOexR7M8/Sy-6ieVyCLI/AAAAAAAAB7Q/N8zqdYFNRck/s1600/soa-at-work-icon.png" /><media:keywords>soa,service,oriented,architecture,webservice,soap,wsdl,xml,java,developer,practice,eai,enterprise,application,integration,esb,jms,apache,cxf,camel,activemq,osgi</media:keywords><media:category scheme="http://www.itunes.com/dtds/podcast-1.0.dtd">Technology/Software How-To</media:category><itunes:owner><itunes:email>webmaster@soa-at-work.com</itunes:email><itunes:name>Eduard Hildebrandt</itunes:name></itunes:owner><itunes:author>Eduard Hildebrandt</itunes:author><itunes:explicit>no</itunes:explicit><itunes:image href="http://1.bp.blogspot.com/_h_UWOexR7M8/Sy-6ieVyCLI/AAAAAAAAB7Q/N8zqdYFNRck/s1600/soa-at-work-icon.png" /><itunes:keywords>soa,service,oriented,architecture,webservice,soap,wsdl,xml,java,developer,practice,eai,enterprise,application,integration,esb,jms,apache,cxf,camel,activemq,osgi</itunes:keywords><itunes:subtitle>Service Orientead Architecture in der Praxis</itunes:subtitle><itunes:summary>Der SOA@WORK Videopodcast berichtet über Erfahrungen, stellt Fragen und zeigt Lösungen wie man service orientierte Architektur in der Praxis umsetzen kann.&#xD;
</itunes:summary><itunes:category text="Technology"><itunes:category text="Software How-To" /></itunes:category><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license><feedburner:emailServiceId>soaatwork</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://www.podnova.com/add.srf?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://www.podnova.com/img_chicklet_podnova.gif">Subscribe with Podnova</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://odeo.com/listen/subscribe?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://odeo.com/img/badge-channel-black.gif">Subscribe with ODEO</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fsoaatwork" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item><title>Trees and Hierarchies in SQL</title><link>http://feedproxy.google.com/~r/soaatwork/~3/ZqrIMk3qyEc/trees-and-hierarchies-in-sql.html</link><author>webmaster@soa-at-work.com (Eduard Hildebrandt)</author><pubDate>Wed, 18 May 2011 02:03:10 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2613749938555639069.post-4196408376122320304</guid><description>This is my presentation about Trees and Hierarchies in SQL, which I gave at the Code Camp in &lt;a href="http://www.fiz-karlsruhe.de/"&gt;FIZ Karlsruhe&lt;/a&gt;:&lt;br /&gt;
&lt;div id="__ss_8007250" style="width: 425px;"&gt;&lt;b style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/ehildebrandt/trees-and-hierarchies-in-sql" title="Trees and Hierarchies in SQL"&gt;Trees and Hierarchies in SQL&lt;/a&gt;&lt;/b&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/8007250" width="425"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=ZqrIMk3qyEc:akMSCNzcqwk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=ZqrIMk3qyEc:akMSCNzcqwk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=ZqrIMk3qyEc:akMSCNzcqwk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=ZqrIMk3qyEc:akMSCNzcqwk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=ZqrIMk3qyEc:akMSCNzcqwk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=ZqrIMk3qyEc:akMSCNzcqwk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=ZqrIMk3qyEc:akMSCNzcqwk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=ZqrIMk3qyEc:akMSCNzcqwk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/soaatwork/~4/ZqrIMk3qyEc" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-18T11:03:10.828+02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.soa-at-work.com/2011/05/trees-and-hierarchies-in-sql.html</feedburner:origLink></item><item><title>Distributed computing the Google way</title><link>http://feedproxy.google.com/~r/soaatwork/~3/9DgPrKPVf_A/distributed-computing-google-way.html</link><category>hadoop</category><author>webmaster@soa-at-work.com (Eduard Hildebrandt)</author><pubDate>Tue, 14 Sep 2010 01:13:02 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2613749938555639069.post-121561552737951055</guid><description>This is my presentation about &lt;a href="http://hadoop.apache.org/"&gt;Apache Hadoop&lt;/a&gt;, which I gave at &lt;a href="http://www.java-forum-stuttgart.de/"&gt;Java Forum Stuttgart&lt;/a&gt; and &lt;a href="http://www.herbstcampus.de/"&gt;Herbstcampus 2010&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div id="__ss_5195799" align="center" style="width: 425px;"&gt;&lt;object height="355" id="__sse5195799" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=distributedcomputingthegoogleway-100914015711-phpapp02&amp;stripped_title=distributed-computing-the-google-way" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse5195799" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=distributedcomputingthegoogleway-100914015711-phpapp02&amp;stripped_title=distributed-computing-the-google-way" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=9DgPrKPVf_A:811Lft1_T2Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=9DgPrKPVf_A:811Lft1_T2Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=9DgPrKPVf_A:811Lft1_T2Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=9DgPrKPVf_A:811Lft1_T2Q:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=9DgPrKPVf_A:811Lft1_T2Q:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=9DgPrKPVf_A:811Lft1_T2Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=9DgPrKPVf_A:811Lft1_T2Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=9DgPrKPVf_A:811Lft1_T2Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/soaatwork/~4/9DgPrKPVf_A" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-14T10:13:02.134+02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure url="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=distributedcomputingthegoogleway-100914015711-phpapp02&amp;stripped_title=distributed-computing-the-google-way" length="100341" type="application/x-shockwave-flash" /><media:content url="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=distributedcomputingthegoogleway-100914015711-phpapp02&amp;stripped_title=distributed-computing-the-google-way" fileSize="100341" type="application/x-shockwave-flash" /><itunes:explicit>no</itunes:explicit><itunes:subtitle>This is my presentation about Apache Hadoop, which I gave at Java Forum Stuttgart and Herbstcampus 2010: </itunes:subtitle><itunes:author>Eduard Hildebrandt</itunes:author><itunes:summary>This is my presentation about Apache Hadoop, which I gave at Java Forum Stuttgart and Herbstcampus 2010: </itunes:summary><itunes:keywords>soa,service,oriented,architecture,webservice,soap,wsdl,xml,java,developer,practice,eai,enterprise,application,integration,esb,jms,apache,cxf,camel,activemq,osgi</itunes:keywords><feedburner:origLink>http://www.soa-at-work.com/2010/09/distributed-computing-google-way.html</feedburner:origLink></item><item><title>Why you should not deliver a client for web-services</title><link>http://feedproxy.google.com/~r/soaatwork/~3/ulfZwzawwfk/why-you-should-not-deliver-client-for.html</link><category>Dependency</category><category>Web-Service</category><category>SOA</category><author>webmaster@soa-at-work.com (Eduard Hildebrandt)</author><pubDate>Tue, 16 Mar 2010 07:42:03 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2613749938555639069.post-6014535278432947484</guid><description>Today I'd like to explain why a wise service consumer should not ask a service provider for a service client. Before I start with all the technical details, let me describe a sample scenario:&lt;br /&gt;
Team A and team B are working on two different applications. Then one day the product owner wants to integrate both applications. Therefore team B has to access the data in the application of team A. The architecture board of the company decides that - if possible - all applications should be integrated using web-services via SOAP over HTTP. So team A implements a web-service and delivers a WSDL file to team B. But after a short time team B bemoans that they cannot access the service and asks team A to deliver a client for their web-service. Does this sound familiar to you?&lt;br /&gt;
&lt;br /&gt;
Usually team B acts that way because of lack of time or simply because they don't have the knowledge how to access a web-service and sometimes it is just politics. If team B tries to argue that team A actually has everything they need to access the service, they often lose the debate. In case of escalation, project  managers, team leaders or product owners who don't have any clue about the technology usually decide that team A in their role as service provider have to deliver a working service that includes a service client.&lt;br /&gt;
&lt;br /&gt;
Because of their bad political standing team A usually decides to deliver an easy-to-use client. They generate stub classes from the WSLD file, package them with some kind of web-service framework like CXF and configure the client with the endpoints for different stages. Team B can now easily access the service and in short time that behavior seems to have many benefits for team B:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;no time investment for implementing the client&lt;/li&gt;
&lt;li&gt;no need of web-service know-how&lt;/li&gt;
&lt;li&gt;easy or no configuration of the client&lt;/li&gt;
&lt;li&gt;client code is in responsibility of service provider&lt;/li&gt;
&lt;/ul&gt;But I think that in a long-term view such a decision is bad for both teams.&lt;br /&gt;
&lt;br /&gt;
The problem is that every service provider is using their own technology and their own service framework. Even if you agree on one framework for web-services, sooner or later the framework will be upgraded to an newer version or replaced by another framework. You can not avoid this, either way any innovation will stop. This means that every web-service client introduces a new set of libraries as dependency and if you decide to go this way you someday you will end in the dependency hell. The following diagram visualizes the issue:&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://lh5.ggpht.com/_h_UWOexR7M8/S5ZqCLGCDPI/AAAAAAAAB-c/JUtBLWAtWzs/s800/dependencies.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
Some people may argue that you can avoid that problem by using &lt;a href="http://www.soa-at-work.com/2010/02/episode-002-what-is-osgi.html"&gt;OSGi&lt;/a&gt;. In my opinion that is just partly right. First, you can not migrate every existing application to OSGi. Second, in some scenarios like deployment with Java-WebStart you need to minimize the size of your application to keep the network traffic down and startup time high. If every service brings its own dependencies, your deployment package will soon be very big. That is why I think that by using OSGi you just hide the problem without solving it. But don't get me wrong: I think that OSGi is a very cool technology that can help you to get your architecture and dependencies straight. In my eyes it's just not the answer to every problem.&lt;br /&gt;
&lt;br /&gt;
I think that dependency management is one of the key aspects to avoid degeneration of your application over time. This dependency management is especially important if your application is part of a distributed system or SOA.&lt;br /&gt;
&lt;br /&gt;
If you are working in a team that uses web-services as service consumer, then don't ask the service provider to deliver a service client. Instead decide for a web-service framework and create client stubs from WSDL files for all of your services. Use your energy and political influence to agree on following points with the service provider:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;versioning strategy for the service&lt;/li&gt;
&lt;li&gt;change management process&lt;/li&gt;
&lt;li&gt;service level agreement&lt;/li&gt;
&lt;/ul&gt;I hope that I could convince you that a wise service consumer should not ask for a service client. What are your experiences with this topic? Did you find yourself in team A, team B or maybe both?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;How does your organization handle this issue?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;script type="text/javascript"&gt;
&lt;!--
google_ad_client = "pub-3532238286545539";
/* 336x280, Erstellt 01.03.10 */
google_ad_slot = "4397943231";
google_ad_width = 336;
google_ad_height = 280;
//--&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"&gt;
&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=ulfZwzawwfk:gr6yLHVubok:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=ulfZwzawwfk:gr6yLHVubok:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=ulfZwzawwfk:gr6yLHVubok:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=ulfZwzawwfk:gr6yLHVubok:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=ulfZwzawwfk:gr6yLHVubok:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=ulfZwzawwfk:gr6yLHVubok:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=ulfZwzawwfk:gr6yLHVubok:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=ulfZwzawwfk:gr6yLHVubok:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/soaatwork/~4/ulfZwzawwfk" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-16T15:42:03.662+01:00</app:edited><media:thumbnail url="http://lh5.ggpht.com/_h_UWOexR7M8/S5ZqCLGCDPI/AAAAAAAAB-c/JUtBLWAtWzs/s72-c/dependencies.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.soa-at-work.com/2010/03/why-you-should-not-deliver-client-for.html</feedburner:origLink></item><item><title>Overview of Continuous Integration Servers</title><link>http://feedproxy.google.com/~r/soaatwork/~3/axBEIvOKI1c/overview-of-continuous-integration.html</link><category>Maven</category><category>Frameworks</category><author>webmaster@soa-at-work.com (Eduard Hildebrandt)</author><pubDate>Tue, 09 Mar 2010 12:42:01 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2613749938555639069.post-6991196847038211607</guid><description>&lt;a href="http://en.wikipedia.org/wiki/Continuous_integration"&gt;Continuous integration&lt;/a&gt; is a software development practice where members of a team integrate their work frequently. Each integration is verified by an automated build to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly. This is an overview of currently available continuous integration servers for Java:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://hudson-ci.org/"&gt;Hudson &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jetbrains.com/teamcity/"&gt;JetBrains TeamCity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.atlassian.com/software/bamboo/"&gt;Bamboo &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.anthillpro.com/"&gt;Anthill&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://continuum.apache.org/"&gt;Continuum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;You are missing an important project?&lt;b&gt; &lt;/b&gt;Suggest your product by commenting! &lt;br /&gt;
&lt;ul&gt;&lt;/ul&gt;&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt; &lt;th&gt;&lt;br /&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=sw0d7-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;asins=0321336380" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;/th&gt; &lt;th&gt;&lt;br /&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=sw0d7-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;asins=0974514039" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;/th&gt; &lt;th&gt;&lt;br /&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=sw0d7-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;asins=0596527675" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;/th&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=axBEIvOKI1c:8fr6CYhSPGU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=axBEIvOKI1c:8fr6CYhSPGU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=axBEIvOKI1c:8fr6CYhSPGU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=axBEIvOKI1c:8fr6CYhSPGU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=axBEIvOKI1c:8fr6CYhSPGU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=axBEIvOKI1c:8fr6CYhSPGU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=axBEIvOKI1c:8fr6CYhSPGU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=axBEIvOKI1c:8fr6CYhSPGU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/soaatwork/~4/axBEIvOKI1c" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-09T21:42:01.833+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.soa-at-work.com/2010/03/overview-of-continuous-integration.html</feedburner:origLink></item><item><title>Using a Maven repository as a service repository</title><link>http://feedproxy.google.com/~r/soaatwork/~3/FpTDpuwepkw/using-maven-repository-as-service.html</link><category>Dependency</category><category>SOA</category><category>Maven</category><author>webmaster@soa-at-work.com (Eduard Hildebrandt)</author><pubDate>Tue, 09 Mar 2010 05:22:15 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2613749938555639069.post-7298097027592203388</guid><description>A service repository is probably one of the most important components of a SOA. The service repository provides a single source of information about all services in an enterprise. There are a number of commercial repository products but almost all of them are expensive and complex. Organizations which just started with SOA may not need the full power of a commercial repository and most of its functionality will likely remain unutilized. Furthermore, existing repositories do not do a particularly good job of managing dependencies between service consumers and service providers. &lt;br /&gt;
&lt;br /&gt;
Unlike monolithic applications, a SOA consists of a large number of frequent changing services. Through orchestration most services depend on other services and these services may rely on some other services in turn. Being able to manage and analyze services dependencies is required in order to be able to implement a robust and maintainable SOA. That is why dependency management must be a key consideration in a SOA.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://maven.apache.org/"&gt;Apache Maven&lt;/a&gt; has become a de-facto standard in the area of dependency management for building projects in the Java world. Besides that, the dependency mechanism can be used with any Ant build by utilizing Maven Ant dependency tasks. So, there is no need to migrate existing Ant build processes to Maven. Maven also has a pretty sophisticated repository support allowing implementing custom central repositories as well as local repositories. &lt;br /&gt;
&lt;br /&gt;
Moreover projects like &lt;a href="http://archiva.apache.org/"&gt;Apache Archiva &lt;/a&gt;(see my&lt;a href="http://www.soa-at-work.com/2010/03/overview-of-maven-repository-solutions.html"&gt; last post&lt;/a&gt;) further enhance Maven repositories with an easy-to-use user interface and add features such as &lt;a href="http://www.jfrog.org/screencast.php?id=IdZz0R6laxA"&gt;LDAP integration&lt;/a&gt; or very fine-grained permission control.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Why not use a Maven repository for storing artifacts, such as WSDL, schemas and policy files?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Each service from a service provider can have its own POM file. Using "deploy" goal service providers can publish a WSDL file and other artifacts along with their POM file in a Maven repository. Service consumers could then download these artifacts based on the dependencies defined in the POM file and generate stub classes. In case of an incompatible change, a compile error will appear and service consumers may need to make changes to their implementation. The entire process can be supported by the default Maven build process. The only required change is a custom artifact handler to support new “service” extension and packaging type.&lt;br /&gt;
&lt;br /&gt;
Additionally an existing change management process can be adapted for services so that service consumers are notified about new versions and their backward compatibility. Most organizations already have a change management process in place to handle changes in shared libraries. Furthermore products like &lt;a href="http://www.jfrog.org/products.php"&gt;Artifactory&lt;/a&gt; can &lt;a href="http://www.jfrog.org/screencast.php?id=EVqC_wiI0EE"&gt;send notifications&lt;/a&gt; as soon as a new artifact is deployed in a Maven repository.&lt;br /&gt;
&lt;br /&gt;
Using Maven for managing service dependencies has multiple benefits:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Ability to use full range of Maven dependency management capabilities including version ranges and snapshots.&lt;/li&gt;
&lt;li&gt;Ability to use Maven dependency reports for dependency analysis.&lt;/li&gt;
&lt;li&gt;Commercial repository products often provide a proprietary mechanism that can only be used for XML-related artifacts. Using Maven the dependency management is consistent with the dependency management process used for other artifacts, such as JARs, WARs, EARs etc.&lt;/li&gt;
&lt;li&gt;Tight integration with any Maven or Ant-based build process.&lt;/li&gt;
&lt;li&gt;There is no need for using UDDI or any other complex and proprietary APIs for publishing services.&lt;/li&gt;
&lt;li&gt;Service consumers that do not use Maven or Ant could still participate in the process by downloading the artifacts manually using user interface provided by &lt;a href="http://nexus.sonatype.org/"&gt;Nexus&lt;/a&gt; or a similar product (see my &lt;a href="http://www.soa-at-work.com/2010/03/overview-of-maven-repository-solutions.html"&gt;last post&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;So there are many arguments why it makes sense to use a Maven repository as a service repository in a SOA. Let's see how we can realize that in practice:&lt;br /&gt;
&lt;br /&gt;
I think it's a good idea to separate the data types (XML schema) from the service interface (WSDL file). That way you can reuse your data types in different services. But creating a seperate Maven project for every XML schema file is very fine-grained. Instead I suggest to create only a Maven project for every business domain, which contains many XML schema files compressed in JAR file. I created a sample &lt;a href="http://cdn.soa-at-work.com/blog/2010/03/06/contactdomain-contract-xsd.zip"&gt;xsd-project&lt;/a&gt; as an example for this approach, which you can &lt;a href="http://cdn.soa-at-work.com/blog/2010/03/06/contactdomain-contract-xsd.zip"&gt;download&lt;/a&gt; and review the source code in detail.&lt;br /&gt;
&lt;br /&gt;
Additionally to the XML schema files we need a separate project for the WSDL file. This project needs to reference the XML schema files, so you can import them in your WSDL file. You can do this easily with the &lt;a href="http://maven.apache.org/plugins/maven-dependency-plugin/"&gt;maven-dependency-plugin&lt;/a&gt;. This plugin can download the JAR-file containing the XML files and unpack XML schema files in a subfolder of your target directory. After you finished editing the WSDL file, you need to package and deploy it in your Maven repository. You can use the &lt;a href="http://mojo.codehaus.org/build-helper-maven-plugin/"&gt;build-helper-maven-plugin&lt;/a&gt; to append the XML schema files from your target directory to the JAR file. For detailed information, you can &lt;a href="http://cdn.soa-at-work.com/blog/2010/03/06/contactservice-contract-wsdl.zip"&gt;download&lt;/a&gt; and review the configuration in my sample &lt;a href="http://cdn.soa-at-work.com/blog/2010/03/06/contactservice-contract-wsdl.zip"&gt;wsdl-project&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
If you don't want to separate you XML schema files from the WSDL file, then you can keep everything in a single WSDL file and use the "attach-artifact" goal of the &lt;a href="http://mojo.codehaus.org/build-helper-maven-plugin/"&gt;build-helper-maven-plugin&lt;/a&gt; to deploy the WSDL file instead of a JAR file. That way you can access the WSDL file directly from your Maven repository without the need to unpack JAR file first.&lt;br /&gt;
&lt;br /&gt;
Finally we need a Maven project that downloads the WSDL file from the Maven repository and generate stub files for client or server implementation. You can use the &lt;a href="http://maven.apache.org/plugins/maven-dependency-plugin/"&gt;maven-dependency-plugin&lt;/a&gt; once more to download the JAR file and unpack the artifacts. In my &lt;a href="http://cdn.soa-at-work.com/blog/2010/03/06/contactservice-spec-cxf.zip"&gt;sample project&lt;/a&gt; I used &lt;a href="http://cxf.apache.org/"&gt;Apache CXF&lt;/a&gt; to generate the stub files. Please &lt;a href="http://cdn.soa-at-work.com/blog/2010/03/06/contactservice-spec-cxf.zip"&gt;download&lt;/a&gt; the sample project and review the code for detailed information on how to do that. More information about the &lt;a href="http://cxf.apache.org/docs/maven-cxf-codegen-plugin-wsdl-to-java.html"&gt;cxf-codegen-plugin&lt;/a&gt; is available on the &lt;a href="http://cxf.apache.org/"&gt;Apache CXF website&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The &lt;a href="http://maven.apache.org/plugins/maven-dependency-plugin/"&gt;maven-dependency-plugin&lt;/a&gt; enables you to analyze the dependencies of your projects. For example you can display the dependency tree for your project with the command "mvn dependency:tree".&lt;br /&gt;
&lt;br /&gt;
Another very useful plugin is the &lt;a href="http://mojo.codehaus.org/versions-maven-plugin/"&gt;maven-version-plugin&lt;/a&gt;. With this plugin you can display all dependencies that have newer versions available. Just use the following command: "mvn versions:display-dependency-updates".&lt;br /&gt;
&lt;br /&gt;
Of course you can use &lt;a href="http://maven.apache.org/maven-1.x/plugins/xdoc/"&gt;Maven XDOC&lt;/a&gt; to document your service and generate a documentation in HTML using the &lt;a href="http://maven.apache.org/maven-1.x/plugins/site/"&gt;maven-site-plugin&lt;/a&gt;. And I think you can find many other useful plugins that can help you to manage and analyze you services and dependencies.&lt;br /&gt;
&lt;br /&gt;
As a side note, I'd like to mention that the Maven repository contains only releases and snapshots of your services. It does not contain the different versions of your file during the development. For this reason it is a good idea to combine your SOA Maven repository with a versioning system like &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; where you can store and compare your development versions before releasing a service interface.&lt;br /&gt;
&lt;br /&gt;
I suggest to combine your versioning system and Maven repository with a continuous integration system like &lt;a href="http://hudson-ci.org/"&gt;Hudson&lt;/a&gt;. The Artifactory Maven repository for example allows a very &lt;a href="http://www.jfrog.org/screencast.php?id=Pshw28_SZVk"&gt;tight integration&lt;/a&gt; with Hudson using a &lt;a href="http://wiki.hudson-ci.org/display/HUDSON/Artifactory+Plugin"&gt;plugin&lt;/a&gt;. That way you can deploy your build artifacts from your continuous integration server into Artifactory together with build environment information captured at deployment time and obtain a fully-reproducible build.&lt;br /&gt;
&lt;br /&gt;
Last but not least I'd like to mention that some Maven repository products like Artifactory allow you to tag your artifacts and &lt;a href="http://www.jfrog.org/screencast.php?id=LUs3XQL_j8g"&gt;add additional properties&lt;/a&gt;. This enables you to store additional meta-information and use this information in your governance process.&lt;br /&gt;
&lt;br /&gt;
Of course the Maven-based approach does not do anything for managing and enforcing (including run-time enforcement) of service policies which is something that commercial registry/repository products can do quite well. So organizations need to evaluate the need for a commercial repository based on types and complexity of the policies they would like to enforce. In many if not most cases the policies are quite straightforward and the Maven-based solution becomes a viable option.&lt;br /&gt;
&lt;br /&gt;
I hope I was able to demonstrate why a Maven repository is predestined to be used as a service repository in a SOA. I'm very interested in your feedback and your experiences with service repositories or registries.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;How do you manage your services?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;script type="text/javascript"&gt;
&lt;!--
google_ad_client = "pub-3532238286545539";
/* 336x280, Erstellt 01.03.10 */
google_ad_slot = "4397943231";
google_ad_width = 336;
google_ad_height = 280;
//--&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"&gt;
&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=FpTDpuwepkw:IeYrJ2kKw_4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=FpTDpuwepkw:IeYrJ2kKw_4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=FpTDpuwepkw:IeYrJ2kKw_4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=FpTDpuwepkw:IeYrJ2kKw_4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=FpTDpuwepkw:IeYrJ2kKw_4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=FpTDpuwepkw:IeYrJ2kKw_4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=FpTDpuwepkw:IeYrJ2kKw_4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=FpTDpuwepkw:IeYrJ2kKw_4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/soaatwork/~4/FpTDpuwepkw" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-09T14:22:15.405+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure url="http://cdn.soa-at-work.com/blog/2010/03/06/contactdomain-contract-xsd.zip" length="27543" type="application/zip" /><media:content url="http://cdn.soa-at-work.com/blog/2010/03/06/contactdomain-contract-xsd.zip" fileSize="27543" type="application/zip" /><itunes:explicit>no</itunes:explicit><itunes:subtitle>A service repository is probably one of the most important components of a SOA. The service repository provides a single source of information about all services in an enterprise. There are a number of commercial repository products but almost all of them</itunes:subtitle><itunes:author>Eduard Hildebrandt</itunes:author><itunes:summary>A service repository is probably one of the most important components of a SOA. The service repository provides a single source of information about all services in an enterprise. There are a number of commercial repository products but almost all of them are expensive and complex. Organizations which just started with SOA may not need the full power of a commercial repository and most of its functionality will likely remain unutilized. Furthermore, existing repositories do not do a particularly good job of managing dependencies between service consumers and service providers. Unlike monolithic applications, a SOA consists of a large number of frequent changing services. Through orchestration most services depend on other services and these services may rely on some other services in turn. Being able to manage and analyze services dependencies is required in order to be able to implement a robust and maintainable SOA. That is why dependency management must be a key consideration in a SOA. Apache Maven has become a de-facto standard in the area of dependency management for building projects in the Java world. Besides that, the dependency mechanism can be used with any Ant build by utilizing Maven Ant dependency tasks. So, there is no need to migrate existing Ant build processes to Maven. Maven also has a pretty sophisticated repository support allowing implementing custom central repositories as well as local repositories. Moreover projects like Apache Archiva (see my last post) further enhance Maven repositories with an easy-to-use user interface and add features such as LDAP integration or very fine-grained permission control. Why not use a Maven repository for storing artifacts, such as WSDL, schemas and policy files? Each service from a service provider can have its own POM file. Using "deploy" goal service providers can publish a WSDL file and other artifacts along with their POM file in a Maven repository. Service consumers could then download these artifacts based on the dependencies defined in the POM file and generate stub classes. In case of an incompatible change, a compile error will appear and service consumers may need to make changes to their implementation. The entire process can be supported by the default Maven build process. The only required change is a custom artifact handler to support new “service” extension and packaging type. Additionally an existing change management process can be adapted for services so that service consumers are notified about new versions and their backward compatibility. Most organizations already have a change management process in place to handle changes in shared libraries. Furthermore products like Artifactory can send notifications as soon as a new artifact is deployed in a Maven repository. Using Maven for managing service dependencies has multiple benefits: Ability to use full range of Maven dependency management capabilities including version ranges and snapshots. Ability to use Maven dependency reports for dependency analysis. Commercial repository products often provide a proprietary mechanism that can only be used for XML-related artifacts. Using Maven the dependency management is consistent with the dependency management process used for other artifacts, such as JARs, WARs, EARs etc. Tight integration with any Maven or Ant-based build process. There is no need for using UDDI or any other complex and proprietary APIs for publishing services. Service consumers that do not use Maven or Ant could still participate in the process by downloading the artifacts manually using user interface provided by Nexus or a similar product (see my last post). So there are many arguments why it makes sense to use a Maven repository as a service repository in a SOA. Let's see how we can realize that in practice: I think it's a good idea to separate the data types (XML schema) from the service interface (WSDL file). That way you can reuse your data types in different services. But creating </itunes:summary><itunes:keywords>soa,service,oriented,architecture,webservice,soap,wsdl,xml,java,developer,practice,eai,enterprise,application,integration,esb,jms,apache,cxf,camel,activemq,osgi</itunes:keywords><feedburner:origLink>http://www.soa-at-work.com/2010/03/using-maven-repository-as-service.html</feedburner:origLink></item><item><title>Overview of Maven repository solutions</title><link>http://feedproxy.google.com/~r/soaatwork/~3/OeDJsUENQ0s/overview-of-maven-repository-solutions.html</link><category>Maven</category><category>Frameworks</category><author>webmaster@soa-at-work.com (Eduard Hildebrandt)</author><pubDate>Sat, 06 Mar 2010 01:03:45 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2613749938555639069.post-6509838780202854375</guid><description>&lt;a href="http://maven.apache.org/"&gt;Apache Maven&lt;/a&gt; is a popular build tool for Java projects. One of the main benefits of Apache Maven is that it helps to maintain the dependencies required to build an application. Apache Maven suggests to store all software libraries in a central repository. Unfortunately the synchronization with the public repository is slow, unreliable and sometimes the latest versions of some libraries are missing. Furthermore private libraries cannot be uploaded there either. By setting up an internal Maven repository, an organization can avail of the benefits of a Maven repository and bypass some of the shortcomings of the public repository. This is an overview of currently available Maven repository products:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.jfrog.org/products.php"&gt;JFrog Artifactory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href="http://nexus.sonatype.org/"&gt;Sonartype Nexus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://archiva.apache.org/"&gt;Apache Archiva&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://proximity.abstracthorizon.org/"&gt;Proximity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://maven-proxy.codehaus.org/"&gt;Codehaus Maven Proxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.pdark.de/dsmp/"&gt;Dead Simple Maven Proxy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;You are missing an important project?&lt;b&gt; &lt;/b&gt;Suggest your product by commenting!&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt; &lt;th&gt;&lt;br /&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=sw0d7-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=10FE9736YVPPT7A0FBG2&amp;amp;asins=0596517335" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;/th&gt; &lt;th&gt;&lt;br /&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=sw0d7-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=10FE9736YVPPT7A0FBG2&amp;amp;asins=1847194540" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;/th&gt; &lt;th&gt;&lt;br /&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=sw0d7-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=10FE9736YVPPT7A0FBG2&amp;amp;asins=0596007507" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;/th&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=OeDJsUENQ0s:k0EF-Z1s_ik:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=OeDJsUENQ0s:k0EF-Z1s_ik:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=OeDJsUENQ0s:k0EF-Z1s_ik:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=OeDJsUENQ0s:k0EF-Z1s_ik:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=OeDJsUENQ0s:k0EF-Z1s_ik:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=OeDJsUENQ0s:k0EF-Z1s_ik:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=OeDJsUENQ0s:k0EF-Z1s_ik:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=OeDJsUENQ0s:k0EF-Z1s_ik:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/soaatwork/~4/OeDJsUENQ0s" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-06T10:03:45.403+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.soa-at-work.com/2010/03/overview-of-maven-repository-solutions.html</feedburner:origLink></item><item><title>IT job trends - Which technologies you should learn next</title><link>http://feedproxy.google.com/~r/soaatwork/~3/5u0-0FrbTd4/it-job-trends-which-technologies-you.html</link><category>Trends</category><author>webmaster@soa-at-work.com (Eduard Hildebrandt)</author><pubDate>Mon, 01 Mar 2010 11:19:34 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2613749938555639069.post-2438116475585114761</guid><description>Recently a &lt;a href="http://developers-blog.org/blog/default/2010/02/24/Trend-between-Spring-and-EJB-job-requirements"&gt;co-worker&lt;/a&gt; showed me a meta-search engine for jobs. &lt;a href="http://www.indeed.com/"&gt;Indeed.com&lt;/a&gt; is a search engine for jobs, allowing job seekers to find jobs posted on thousands of company career sites and job boards. But for me the most interesting part on the Indeed website is the posibility to analyze trends on the job market. I tried to analyze some of the data and got some interesting results.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;EAI vs. SOA&lt;/b&gt;&lt;br /&gt;
For example, since 2006 the market needs more SOA experts than EAI experts. That is not a suprise. We can also see that since the end of 2008 the need for SOA experts stopped growing and we can see the next trend "Cloud Computing". Is it a sign that the topic is shifting or is it just coincidence?&lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=EAI%2C+SOA%2C+Cloud+Computing" title="EAI, SOA, Cloud Computing Job Trends"&gt;&lt;br /&gt;
&lt;img alt="EAI, SOA, Cloud Computing Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=EAI%2C+SOA%2C+Cloud+Computing" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Next Hype: Cloud Computing&lt;/b&gt;&lt;br /&gt;
We can see the growing "Cloud Computing" trend even better if we view the percentage of growth relative to each other.&lt;br /&gt;
&lt;a href="http://www.indeed.com/jobtrends?q=EAI%2C+SOA%2C+Cloud+Computing&amp;amp;relative=1&amp;amp;relative=1" title="EAI, SOA, Cloud Computing Job Trends"&gt;&lt;br /&gt;
&lt;img alt="EAI, SOA, Cloud Computing Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=EAI%2C+SOA%2C+Cloud+Computing&amp;amp;relative=1" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Java vs. .NET&lt;/b&gt;&lt;br /&gt;
Maybe you ask yourself which computer language you should learn next. Should you learn Groovy, Ruby, Scala or take a look on Microsoft .NET? Well, according to indeed.com Java is the most wanted programming language on the market. C# is growing year by year but still does not seem to be used as much as C++. Groovy, Ruby, Scala are currently not used in the field at all. &lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=Java%2C+C%2B%2B%2C+C%23%2C+Perl%2C+PHP%2C+Ruby%2C+Groovy%2C+Scala" title="Java, C++, C#, Perl, PHP, Ruby, Groovy, Scala Job Trends"&gt;&lt;br /&gt;
&lt;img alt="Java, C++, C#, Perl, PHP, Ruby, Groovy, Scala Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=Java%2C+C%2B%2B%2C+C%23%2C+Perl%2C+PHP%2C+Ruby%2C+Groovy%2C+Scala" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;Are Groovy and Scala just a hype?&lt;/b&gt;&lt;br /&gt;
But the relative growth of Groovy, Ruby and Scala over the past years is very impressive. Especially Groovy and Scala are growing very fast. Is it just a hype or are these the programming languages of tomorrow? &lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=Java%2C+C%2B%2B%2C+C%23%2C+Perl%2C+PHP%2C+Ruby%2C+Groovy%2C+Scala&amp;amp;relative=1&amp;amp;relative=1" title="Java, C++, C#, Perl, PHP, Ruby, Groovy, Scala Job Trends"&gt;&lt;br /&gt;
&lt;img alt="Java, C++, C#, Perl, PHP, Ruby, Groovy, Scala Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=Java%2C+C%2B%2B%2C+C%23%2C+Perl%2C+PHP%2C+Ruby%2C+Groovy%2C+Scala&amp;amp;relative=1" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;Lightweight J2EE architectures are IN. EJB is OUT.&lt;/b&gt;&lt;br /&gt;
If you compare EJB with Spring you can see that companies search for more Spring developers than EJB developers. Even if you compare Spring with J2EE - which is a more generic term - you can see that the numbers are nearly the same.&lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=J2EE%2C+EJB%2C+Spring" title="J2EE, EJB, Spring Job Trends"&gt;&lt;br /&gt;
&lt;img alt="J2EE, EJB, Spring Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=J2EE%2C+EJB%2C+Spring" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Much more impressive is the relative growth of Spring over the past years. And the number of open jobs for Spring developers is still growing...&lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=J2EE%2C+EJB%2C+Spring&amp;amp;relative=1&amp;amp;relative=1" title="J2EE, EJB, Spring Job Trends"&gt;&lt;br /&gt;
&lt;img alt="J2EE, EJB, Spring Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=J2EE%2C+EJB%2C+Spring&amp;amp;relative=1" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;Hibernate vs. EJB&lt;/b&gt; &lt;br /&gt;
If you compare the numbers for Hibernate and EJB (or other persistence frameworks), you can see that Hibernate won the battle of persistence frameworks.&lt;a href="http://www.indeed.com/jobtrends?q=EJB%2C+Hibernate%2C+JPA" title="EJB, Hibernate, JPA Job Trends"&gt;&lt;br /&gt;
&lt;img alt="EJB, Hibernate, JPA Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=EJB%2C+Hibernate%2C+JPA" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
But if you look at the relative growth, you can see that the future lies in JPA. By the way: Hibernate supports JPA!&lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=EJB%2C+Hibernate%2C+JPA&amp;amp;relative=1&amp;amp;relative=1" title="EJB, Hibernate, JPA Job Trends"&gt;&lt;br /&gt;
&lt;img alt="EJB, Hibernate, JPA Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=EJB%2C+Hibernate%2C+JPA&amp;amp;relative=1" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;JSP and Struts still rock the world.&lt;/b&gt;&lt;br /&gt;
And what about web frameworks? Well, JSP and Struts developers are still the most wanted. JSF on the other side still needs some time to become a real standard.&lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=JSP%2C+JSF%2C+Struts%2C+Web+Flow%2C+Turbine%2C+Velocity%2C+GWT%2C+Seam" title="JSP, JSF, Struts, Web Flow, Turbine, Velocity, GWT, Seam Job Trends"&gt;&lt;br /&gt;
&lt;img alt="JSP, JSF, Struts, Web Flow, Turbine, Velocity, GWT, Seam Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=JSP%2C+JSF%2C+Struts%2C+Web+Flow%2C+Turbine%2C+Velocity%2C+GWT%2C+Seam" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;Maybe GWT is the future...&lt;/b&gt;&lt;br /&gt;
None of the web frameworks is growing as fast as GWT. Is this the future of web development?&lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=JSP%2C+JSF%2C+Struts%2C+Web+Flow%2C+Turbine%2C+Velocity%2C+GWT%2C+Seam&amp;amp;relative=1&amp;amp;relative=1" title="JSP, JSF, Struts, Web Flow, Turbine, Velocity, GWT, Seam Job Trends"&gt;&lt;br /&gt;
&lt;img alt="JSP, JSF, Struts, Web Flow, Turbine, Velocity, GWT, Seam Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=JSP%2C+JSF%2C+Struts%2C+Web+Flow%2C+Turbine%2C+Velocity%2C+GWT%2C+Seam&amp;amp;relative=1" width="440" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;JBoss is the only open-source application server used in production&lt;/b&gt; &lt;br /&gt;
What about Java Application Servers? Oracle Application Server is the most wanted, but JBoss is growing fast. It seems that open-source application servers like GlassFish or Geronimo are not used in production.&lt;br /&gt;
&lt;a href="http://www.indeed.com/jobtrends?q=Oracle+Application+Server%2C+WebSphere+Application+Server%2C+JBoss%2C+GlassFish%2C+Geronimo" title="Oracle Application Server, WebSphere Application Server, JBoss, GlassFish, Geronimo Job Trends"&gt;&lt;br /&gt;
&lt;img alt="Oracle Application Server, WebSphere Application Server, JBoss, GlassFish, Geronimo Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=Oracle+Application+Server%2C+WebSphere+Application+Server%2C+JBoss%2C+GlassFish%2C+Geronimo" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
But watching the relative growth, GlassFish seems to be the next superstar.&lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=Oracle+Application+Server%2C+WebSphere+Application+Server%2C+JBoss%2C+GlassFish%2C+Geronimo+&amp;amp;relative=1&amp;amp;relative=1" title="Oracle Application Server, WebSphere Application Server, JBoss, GlassFish, Geronimo  Job Trends"&gt;&lt;br /&gt;
&lt;img alt="Oracle Application Server, WebSphere Application Server, JBoss, GlassFish, Geronimo  Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=Oracle+Application+Server%2C+WebSphere+Application+Server%2C+JBoss%2C+GlassFish%2C+Geronimo+&amp;amp;relative=1" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;Tomcat is the dominating web container&lt;/b&gt;&lt;br /&gt;
Comparing Java web containers, we can see that Tomcat is dominating the market.&lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=Tomcat%2C+Resin%2C+Jetty" title="Tomcat, Resin, Jetty Job Trends"&gt;&lt;br /&gt;
&lt;img alt="Tomcat, Resin, Jetty Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=Tomcat%2C+Resin%2C+Jetty" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
But Jetty is growing much faster as any other web container.&lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=Tomcat%2C+Resin%2C+Jetty&amp;amp;relative=1&amp;amp;relative=1" title="Tomcat, Resin, Jetty Job Trends"&gt;&lt;br /&gt;
&lt;img alt="Tomcat, Resin, Jetty Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=Tomcat%2C+Resin%2C+Jetty&amp;amp;relative=1" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;MQSeries is losing against TIBCO EMS.&lt;/b&gt;&lt;br /&gt;
Looking at some popular JMS-Servers, we can see that TIBCO EMS is growing fast and MQSeries seems to lose the game.&lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=MQSeries%2C+TIBCO+EMS%2C+ActiveMQ" title="MQSeries, TIBCO EMS, ActiveMQ Job Trends"&gt;&lt;br /&gt;
&lt;img alt="MQSeries, TIBCO EMS, ActiveMQ Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=MQSeries%2C+TIBCO+EMS%2C+ActiveMQ" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;Is ActiveMQ the future of JMS-Servers?&lt;/b&gt;&lt;br /&gt;
But ActiveMQ is growing faster than TIBCO and if it continues that way it can be the future most wanted JMS-Server.&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="MQSeries, TIBCO EMS, ActiveMQ Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=MQSeries%2C+TIBCO+EMS%2C+ActiveMQ&amp;amp;relative=1" width="440" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Maven vs. Ant&lt;/b&gt;&lt;br /&gt;
After comparing Maven with Ant, I was shocked that many companies still use Ant as the primary build tool.&lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=Maven%2C+Ant" title="Maven, Ant Job Trends"&gt;&lt;br /&gt;
&lt;img alt="Maven, Ant Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=Maven%2C+Ant" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
But I was relieved after taking a look on the relative growth. It shouldn't take long until Maven wins the game.&lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=Maven%2C+Ant&amp;amp;relative=1&amp;amp;relative=1" title="Maven, Ant Job Trends"&gt;&lt;br /&gt;
&lt;img alt="Maven, Ant Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=Maven%2C+Ant&amp;amp;relative=1" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Continuum and Hudson seem to be the most used continuous integration servers.&lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=Continuum%2C+Hudson%2C+Anthill%2C+CruiseControl%2C+Bambo%2C+TeamCity" title="Continuum, Hudson, Anthill, CruiseControl, Bambo, TeamCity Job Trends"&gt;&lt;br /&gt;
&lt;img alt="Continuum, Hudson, Anthill, CruiseControl, Bambo, TeamCity Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=Continuum%2C+Hudson%2C+Anthill%2C+CruiseControl%2C+Bambo%2C+TeamCity" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
TeamCity is growing fast, followed by Anthill.&lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=Continuum%2C+Hudson%2C+Anthill%2C+CruiseControl%2C+Bambo%2C+TeamCity&amp;amp;relative=1&amp;amp;relative=1" title="Continuum, Hudson, Anthill, CruiseControl, Bambo, TeamCity Job Trends"&gt;&lt;br /&gt;
&lt;img alt="Continuum, Hudson, Anthill, CruiseControl, Bambo, TeamCity Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=Continuum%2C+Hudson%2C+Anthill%2C+CruiseControl%2C+Bambo%2C+TeamCity&amp;amp;relative=1" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
And unsurprisingly, Eclipse is the most used IDE.&lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=Eclipse%2C+NetBeans%2C+IntelliJ+IDEA%2C+Rational+Application+Developer" title="Eclipse, NetBeans, IntelliJ IDEA, Rational Application Developer Job Trends"&gt;&lt;br /&gt;
&lt;img alt="Eclipse, NetBeans, IntelliJ IDEA, Rational Application Developer Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=Eclipse%2C+NetBeans%2C+IntelliJ+IDEA%2C+Rational+Application+Developer" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;Swing vs. SWT&lt;/b&gt;&lt;br /&gt;
If you are a Java rich client developer, you should know how to develop with Swing. SWT does not seem to be a real threat to Swing. &lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=Swing%2C+SWT" title="Swing, SWT Job Trends"&gt;&lt;br /&gt;
&lt;img alt="Swing, SWT Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=Swing%2C+SWT" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;Flash vs. Silverlight&lt;/b&gt;&lt;br /&gt;
&lt;div style="width: 440px;"&gt;No surprise: Flash does not only dominate the web, but the job market, too. Though Silverlight is growing...&lt;br /&gt;
&lt;img alt="Flash, Silverlight Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=Flash%2C+Silverlight" width="440" /&gt;&lt;/div&gt;&lt;br /&gt;
And Silverlight's growth on the job market is very impressive:&lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=Flash%2C+Silverlight&amp;amp;relative=1&amp;amp;relative=1" title="Flash, Silverlight Job Trends"&gt;&lt;br /&gt;
&lt;img alt="Flash, Silverlight Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=Flash%2C+Silverlight&amp;amp;relative=1" width="440" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt; &lt;br /&gt;
&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;
According to indeed.com you are currently the most valuable IT ressource if you are a Java Developer with Spring and Hibernate knowledge. You should know how to develop web applications with JSP, Struts or Web Flow and how to deploy it on Tomcat or Oracle Application Servers. If you are a rich client developer, you should be able to develop with Swing or Flash. And if integration is your job, you should be familar with SOA and TIBCO EMS. It's always a plus if you know how to use Ant and how to make continuous integration of your build with Continuum. &lt;br /&gt;
&lt;br /&gt;
But if you want be the the elite of the future, you should take a look at Cloud Computing, Groovy, Spring, JPA, GWT, GlassFish, Jetty, ActiveMQ, maybe Silverlight and of course Maven.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What do you think? Which IT skills will be the most valuable ones on the job market of the future? &lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3532238286545539";
/* 336x280, Erstellt 01.03.10 */
google_ad_slot = "4397943231";
google_ad_width = 336;
google_ad_height = 280;
//--&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;UPDATE:&lt;/b&gt; Colin pointed out to me that I should use quotes when searching for "Oracle Application Server" or "WebSphere Application Server" - which results in kind of a different picture.&lt;br /&gt;
&lt;div style="width: 440px;"&gt;&lt;a href="http://www.indeed.com/jobtrends?q=%22Oracle+Application+Server%22%2C+%22WebSphere+Application+Server%22%2C+JBoss%2C+GlassFish%2C+Geronimo" title="&amp;quot;Oracle Application Server&amp;quot;, &amp;quot;WebSphere Application Server&amp;quot;, JBoss, GlassFish, Geronimo Job Trends"&gt;&lt;br /&gt;
&lt;img alt="&amp;quot;Oracle Application Server&amp;quot;, &amp;quot;WebSphere Application Server&amp;quot;, JBoss, GlassFish, Geronimo Job Trends graph" border="0" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=%22Oracle+Application+Server%22%2C+%22WebSphere+Application+Server%22%2C+JBoss%2C+GlassFish%2C+Geronimo" width="440" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=5u0-0FrbTd4:EJI898ZhRMI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=5u0-0FrbTd4:EJI898ZhRMI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=5u0-0FrbTd4:EJI898ZhRMI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=5u0-0FrbTd4:EJI898ZhRMI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=5u0-0FrbTd4:EJI898ZhRMI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=5u0-0FrbTd4:EJI898ZhRMI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=5u0-0FrbTd4:EJI898ZhRMI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=5u0-0FrbTd4:EJI898ZhRMI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/soaatwork/~4/5u0-0FrbTd4" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-01T20:19:34.679+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">11</thr:total><feedburner:origLink>http://www.soa-at-work.com/2010/02/it-job-trends-which-technologies-you.html</feedburner:origLink></item><item><title>Episode 002: What is OSGi?</title><link>http://feedproxy.google.com/~r/soaatwork/~3/r5kNP16oFTo/episode-002-what-is-osgi.html</link><category>Podcast</category><category>OSGi</category><author>webmaster@soa-at-work.com (Eduard Hildebrandt)</author><pubDate>Mon, 01 Mar 2010 09:44:53 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2613749938555639069.post-7187993854970398676</guid><description>&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/W_QR0Z_6oms&amp;hl=de_DE&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/W_QR0Z_6oms&amp;hl=de_DE&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;
&lt;table&gt;&lt;tr&gt; &lt;th&gt;&lt;br /&gt;
&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=sw0d7-20&amp;o=1&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=9079350044" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;/th&gt; &lt;th&gt;&lt;br /&gt;
&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=sw0d7-20&amp;o=1&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=1933988916" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;/th&gt; &lt;th&gt;&lt;br /&gt;
&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=sw0d7-20&amp;o=1&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=389864457X" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;/th&gt; &lt;/tr&gt;
&lt;/table&gt;&lt;br /&gt;
&lt;b&gt;Weblinks:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/OSGi"&gt;OSGi Wikipedia Page&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.osgi.org/"&gt;OSGi Alliance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.osgi.org/blog/"&gt;OSGi Blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Keywords:&lt;/b&gt; OSGi, SOA, Modularity, Dependency, Coupling, Framework, Container, Java&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=r5kNP16oFTo:2oOag5rhHfQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=r5kNP16oFTo:2oOag5rhHfQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=r5kNP16oFTo:2oOag5rhHfQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=r5kNP16oFTo:2oOag5rhHfQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=r5kNP16oFTo:2oOag5rhHfQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=r5kNP16oFTo:2oOag5rhHfQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=r5kNP16oFTo:2oOag5rhHfQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=r5kNP16oFTo:2oOag5rhHfQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/soaatwork/~4/r5kNP16oFTo" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-01T18:44:53.472+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure url="http://cdn.soa-at-work.com/episodes/002.mov" length="69941143" type="video/quicktime" /><media:content url="http://cdn.soa-at-work.com/episodes/002.mov" fileSize="69941143" type="video/quicktime" /><itunes:explicit>no</itunes:explicit><itunes:subtitle> Weblinks: OSGi Wikipedia Page OSGi Alliance OSGi Blog Keywords: OSGi, SOA, Modularity, Dependency, Coupling, Framework, Container, Java</itunes:subtitle><itunes:author>Eduard Hildebrandt</itunes:author><itunes:summary> Weblinks: OSGi Wikipedia Page OSGi Alliance OSGi Blog Keywords: OSGi, SOA, Modularity, Dependency, Coupling, Framework, Container, Java</itunes:summary><itunes:keywords>soa,service,oriented,architecture,webservice,soap,wsdl,xml,java,developer,practice,eai,enterprise,application,integration,esb,jms,apache,cxf,camel,activemq,osgi</itunes:keywords><feedburner:origLink>http://www.soa-at-work.com/2010/02/episode-002-what-is-osgi.html</feedburner:origLink></item><item><title>Episode 001: What is SOA@WORK?</title><link>http://feedproxy.google.com/~r/soaatwork/~3/R6GJHyKUAFU/episode-001-what-is-soawork.html</link><category>Podcast</category><author>webmaster@soa-at-work.com (Eduard Hildebrandt)</author><pubDate>Mon, 01 Mar 2010 09:40:50 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2613749938555639069.post-4114780511623012787</guid><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/LEQlJLATAw0&amp;hl=de_DE&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/LEQlJLATAw0&amp;hl=de_DE&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;
&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-3532238286545539";
/* 336x280, Erstellt 01.03.10 */
google_ad_slot = "4397943231";
google_ad_width = 336;
google_ad_height = 280;
//--&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Weblinks:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://java.sun.com/javase/downloads/index.jsp"&gt;Java Developer Kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://maven.apache.org/"&gt;Apache Maven&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=R6GJHyKUAFU:dqv16TcWiEI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=R6GJHyKUAFU:dqv16TcWiEI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=R6GJHyKUAFU:dqv16TcWiEI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=R6GJHyKUAFU:dqv16TcWiEI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=R6GJHyKUAFU:dqv16TcWiEI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=R6GJHyKUAFU:dqv16TcWiEI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/soaatwork?a=R6GJHyKUAFU:dqv16TcWiEI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/soaatwork?i=R6GJHyKUAFU:dqv16TcWiEI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/soaatwork/~4/R6GJHyKUAFU" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-01T18:40:50.216+01:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure url="http://cdn.soa-at-work.com/episodes/001.mov" length="62383377" type="video/quicktime" /><media:content url="http://cdn.soa-at-work.com/episodes/001.mov" fileSize="62383377" type="video/quicktime" /><itunes:explicit>no</itunes:explicit><itunes:subtitle> Weblinks: Java Developer Kit Apache Maven </itunes:subtitle><itunes:author>Eduard Hildebrandt</itunes:author><itunes:summary> Weblinks: Java Developer Kit Apache Maven </itunes:summary><itunes:keywords>soa,service,oriented,architecture,webservice,soap,wsdl,xml,java,developer,practice,eai,enterprise,application,integration,esb,jms,apache,cxf,camel,activemq,osgi</itunes:keywords><feedburner:origLink>http://www.soa-at-work.com/2010/02/episode-001-what-is-soawork.html</feedburner:origLink></item><copyright>Copyright by Eduard Hildebrandt. All rights reserved.</copyright><media:credit role="author">Eduard Hildebrandt</media:credit><media:rating>nonadult</media:rating><media:description type="plain">Service Orientead Architecture in der Praxis</media:description></channel></rss>
