<?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/'><id>tag:blogger.com,1999:blog-30094322</id><updated>2008-05-16T17:09:42.365+02:00</updated><title type='text'>Guillaume Nodet's blog</title><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-30094322.post-2151545779396340082</id><published>2008-05-15T17:02:00.002+02:00</published><updated>2008-05-15T17:04:47.171+02:00</updated><title type='text'>ServiceMix 4 NMR on Equinox</title><content type='html'>I've done some experiments today to check that ServiceMix 4 NMR can be easily deployed on Equinox instead of Felix.  Have a look at this &lt;a href="http://cwiki.apache.org/SMX4NMR/4-installing-the-nmr-in-equinox.html"&gt;wiki page&lt;/a&gt;.</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/05/servicemix-4-nmr-on-equinox.html' title='ServiceMix 4 NMR on Equinox'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=2151545779396340082' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/2151545779396340082/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/2151545779396340082'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2151545779396340082'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-2476208687048658215</id><published>2008-05-13T21:53:00.003+02:00</published><updated>2008-05-13T22:00:19.428+02:00</updated><title type='text'>Apache ServiceMix Kernel 1.0-m3</title><content type='html'>We've just released the &lt;a href="http://servicemix.apache.org/kernel/servicemix-kernel-10-m3.html"&gt;third milestone&lt;/a&gt; of ServiceMix Kernel 1.0-m3.  This small OSGi based container is really nice, if you haven't had a look at it yet, go and &lt;a href="http://servicemix.apache.org/kernel/download.html"&gt;grab it&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It adds a bunch of cool new features.  For example you can run:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;osgi list | utils grep ServiceMix&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;or&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;log d | utils grep WARN&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If you want to have a quick run at it, go and look at the &lt;a href="http://servicemix.apache.org/kernel/1-quick-start.html"&gt;quick start guide&lt;/a&gt;.</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/05/apache-servicemix-kernel-10-m3.html' title='Apache ServiceMix Kernel 1.0-m3'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=2476208687048658215' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/2476208687048658215/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/2476208687048658215'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2476208687048658215'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-1476773987122858653</id><published>2008-04-30T11:31:00.002+02:00</published><updated>2008-04-30T11:44:09.689+02:00</updated><title type='text'>Spring App Server</title><content type='html'>I've just seen the &lt;a href="http://www.infoq.com/news/2008/04/springsource-app-platform"&gt;annoucement&lt;/a&gt; that SpringSource has launched a new App Server based on OSGi (Spring-DM).&lt;br /&gt;I find it a bit weird that they tend to rewrite existing stuff: the JMS JCA layer in Spring 2.x is somehow derived from the &lt;a href="http://jencks.codehaus.org"&gt;Jencks&lt;/a&gt; project, Spring Integration looks a lot like &lt;a href="http://activemq.apache.org/camel/"&gt;Camel&lt;/a&gt;, and now this app server which looks very similar to &lt;a href="http://servicemix.apache.org/kernel/"&gt;ServiceMix Kernel&lt;/a&gt; with WAR support (which we already had in &lt;a href="http://servicemix.apache.org/smx4/"&gt;ServiceMix 4&lt;/a&gt; from the &lt;a href="http://wiki.ops4j.org/confluence/display/ops4j/Pax+Web+Extender+-+War"&gt;Pax Web&lt;/a&gt; project).</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/04/spring-app-server.html' title='Spring App Server'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=1476773987122858653' title='4 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/1476773987122858653/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/1476773987122858653'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/1476773987122858653'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-9156304376974485238</id><published>2008-04-25T14:47:00.003+02:00</published><updated>2008-04-25T14:59:55.992+02:00</updated><title type='text'>Ziphone</title><content type='html'>A friend of mine has cracked an iPhone a few months ago (shame on him...) but was quite reluctant to upgrade to a newer version in case the phone would be &lt;a href="http://gizmodo.com/gadgets/apple/iphone-firmware-111-out-and-tested-breaks-3rd+party-apps-relocks-iphones-and-sends-them-to-semi+brick-activation-limbo-updated-with-video-304497.php"&gt;bricked&lt;/a&gt;.&lt;br /&gt;Fortunately, I gave him a link to &lt;a href="http://www.ziphone.org/"&gt;ZiPhone&lt;/a&gt;, which is the best way to unlock your iPhone I've found so far: just upgrade your phone using iTunes, launch the application and click.  5 minutes later, you have a jailbroken and unlocked iPhone with the latest firmware :-)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://netzooid.com/blog/2008/04/14/fring/"&gt;Dan&lt;/a&gt; has also blogged about &lt;a href="http://www.fring.com/newsroom/iPhone.asp"&gt;Fring&lt;/a&gt;, a very nice application to to VoIP over the iPhone.&lt;br /&gt;&lt;br /&gt;If you like to &lt;a href="http://twitter.com/"&gt;twitter&lt;/a&gt;, have a look at &lt;a href="http://www.iphonehacks.com/2008/04/twitter-twinkle.html"&gt;Twinkle&lt;/a&gt; too.</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/04/ziphone.html' title='Ziphone'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=9156304376974485238' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/9156304376974485238/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/9156304376974485238'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/9156304376974485238'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-8629976890039625534</id><published>2008-04-04T17:27:00.003+02:00</published><updated>2008-04-04T20:25:55.701+02:00</updated><title type='text'>ApacheCon EU 2008</title><content type='html'>&lt;a href="http://bsnyderblog.blogspot.com/"&gt;Bruce&lt;/a&gt; and I will be both at &lt;a href="http://www.eu.apachecon.com/eu2008/"&gt;ApacheCon Europe&lt;/a&gt; in Amsterdam next week to talk about &lt;a href="http://eu.apachecon.com/eu2008/program/talk/2354"&gt;ServiceMix&lt;/a&gt; and &lt;a href="http://eu.apachecon.com/eu2008/program/talk/2366"&gt;Camel&lt;/a&gt;, so if you want to meet with us, send us a mail.&lt;br /&gt;There will be a &lt;a href="http://www.eu.apachecon.com/eu2008/program/BOFs"&gt;BOF&lt;/a&gt; about ServiceMix on Wednesday, so it will be a good opportunity to meet too.</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/04/apachecon-eu-2008.html' title='ApacheCon EU 2008'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=8629976890039625534' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/8629976890039625534/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/8629976890039625534'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8629976890039625534'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-1949136737333158261</id><published>2008-04-04T15:50:00.001+02:00</published><updated>2008-04-04T15:53:50.575+02:00</updated><title type='text'>JBI and SCA (again)</title><content type='html'>I've just seen &lt;a title="Strengthening the Alliance Between Java EE and SCA" href="http://www.infoq.com/news/2008/04/sca-java-ee" id="h_mr"&gt;this post&lt;/a&gt; saying:&lt;br /&gt;&lt;blockquote id="cpd5"&gt;&lt;div id="k:nr" style="margin-left: 40px;"&gt;One of the major motivations for doing so is that currently, the Java community is still split between SCA and JBI. &lt;br /&gt; &lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;Well, this is somewhat true, I can't really deny it, but it should not be that way.  JBI and SCA are not really competitors, even if they are usually seen that way.  The JBI specification explains how to create an ESB that allows pluggable components to be wired easily thus allowing vendor independant components to be created.  SCA defines a way to write composite applications in a clearly defined way that can be applied to different languages (though you can't really mix those, so you end up with one runtime per language you support).&lt;br /&gt;&lt;br /&gt;As a standard, SCA offers value, but I really think both could be supported in a single runtime like &lt;a title="FUSE ESB" href="http://open.iona.com/products/fuse-esb/" id="zp7w"&gt;FUSE ESB&lt;/a&gt;.  We've discussed several times about supporting SCA on top of JBI in &lt;a title="ServiceMix" href="http://servicemix.apache.org/" id="fnzd"&gt;ServiceMix&lt;/a&gt;, but I haven't heard much needs on that.  We are currently working hard on ServiceMix 4, based on OSGi and allowing lots of technologies to be plugged onto a single bus, including JBI, Camel, JAX-WS, EJB3, etc...  Supporting SCA would only be another profile.</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/04/jbi-and-sca-again.html' title='JBI and SCA (again)'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=1949136737333158261' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/1949136737333158261/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/1949136737333158261'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/1949136737333158261'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-1735188165759609495</id><published>2007-12-06T16:52:00.000+01:00</published><updated>2007-12-06T17:20:10.594+01:00</updated><title type='text'>ServiceMix / Fuse ESB press release</title><content type='html'>A &lt;a href="http://www.tradingmarkets.com/.site/news/Stock%20News/880269/"&gt;press release&lt;/a&gt; has been published recently on the use of Fuse ESB for the Belgium Government.  For french speaking people, you may find lots of informations on the project by browsing &lt;a href="http://enterpriseservicebus.blogspot.com/"&gt;Lilian Duchêne's blog&lt;/a&gt;.&lt;br /&gt;   Together with Anne Noseda, we have presented this projet at the &lt;a href="http://www.bejug.org/confluenceBeJUG/display/BEJUG06/Belgium+French+Community+goes+SOA+Open+Source+with+Servicemix+and+Bull"&gt;BeJUG SOA conference&lt;/a&gt;.  You can &lt;a href="http://docs.google.com/TeamPresent?docid=ddprphmx_156c3fnx3&amp;amp;skipauth=true"&gt;view the slides&lt;/a&gt; or &lt;a href="http://people.apache.org/%7Egnodet/SoaBeJUG.ppt"&gt;download them&lt;/a&gt;.</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/12/servicemix-fuse-esb-press-release.html' title='ServiceMix / Fuse ESB press release'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=1735188165759609495' title='2 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/1735188165759609495/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/1735188165759609495'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/1735188165759609495'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-1389691950594188021</id><published>2007-09-25T09:21:00.000+02:00</published><updated>2007-09-25T09:37:52.785+02:00</updated><title type='text'>Apache ServiceMix 3.1.2</title><content type='html'>&lt;a href="http://incubator.apache.org/servicemix/"&gt;Apache ServiceMix&lt;/a&gt; 3.1.2 has been released.  Release notes are available  &lt;a href="http://incubator.apache.org/servicemix/servicemix-312.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This is our first official release since graduation: this means that the artifacts are available from the public repositories now (see &lt;a href="http://repo1.maven.org/maven2/org/apache/servicemix/"&gt;http://repo1.maven.org/maven2/org/apache/servicemix/&lt;/a&gt;).</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/09/apache-servicemix-312.html' title='Apache ServiceMix 3.1.2'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=1389691950594188021' title='2 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/1389691950594188021/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/1389691950594188021'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/1389691950594188021'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-8371237444025460171</id><published>2007-09-19T20:08:00.000+02:00</published><updated>2007-09-19T20:16:13.918+02:00</updated><title type='text'>ServiceMix has graduated</title><content type='html'>I'm really pleased to announce that the ASF Board has approved &lt;a href="http://incubator.apache.org/servicemix/"&gt;Apache ServiceMix&lt;/a&gt; graduation :-) This means that ServiceMix now becomes a full Apache Top Level Project.  So we will soon make our first official release of ServiceMix 3.1.2 and 3.2 coming later.  This also means that the resource will be moved to their final location: the website will be moved to http://servicemix.apache.org/ and the svn repo to https://svn.apache.org/repos/asf/servicemix/.&lt;br /&gt;&lt;br /&gt;In addition, I'm honored to have been voted as the Apache ServiceMix &lt;a href="http://www.apache.org/foundation/how-it-works.html#pmc-chair"&gt;PMC Chair&lt;/a&gt;.  The PMC (Project Management Commitee) is the group of people responsible for the project oversight, and its Chair is the interface between the Board and the project.&lt;br /&gt;&lt;br /&gt;I just want to remind people the purpose of the &lt;a href="http://incubator.apache.org/"&gt;Apache Incubator&lt;/a&gt;: its main responsibility is to watch new projects at the ASF to make sure that no IP problems remains and that there is a vibrant, diverse and sustainable community around the project that goes the "Apache Way". This is in no case about the quality or maturity of the software itself, as incubating projects greatly vary in these areas (from brand new projects to very mature projects joining the ASF).</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/09/servicemix-has-graduated.html' title='ServiceMix has graduated'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=8371237444025460171' title='7 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/8371237444025460171/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/8371237444025460171'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8371237444025460171'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-2962639653571417555</id><published>2007-08-30T14:39:00.000+02:00</published><updated>2007-08-30T14:46:14.098+02:00</updated><title type='text'>FUSE ESB</title><content type='html'>My company &lt;a href="http://www.iona.com"&gt;IONA&lt;/a&gt; provides support on &lt;a href="http://incubator.apache.org/servicemix/"&gt;Apache ServiceMix&lt;/a&gt; via a distribution called &lt;a href="http://open.iona.com/products/fuse-esb/"&gt;FUSE ESB&lt;/a&gt; available from the &lt;a href="http://open.iona.com"&gt;Open Source IONA site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;What's in FUSE ESB right now? Well, it's roughly a distribution of ServiceMix trunk.  This implies that FUSE ESB is released ahead of the Apache ServiceMix distribution (the latest release is 3.1.1, whereas FUSE ESB is based on 3.2).  &lt;br /&gt;&lt;br /&gt;Why are you using the latest trunk instead of the most stable branch? Well, mostly because our customers needs some of the latest features available.  We take great care of what is in our Fuse branch: we do not necessarily backport all new stuff from trunk.  We may also add some specific customer needs inside our own distribution, features that are not present in the trunk version.&lt;br /&gt;&lt;br /&gt;So is that a fork? Certainly not :-) We have always supported Apache ServiceMix and we will continue to do so.  But our customers have specific needs, so we may need to do custom development or have custom branches for them to fullfill these needs. Over time, we put the features that we consider generic enough back to the community.  But this level of support can not be provided in a community driven environment such as the Apache Software Foundation.  Let alone the fact that our customers often require privacy regarding their issues or their specific needs, environments and projects, so that it becomes difficult to use the open mailing lists of the community.&lt;br /&gt;&lt;br /&gt;So is that a closed source version? No. The Apache License would allow that (quite the opposite of the GPL), but this is not what we aim for.  Our process is quite open: as an example, I've recently developed an AsyncBridge EIP pattern for FUSE ESB (see the &lt;a href="http://open.iona.com/issues/browse/ESB-18"&gt;issue&lt;/a&gt;) that will certainly be contributed back to the community...&lt;br /&gt;&lt;br /&gt;Hopefully, this blog entry will clarify a bit the IONA policy with respect to the Apache projects it supports and the relationship between FUSE ESB and ServiceMix. Feel free to &lt;a href="http://open.iona.com/downloads/"&gt;download&lt;/a&gt; it and give it a try...</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/08/fuse-esb.html' title='FUSE ESB'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=2962639653571417555' title='8 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/2962639653571417555/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/2962639653571417555'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2962639653571417555'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-6827755281339955299</id><published>2007-08-13T23:04:00.000+02:00</published><updated>2007-08-13T23:15:21.883+02:00</updated><title type='text'>Switching to Mac</title><content type='html'>My ThinkPad has some serious cooling problems (it keeps shutting down when I really use it, which is kinda annoying, because this is when you really use it that you want it up and running of course) so I decided to go for a MacBook Pro.  Why? Well, I'm a long time users of Windows, but for developing, I usually use &lt;a href="http://www.cygwin.com/"&gt;cygwin&lt;/a&gt; for command line and all the unix good stuff.  Additionally, all my team mates are Mac users, so I was quite sure I would not loose much.  Now, I must admit I don't regret. Thanks to &lt;a href="http://macstrac.blogspot.com"&gt;James&lt;/a&gt; for having pointed a &lt;a href="http://macstrac.blogspot.com/2007/07/my-favourite-os-x-software.html"&gt;few useful softwares&lt;/a&gt;...</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/08/switching-to-mac.html' title='Switching to Mac'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=6827755281339955299' title='2 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/6827755281339955299/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/6827755281339955299'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/6827755281339955299'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-7326448082056956244</id><published>2007-07-04T14:06:00.000+02:00</published><updated>2007-07-04T14:10:40.031+02:00</updated><title type='text'>ServiceMix 3.1.1 released</title><content type='html'>&lt;a href="http://incubator.apache.org/servicemix/servicemix-311.html"&gt;Apache ServiceMix 3.1.1&lt;/a&gt; release is finally out!  This release is a bug fix version with a few minor improvements.</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/07/servicemix-311-released.html' title='ServiceMix 3.1.1 released'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=7326448082056956244' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/7326448082056956244/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/7326448082056956244'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7326448082056956244'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-7896999562600317297</id><published>2007-06-28T14:00:00.000+02:00</published><updated>2007-06-29T11:42:07.851+02:00</updated><title type='text'>Accessing databases in servicemix-drools</title><content type='html'>&lt;a href="http://incubator.apache.org/servicemix/"&gt;ServiceMix&lt;/a&gt; provides a Service Engine for &lt;a href="http://labs.jboss.com/jbossrules/"&gt;Drools&lt;/a&gt;, the famous Rules Engine.&lt;br /&gt;&lt;br /&gt;People often want to retrieve data from the rules and such data is usually stored in a database.  Previously there was no easy way to configure a DataSource and inject it in the rules definitions.  This is a small enhancement that I've just written and that will be included in next major release.&lt;br /&gt;&lt;br /&gt;So let's say you write your database access code in a simple helper object:&lt;br /&gt;&lt;pre style="border:1px solid black; padding:1em;"&gt;import javax.sql.DataSource;&lt;br /&gt;import org.springframework.jdbc.core.JdbcTemplate;&lt;br /&gt;&lt;br /&gt;public class DbHelper {&lt;br /&gt;    private DataSource dataSource;&lt;br /&gt;    private JdbcTemplate jdbcTemplate;&lt;br /&gt;&lt;br /&gt;    public void setDataSource(DataSource dataSource) {&lt;br /&gt;      this.dataSource = dataSource;&lt;br /&gt;      this.jdbcTemplate = new JdbcTemplate(dataSource);&lt;br /&gt;      this.jdbcTemplate.afterPropertiesSet();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getSurname(String name) {&lt;br /&gt;        String surname = (String) this.jdbcTemplate&lt;br /&gt;          .queryForObject(&lt;br /&gt;              "select surname from t_actor where name = ?", &lt;br /&gt;              new Object[]{name}, String.class);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Now, let's use it in our rule definition:&lt;br /&gt;&lt;pre style="border:1px solid black; padding:1em;"&gt;import org.apache.servicemix.drools.model.Exchange;&lt;br /&gt;global org.apache.servicemix.drools.model.JbiHelper jbi;&lt;br /&gt;global DbHelper helper;&lt;br /&gt;&lt;br /&gt;rule Init&lt;br /&gt;    when&lt;br /&gt;        $me : Exchange()&lt;br /&gt;    then&lt;br /&gt;        String t = $me.getIn().getContent().getTextContent();&lt;br /&gt;        jbi.answer("&amp;lt;surname&gt;"&lt;br /&gt;            + helper.getSurname(t)&lt;br /&gt;            + "&amp;lt;/surname&gt;");&lt;br /&gt;end&lt;/pre&gt;&lt;br /&gt;And the xbean.xml would look like:&lt;br /&gt;&lt;pre style="border:1px solid black; padding:1em;"&gt;&amp;lt;drools:endpoint  service="test:service"&lt;br /&gt;                  endpoint="endpoint"&lt;br /&gt;                  ruleBaseResource="classpath:router.drl"&lt;br /&gt;                  globals="#globals" /&gt;&lt;br /&gt;&amp;lt;util:map id="globals"&gt;&lt;br /&gt;  &amp;lt;entry key="helper" value-ref="helper" /&gt;&lt;br /&gt;&amp;lt;/util:map&gt;&lt;br /&gt;&amp;lt;bean id="helper" class="DbHelper"&gt;&lt;br /&gt;  &amp;lt;property name="dataSource"&gt;&lt;br /&gt;    &amp;lt;bean class="org.springframework.jndi.JndiObjectFactoryBean"&gt;&lt;br /&gt;      &amp;lt;property name="jndiName" value="java:myDataBase" /&gt; &lt;br /&gt;    &amp;lt;/bean&gt;&lt;br /&gt;  &amp;lt;/property&gt;&lt;br /&gt;&amp;lt;/bean&gt;&lt;/pre&gt;&lt;br /&gt;This will make available the &lt;code&gt;helper&lt;/code&gt; bean to the rules while initializing it with a DataSource looked up from JNDI.&lt;br /&gt;&lt;br /&gt;Happy hacking !</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/06/accessing-databases-in-servicemix.html' title='Accessing databases in servicemix-drools'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=7896999562600317297' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/7896999562600317297/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/7896999562600317297'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7896999562600317297'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-6780567621258796017</id><published>2007-06-22T08:54:00.000+02:00</published><updated>2007-06-22T09:51:38.904+02:00</updated><title type='text'>Loose coupling in JBI</title><content type='html'>Loose coupling is a feature that can be easily achieved in JBI but which is sometimes not well understood by newbies in the JBI world.&lt;br /&gt;&lt;br /&gt;In JBI, services are exposed inside the bus by JBI components when you deploy a given service onto it.  These components can be Service Engines (contain business logic)  or Binding Components (handling a specific protocol).  The distinction is the key for loose coupling: the service itself it decoupled from the protocols used to access it.  This is true for all services accessed from inside the JBI bus, be it internal to the bus or external to it.&lt;br /&gt;&lt;br /&gt;Let's take an example.  You need to write a BPEL process and expose it over SOAP/HTTP, and this process will consume several other services.  These services can be inside the JBI bus, accessible via SOAP/HTTP or plain JMS.  The important point is that the BPEL process has no knowledge of the protocol and location of these services.  How does it work ?&lt;br /&gt;&lt;br /&gt;The key is the WSDL.  A WSDL can be split into two parts: the abstract and the concrete model.  The abstract model contains the interface (Port) definition along with the messages and xml structures definition.  The concrete part contains the binding (tying the service to a particular protocol) and service definition (location and binding for a given service).  When JBI components talk together, they only use the abstract WSDL definition which does not contain any protocol or location information.  The NMR will select a JBI endpoint based on some informations (name of the interface, name of the service) and will send the JBI exchange to the selected endpoint.  If the endpoint has been activated by a Service Engine, it means that the service is hosted inside the JBI bus, and not protocol transformation will be performed.  However, if the endpoint is activated from a Binding Component, the endpoint will act as a proxy for an external service provider: the binding component will send a request to the service in the protocol it handles to the known location, but the consumer (the BPEL process) has no knowledge of the exact protocol and location: the only things it needs is the contract (the abstract WSDL).&lt;br /&gt;&lt;br /&gt;Take a look at &lt;a href="http://incubator.apache.org/servicemix/"&gt;ServiceMix &lt;/a&gt;and it's &lt;a href="http://incubator.apache.org/servicemix/5-jbi.html"&gt;User's Guide&lt;/a&gt;.</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/06/loose-coupling-in-jbi.html' title='Loose coupling in JBI'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=6780567621258796017' title='1 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/6780567621258796017/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/6780567621258796017'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/6780567621258796017'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-8522862676873545688</id><published>2007-06-02T14:47:00.000+02:00</published><updated>2007-06-02T14:49:30.384+02:00</updated><title type='text'>Father for the fifth time</title><content type='html'>&lt;div style="margin: 0px auto 10px; text-align: center;"&gt;&lt;a href="http://bp2.blogger.com/_HOWFwBzQCJY/RmFm2GXrV5I/AAAAAAAAAI8/3PkPmxjMZm4/s1600-h/IMG_4080.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_" alt="" src="http://bp2.blogger.com/_HOWFwBzQCJY/RmFm2GXrV5I/AAAAAAAAAI8/3PkPmxjMZm4/s400/IMG_4080.jpg" border="0"&gt;&lt;/a&gt;&lt;br /&gt;Welcome to this world, Alexandre! My new son was born on May the 30th, weights 3.8 kg and his height is 52 cm.&lt;/div&gt;&lt;div style="clear: both; text-align: center;"&gt;&lt;a href="http://picasa.google.com/blogger/" target="ext"&gt;&lt;img src="http://photos1.blogger.com/pbp.gif" alt="Posted by Picasa" style="border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="middle" border="0"&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/06/father-for-fifth-time.html' title='Father for the fifth time'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=8522862676873545688' title='6 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/8522862676873545688/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/8522862676873545688'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8522862676873545688'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-7130607122680810128</id><published>2007-03-08T01:46:00.000+01:00</published><updated>2007-03-08T02:00:54.536+01:00</updated><title type='text'>Performances of ServiceMix WSDL-First example</title><content type='html'>I have spent some time profiling &lt;a href="http://incubator.apache.org/servicemix/"&gt;ServiceMix&lt;/a&gt; a bit, and particularly the WSDL-First example from the distribution.  Here are the results while running a &lt;a href="http://www.soapui.org/"&gt;SOAP UI&lt;/a&gt; load tests on the example from the 3.1 distribution and the upcoming 3.1.1 distribution:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Version,   min, max, avg,   last, cnt,   tps,    bytes,    bps,    err&lt;br /&gt;SMX 3.1,   9,   234, 20.64, 14,   57724, 484.43, 19106644, 159450, 0&lt;br /&gt;SMX 3.1.1, 5,   204, 16.75, 14,   71065, 596.99, 23522515, 196095, 0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The most interesting number is the tps (transaction per seconds) absolute number: roughly 600 transactions per seconds sounds like a reasonable number (this small tests were running on my laptop without any particular tuning on the JVM or ServiceMix configuration) !&lt;br /&gt;&lt;br /&gt;The other one is the tpc increase between 3.1 and 3.1.1:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   595.99 / 484.43 = 1.2324&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;which means this sample performances for this sample has been boosted by 23 percents !</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/03/performances-of-servicemix-wsdl-first.html' title='Performances of ServiceMix WSDL-First example'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=7130607122680810128' title='6 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/7130607122680810128/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/7130607122680810128'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7130607122680810128'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-529337360701716289</id><published>2007-03-07T09:33:00.000+01:00</published><updated>2007-03-07T10:22:37.935+01:00</updated><title type='text'>Using maven to switch runtime properties</title><content type='html'>For those who don't know all of &lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt;'s features, I will show how to leverage maven at built-time to easily share run-time properties between service units in &lt;a href="http://incubator.apache.org/servicemix/"&gt;ServiceMix&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Let's say that you expose a few services over HTTP/SOAP using &lt;a href="http://incuabor.apache.org/servicemix-http.html"&gt;servicemix-http&lt;/a&gt;. If you are building several service assemblies, you will end up having several files containing:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;http:endpoint service="test:MyConsumerService"&lt;br /&gt;               endpoint="myConsumer"&lt;br /&gt;               role="consumer" &lt;br /&gt;               locationURI="http://0.0.0.0:8192/Service/"&lt;br /&gt;               soap="true"&lt;br /&gt;               soapVersion="1.1" /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You will certainly want all your services to be exposed on the same port, so it can become a bit tedious if you need to change them all, or if you need to change between different work environments (test, production, etc...).&lt;br /&gt;&lt;br /&gt;When working with several service assemblies at the same time, I would recommend to use a hierachical organization for your maven projects:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  root&lt;br /&gt;    |- module1&lt;br /&gt;    |   |- module1-http-su&lt;br /&gt;    |   |- module1-jsr181-su&lt;br /&gt;    |   \- module1-sa&lt;br /&gt;    |- module2&lt;br /&gt;    |   |- module2-http-su&lt;br /&gt;    |   |- module2-jsr181-su&lt;br /&gt;    |   \- module2-sa&lt;br /&gt;    ...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This has several advantages: aside from organizing your code logically, you can use &lt;code&gt;mvn jbi:projectDeploy&lt;/code&gt; at the root level, or at a sub-level.&lt;br /&gt;&lt;br /&gt;So, now, how can we use maven for our properties ?  Well, we just have to create them in the root pom:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;properties&gt;&lt;br /&gt;  &amp;lt;deployment-port&gt;8192&amp;lt;/deployment-port&gt;&lt;br /&gt;  &amp;lt;deployment-soap-version&gt;1.2&amp;lt;/deployment-soap-version&gt;&lt;br /&gt;&amp;lt;/properties&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then, we need to enable &lt;a href="http://maven.apache.org/guides/getting-started/index.html#how_do_i_filter_resource_files"&gt;maven resource filtering&lt;/a&gt; in our root pom:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;build&gt;&lt;br /&gt;  &amp;lt;resources&gt;&lt;br /&gt;    &amp;lt;resource&gt;&lt;br /&gt;      &amp;lt;directory&gt;src/main/resources&lt;/directory&gt;&lt;br /&gt;      &amp;lt;filtering&gt;true&lt;/filtering&gt;&lt;br /&gt;    &amp;lt;/resource&gt;&lt;br /&gt;  &amp;lt;/resources&gt;&lt;br /&gt;&amp;lt;/build&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And of course, we need to use them.  So instead of the previous &lt;code&gt;xbean.xml&lt;/code&gt;, we can now use:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;http:endpoint service="test:MyConsumerService"&lt;br /&gt;               endpoint="myConsumer"&lt;br /&gt;               role="consumer" &lt;br /&gt;               locationURI="http://0.0.0.0:${deployment-port}/Service/"&lt;br /&gt;               soap="true"&lt;br /&gt;               soapVersion="${deployment-soap-version}" /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So now, if you want to switch your port, just change the root pom property and rebuild :-)&lt;br /&gt;&lt;br /&gt;The next step is to use &lt;a href="http://maven.apache.org/guides/introduction/introduction-to-profiles.html"&gt;maven profiles&lt;/a&gt; to define environment and easily switch between those.  This is maybe not useful for changing the HTTP port use, but if you configure some database access, you can easily switch between your production database and an embedded one for testing ...</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/03/using-maven-to-switch-runtime.html' title='Using maven to switch runtime properties'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=529337360701716289' title='3 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/529337360701716289/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/529337360701716289'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/529337360701716289'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-8649239194709393228</id><published>2007-03-05T14:58:00.000+01:00</published><updated>2007-03-05T15:17:34.449+01:00</updated><title type='text'>ServiceMix dependencies</title><content type='html'>I have just fixed a small bug in ServiceMix (SM-865) and this makes ServiceMix a *very* lightweight ESB.  The bare minimum dependencies to run the following example are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;servicemix-core&lt;/li&gt;&lt;li&gt;servicemix-jbi&lt;/li&gt;&lt;li&gt;servicemix-services&lt;/li&gt;&lt;li&gt;backport-util-concurrent&lt;/li&gt;&lt;li&gt;spring&lt;/li&gt;&lt;li&gt;xbean-spring&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The example I ran is very simple, and of course dependencies need to be added depending on the JBI components you use.  Anyway, here is the servicemix.xml file:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&amp;lt;beans xmlns:sm="http://servicemix.apache.org/config/1.0"&lt;br /&gt;     xmlns:test="urn:test"&gt;&lt;br /&gt;  &amp;lt;sm:container id="jbi" embedded="true"&gt;                 &lt;br /&gt;    &amp;lt;sm:activationSpecs&gt;&lt;br /&gt;      &amp;lt;sm:activationSpec service="test:echo"&gt;&lt;br /&gt;        &amp;lt;sm:component&gt;&lt;br /&gt;          &amp;lt;bean class="org.apache.servicemix.components.util.EchoComponent" /&gt;&lt;br /&gt;        &amp;lt;/sm:component&gt;&lt;br /&gt;      &amp;lt;/sm:activationSpec&gt;&lt;br /&gt;    &amp;lt;/sm:activationSpecs&gt;&lt;br /&gt;  &amp;lt;/sm:container&gt;&lt;br /&gt;  &amp;lt;sm:client id="client" container="#jbi" /&gt;&lt;br /&gt;&amp;lt;/beans&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And here is the java code used:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;import javax.jbi.messaging.InOut;&lt;br /&gt;import javax.xml.namespace.QName;&lt;br /&gt;import org.apache.servicemix.client.ServiceMixClient;&lt;br /&gt;import org.apache.servicemix.jbi.jaxp.StringSource;&lt;br /&gt;import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;&lt;br /&gt;import org.springframework.context.ApplicationContext;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt;   public static void main(String[] args) throws Exception {&lt;br /&gt;       ApplicationContext context = new ClassPathXmlApplicationContext("servicemix.xml");&lt;br /&gt;       ServiceMixClient client = (ServiceMixClient) context.getBean("client");&lt;br /&gt;       InOut me = client.createInOutExchange();&lt;br /&gt;       me.setService(new QName("urn:test", "echo"));&lt;br /&gt;       me.getInMessage().setContent(new StringSource("&lt;hello&gt;world&lt;/hello&gt;"));&lt;br /&gt;       client.sendSync(me);&lt;br /&gt;       System.err.println(me);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is the results of the work that has been done for the 3.1 release.  The next step is to use the standard JBI components from ServiceMix ...</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/03/servicemix-dependencies.html' title='ServiceMix dependencies'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=8649239194709393228' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/8649239194709393228/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/8649239194709393228'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8649239194709393228'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-2014404634864915511</id><published>2007-02-12T12:48:00.000+01:00</published><updated>2007-01-22T13:36:34.286+01:00</updated><title type='text'>ServiceMix 3.1 released</title><content type='html'>Woohooo ! &lt;a href="http://incubator.apache.org/servicemix/servicemix-31.html"&gt;ServiceMix 3.1&lt;/a&gt; has just been released officially.&lt;br /&gt;This is a very important version with tons of new features, enhancements and bug fixes.</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/02/servicemix-31-released.html' title='ServiceMix 3.1 released'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=2014404634864915511' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/2014404634864915511/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/2014404634864915511'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2014404634864915511'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-7794283936456463728</id><published>2007-01-14T01:03:00.000+01:00</published><updated>2007-01-14T01:18:32.460+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq'/><category scheme='http://www.blogger.com/atom/ns#' term='jms'/><category scheme='http://www.blogger.com/atom/ns#' term='soap'/><category scheme='http://www.blogger.com/atom/ns#' term='wsdl'/><category scheme='http://www.blogger.com/atom/ns#' term='servicemix'/><title type='text'>JMS Soap Binding</title><content type='html'>Dan Diephouse just &lt;a href="http://netzooid.com/blog/2007/01/12/jms-soap-binding-and-iri-scheme-released-from-bea-ibm-sonic-and-tibco/"&gt;blogged&lt;/a&gt; about the announcement of a public review of a &lt;a href="http://mail-archives.apache.org/mod_mbox/ws-axis-dev/200701.mbox/raw/%3C80A43FC052CE3949A327527DCD5D6B27020FB65C@MAIL01.bedford.progress.com%3E/3"&gt;JMS SOAP binding&lt;/a&gt; and &lt;a href="http://mail-archives.apache.org/mod_mbox/ws-axis-dev/200701.mbox/raw/%3C80A43FC052CE3949A327527DCD5D6B27020FB65C@MAIL01.bedford.progress.com%3E/2"&gt;IRI scheme&lt;/a&gt; from BEA, IBM, Sonic and Tibco.  This is a great news for JMS/SOAP interoperability !&lt;br /&gt;&lt;br /&gt;He mentioned that the content-type header has a limited value because of the lack of support for very large messages in JMS.  While this may be true for some providers, &lt;a href="http://activemq.org/"&gt;ActiveMQ&lt;/a&gt; provides &lt;a href="http://activemq.org/site/jms-streams.html"&gt;such a feature&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Also, I'd like to mention I would have been very happy to have a JMS Binding for non-SOAP WSDLs, like the WSDL2 HTTP Binding.  I think it would be even more useful !&lt;br /&gt;Anyway, hopefully &lt;a href="http://servicemix.org"&gt;ServiceMix&lt;/a&gt; will have support for the spec soon ...</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/01/jms-soap-binding.html' title='JMS Soap Binding'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=7794283936456463728' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/7794283936456463728/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/7794283936456463728'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7794283936456463728'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-3943950254789485782</id><published>2007-01-09T10:22:00.000+01:00</published><updated>2007-01-09T10:25:31.183+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq'/><category scheme='http://www.blogger.com/atom/ns#' term='jencks'/><category scheme='http://www.blogger.com/atom/ns#' term='jms'/><category scheme='http://www.blogger.com/atom/ns#' term='jca'/><title type='text'>Jencks 2.0</title><content type='html'>&lt;a href="http://jencks.org"&gt;Jencks 2.0&lt;/a&gt; has been released.&lt;br /&gt;This is a major release because there are lots of incompatibilities, but the main point has been to upgrade to Geronimo 1.2 Transaction Manager, which leads to a much simpler configuration.&lt;br /&gt;The release also includes the ActiveMQ Pool from my previous blog entry.</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/01/jencks-20.html' title='Jencks 2.0'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=3943950254789485782' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/3943950254789485782/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/3943950254789485782'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/3943950254789485782'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-4443885744640258713</id><published>2006-12-20T02:35:00.000+01:00</published><updated>2007-01-09T10:21:50.103+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq'/><category scheme='http://www.blogger.com/atom/ns#' term='jencks'/><category scheme='http://www.blogger.com/atom/ns#' term='jms'/><category scheme='http://www.blogger.com/atom/ns#' term='jca'/><title type='text'>ActiveMQ Pooling</title><content type='html'>Over the past weeks, I spend some times load testing &lt;a title="ServiceMix" href="http://servicemix.org/"&gt;ServiceMix&lt;/a&gt; and &lt;a title="ActiveMQ" href="http://activemq.org/"&gt;ActiveMQ&lt;/a&gt;.&lt;br /&gt;I discovered two things:&lt;br /&gt; * ActiveMQ broker is currently single threaded for a given JMS connection.  The main effect is that if you send messages from several threads on the same connection, all threads will be processing sequentially (well, not exactly, but they will all be processed by a single thread on the broker side).&lt;br /&gt; * ActiveMQ Resource Adapter does not pool sessions and producers: this means that sending a single message with &lt;a title="Jencks" href="http://jencks.org/"&gt;Jencks&lt;/a&gt; using the JMS best practices in a J2EE environment (create a connection, create a session, create a producer, send, close all) will take  three consecutive roundtrips to the JMS broker and is very CPU intensive for the broker (at least, when using JMX).&lt;br /&gt;&lt;br /&gt;The first problem is mainly apparent when using persistent messages and there are a few things than can be used to speed up things (see the &lt;a title="LogicBlaze" href="http://logicblaze.com/"&gt;LogicBlaze&lt;/a&gt;   &lt;a title="tuning guide" href="http://devzone.logicblaze.com/site/apache-activemq-performance-tuning-guide.html"&gt;tuning guide&lt;/a&gt; for ActiveMQ).  However these tuning tweaks are not always desirable, and there was an easy solution: as the broker use a single thread for given JMS connection, we just have to use multiple connections.  Hence, I enhanced the org.apache.activemq.pool package so that the PooledConnectionFactory can reuse more than one connection.&lt;br /&gt;&lt;br /&gt;The second point was more difficult to solve, as I did not had time to rewrite the ActiveMQ Resource Adapter --  and I'm still not sure of the downside of pooling sessions and consumers inside a full J2EE environment (security for example).  But my needs were only to be able to have XA support and session pooling at the same time.  Once again, the solution was to enhance the existing PooledConnectionFactory to support XA resource enlistment.  This was quite easy, as the jencks project already contained some code written by a contributor.  Unfortunately, I could not reuse it, as it uses the XA JMS api, and in such a case, ActiveMQ force the use of an XA transaction, and I wanted the same connection to be reused with and without transactions.  So I rewrite it.&lt;br /&gt;&lt;br /&gt;Last, but not least, I needed this ConnectionPool to be correctly used with the Jencks inbound JCA support.  It sounds easy (and I thought it was), but at first, the two JMS session were enlisted in the transaction, but they were not recognized as using the same Resource Manager.  It was inefficient, but worse, the transaction did not complete successfully.  Back to the drawing board ...&lt;br /&gt;&lt;br /&gt;Well, the good news is that it now works !&lt;br /&gt;So jencks now features a new module called &lt;span style="font-weight: bold;"&gt;jencks-amqpool&lt;/span&gt; which defines three different factory beans:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Courier New;"&gt;PooledConnectionFactory&lt;span style="font-family:Verdana;"&gt;: the standard JMS pooled connection factory&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Courier New;"&gt;XaPooledConnectionFactory&lt;span style="font-family:Verdana;"&gt;: this one supports XA transaction auto enlistement&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Courier New;"&gt;JcaPooledConnectionFactory&lt;span style="font-family:Verdana;"&gt;: to be used with jencks JCA inbound support&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Note that the three connection factories inherit from each other, so that it is completely safe to use the JCA connection factory in all cases.&lt;br /&gt;&lt;br /&gt;Code is available at http://fisheye.codehaus.org/browse/jencks/trunk/jencks-amqpool/src/main/java/org/jencks/amqpool/ and will be include in the upcoming 2.0 release of Jencks.&lt;br /&gt;&lt;br /&gt;Here are some simple performance tests.  The test spawns 10 threads, each sending 100 messages through the same JMS connection factory.&lt;br /&gt;Using a single connection for the factory:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;without transactions: 38 msgs/sec&lt;/li&gt;&lt;li&gt;with a transaction for each message: 41 msgs/sec&lt;/li&gt;&lt;li&gt;with a transaction for 10 messages: 283 msgs/sec&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Using 10 connections in the factory:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;without transactions: 150 msgs/sec&lt;/li&gt;&lt;li&gt;with a transaction for each message: 173 msgs/sec&lt;/li&gt;&lt;li&gt;with a transaction for 10 messages: 353 msgs/sec&lt;br /&gt; &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;As you can see, the performance boost over the previous pooled connection factory is quite important: 4 times faster ! (unless you use transaction batching).&lt;br /&gt;&lt;br /&gt;For the JCA outbound part, the tests are launched with 10 threads, 100 messages per thread.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;JCA managed connection factory: 11 msgs/sec&lt;/li&gt;&lt;li&gt;Pooled connection factory: 31 msgs/sec&lt;/li&gt;&lt;li&gt;Pooled connection factory with 10 connections: 143 msgs/sec&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The pooled connection factory is three times faster and 12 times faster when using 10 connections !  In addition, the tests were using 10% of my CPU with the pooled connection factory, but 100% with JCA managed connection factory.</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2006/12/over-past-weeks-i-spend-some-times-load.html' title='ActiveMQ Pooling'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=4443885744640258713' title='2 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/4443885744640258713/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/4443885744640258713'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/4443885744640258713'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-116596025860041227</id><published>2006-12-12T22:50:00.000+01:00</published><updated>2006-12-12T22:51:59.166+01:00</updated><title type='text'>GWT</title><content type='html'>I have just viewed Bruce Johnson &lt;a title="tech talk" href="http://w.on24.com/r.htm?e=31594&amp;s=1&amp;amp;k=1AD83D1D6B16BB2242DDF3D940DF8169&amp;amp;partnerref=atssc_sitepost_12_12_06"&gt;tech talk&lt;/a&gt; on GWT (&lt;a title="Google Web Toolkit" href="http://code.google.com/webtoolkit/"&gt;Google Web Toolkit&lt;/a&gt;).&lt;br /&gt;It sounds really powerful, especially the fact that your code is statically checked and the hosted mode.&lt;br /&gt;I really need to try it.  Maybe a new console for &lt;a title="ServiceMix" href="http://servicemix.org"&gt;ServiceMix&lt;/a&gt;   which would allow the management of a ServiceMix cluster ...</content><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2006/12/gwt.html' title='GWT'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=116596025860041227' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/116596025860041227/comments/default' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/posts/default/116596025860041227'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/116596025860041227'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email></author></entry></feed>