<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-30094322</id><updated>2012-01-24T22:57:40.923+01:00</updated><category term='provisioning'/><category term='apache'/><category term='felix'/><category term='camel testing blueprint'/><category term='distributed'/><category term='soap'/><category term='asf'/><category term='cluster'/><category term='JBI'/><category term='esb'/><category term='tlp'/><category term='fusesource kickoff  camel'/><category term='jira'/><category term='camel'/><category term='wsdl'/><category term='jaas'/><category term='jencks'/><category term='activemq'/><category term='osgi'/><category term='fabric'/><category term='configuration'/><category term='kernel'/><category term='karaf osgi fusesource fabric fuse'/><category term='sca'/><category term='irc'/><category term='dosgi karaf osgi fusesource fabric fuse distributed services'/><category term='java ee'/><category term='jca'/><category term='jms'/><category term='ws-notification servicemix cxf jaxws web services'/><category term='management'/><category term='karaf'/><category term='servicemix'/><title type='text'>Guillaume Nodet's blog</title><subtitle type='html'></subtitle><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://www.blogger.com/feeds/30094322/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>58</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-30094322.post-84138712005604758</id><published>2012-01-18T12:32:00.000+01:00</published><updated>2012-01-18T12:32:39.287+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='camel testing blueprint'/><title type='text'>Unit testing Camel Blueprint routes</title><content type='html'>Last week, while &lt;a href="http://gnodet.blogspot.com/2012/01/back-from-las-vegas.html"&gt;in Vegas&lt;/a&gt;, I discussed with my colleague  &lt;a href="http://scottcranton.blogspot.com/"&gt;Scott Cranton&lt;/a&gt; and he told me that something that was really making our users tend to stick with Spring-DM when using &lt;a href="http://camel.apache.org/"&gt;Camel&lt;/a&gt; &lt;a href="http://camel.apache.org/using-osgi-blueprint-with-camel.html" title="Using OSGi blueprint with Camel"&gt;Blueprint routes&lt;/a&gt; was that unit testing those routes  was not possible.&lt;br /&gt;&lt;br /&gt;So I hacked a small support library for Camel, leveraging &lt;a href="http://code.google.com/p/pojosr/"&gt;PojoSR&lt;/a&gt; which provides a service registry without using a fully compliant OSGi container. This allows defining real unit tests (as opposed to integration tests using &lt;a href="http://team.ops4j.org/wiki/display/paxexam/Pax+Exam"&gt;Pax Exam&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;See the below example.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;public class DebugBlueprintTest extends CamelBlueprintTestSupport {&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    protected Collection&amp;lt;URL&amp;gt; getBlueprintDescriptors() {&lt;br /&gt;        return Collections.singleton(getClass().getResource("camelContext.xml"));&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Test&lt;br /&gt;    public void testRoute() throws Exception {&lt;br /&gt;        // set mock expectations&lt;br /&gt;        getMockEndpoint("mock:a").expectedMessageCount(1);&lt;br /&gt;&lt;br /&gt;        // send a message&lt;br /&gt;        template.sendBody("direct:start", "World");&lt;br /&gt;&lt;br /&gt;        // assert mocks&lt;br /&gt;        assertMockEndpointsSatisfied();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;pre class="brush: xml"&gt;&amp;lt;blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;camelcontext autostartup="true" id="camelContext" trace="true" xmlns="http://camel.apache.org/schema/blueprint"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;route&amp;gt;&lt;br /&gt;   &amp;lt;from uri="direct:start"/&gt;&lt;br /&gt;   &amp;lt;transform&gt;&lt;br /&gt;    &amp;lt;simple&gt;Hello ${body}&amp;lt;/simple&gt;&lt;br /&gt;   &amp;lt;/transform&gt;&lt;br /&gt;   &amp;lt;to uri="mock:a"/&gt;&lt;br /&gt;  &amp;lt;/route&gt;&lt;br /&gt; &amp;lt;/camelcontext&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/blueprint&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-84138712005604758?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/84138712005604758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=84138712005604758' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/84138712005604758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/84138712005604758'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2012/01/unit-testing-camel-blueprint-routes.html' title='Unit testing Camel Blueprint routes'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-8238180629549883888</id><published>2012-01-17T17:03:00.000+01:00</published><updated>2012-01-17T17:03:07.238+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fusesource kickoff  camel'/><title type='text'>Back from Las Vegas</title><content type='html'>I'm back from Las Vegas where we had a fantastic &lt;a href="http://fusesource.com/"&gt;FuseSource&lt;/a&gt; KickOff meeting.&lt;br /&gt;&lt;br /&gt;As you can see below, a real camel had been brought from the west coast and &lt;a href="http://macstrac.blogspot.com/"&gt;James&lt;/a&gt; even had a short ride on it!  On the technical side, we expect a bunch of exciting stuff this year, so you'll certainly hear from us soon.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-cZNKTFktzbA/TxWZE9aF0HI/AAAAAAAAFfw/-RdadYb0yOQ/s1600/FuseSource%2BKickOff.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="250" src="http://4.bp.blogspot.com/-cZNKTFktzbA/TxWZE9aF0HI/AAAAAAAAFfw/-RdadYb0yOQ/s400/FuseSource%2BKickOff.jpeg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-8238180629549883888?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/8238180629549883888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=8238180629549883888' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8238180629549883888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8238180629549883888'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2012/01/back-from-las-vegas.html' title='Back from Las Vegas'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-cZNKTFktzbA/TxWZE9aF0HI/AAAAAAAAFfw/-RdadYb0yOQ/s72-c/FuseSource%2BKickOff.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-865855510025084540</id><published>2011-10-11T18:51:00.000+02:00</published><updated>2011-10-11T18:51:10.423+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ws-notification servicemix cxf jaxws web services'/><title type='text'>WS-Notification implementation</title><content type='html'>Since the early days, Apache ServiceMix has had an implementation of the &lt;a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsn"&gt;Oasis WS-Notification&lt;/a&gt; specifications.  This implementation was built on top of Apache ActiveMQ and available inside the JBI bus as a service.  Now that JBI is being put aside in ServiceMix, some questions arose about the future of this component.&lt;br /&gt;&lt;br /&gt;So last week, I took a stab at rewriting the component using pure JAX-WS services.  For those that are not familiar with WS-Notification, this specification, unlike most other WS-* specifications defines a service described by a WSDL, so there's no low level protocol implementation to write.  I took most of the code from ServiceMix implementation and just rewrote the JBI specific bits to leverage JAX-WS instead.&lt;br /&gt;&lt;br /&gt;The results have been committed into Apache CXF and should be part of the upcoming 2.5 release.  Note that the implementation itself does not require CXF, though it can very well use it as the JAXWS provider.&lt;br /&gt;&lt;br /&gt;If you want to give it a try, you need to build CXF trunk locally and then run the following commands in Karaf:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;karaf&gt; features:addurl mvn:org.apache.cxf.karaf/apache-cxf/2.5.0-SNAPSHOT/xml/features&lt;br /&gt;karaf&gt; features:install wsn &lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;To check that the WS-Notification broker is correctly started, you can try the following command:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;karaf&gt; cat http://0.0.0.0:8182/wsn/NotificationBroker?wsdl&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The services are also exposed as OSGi services, so that they can be directly accessed if needed.  If you use the awesome &lt;a href="http://gnodet.blogspot.com/2011/06/distributed-osgi-in-fabric.html"&gt;Fabric DOSGi&lt;/a&gt; implementation, it can be very interesting.&lt;br /&gt;&lt;br /&gt;Some areas could still be enhanced, as the codebase is mostly the same as the old ServiceMix component. I'm thinking to complex topic expressions or persistence of subscriptions.  If you have any real need for something, send an email to the CXF mailing lists ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-865855510025084540?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/865855510025084540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=865855510025084540' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/865855510025084540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/865855510025084540'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2011/10/ws-notification-implementation.html' title='WS-Notification implementation'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-2828277070903882986</id><published>2011-06-16T09:30:00.000+02:00</published><updated>2011-06-16T09:30:26.190+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dosgi karaf osgi fusesource fabric fuse distributed services'/><title type='text'>Distributed OSGi in Fabric</title><content type='html'>The Remote Services OSGi specification describes how services registered in an OSGi framework can be transparently accessed from another OSGi framework.  This is in essence a remoting capability for OSGi services.  &lt;a href="http://fabric.fusesource.org/"&gt;Fabric&lt;/a&gt; has a very fast implementation of this specification, leveraging ZooKeeper for the discovery of services.&lt;br /&gt;&lt;br /&gt;From the user point of view,  registering a service with a property &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; "&gt;service.exported.interfaces&lt;/span&gt; (with a value of ‘*’ or a list of classes to expose) is the only thing to do to make a service available from the outside.  The Fabric DOSGi implementation will automatically detect which services have to be imported and will automatically create a proxy in the OSGi registry for those needed.  This services to be imported are found through the use of Service Hooks which enable the implementation to be aware of which services are required by existing bundles.  For example, if a bundle registers a ServiceListener (directly or indirectly by using Blueprint for example), the Fabric DOSGi implementation will check if there is a local service satisfying the listener and if there’s none, it will look into the ZooKeeper registry and import a matching service.&lt;br /&gt;&lt;br /&gt;The Fabric implementation is based on the insanely fast &lt;a href="http://hawtdispatch.fusesource.org/"&gt;HawtDispatch&lt;/a&gt; library which has a very nice support for NIO.  The result is a very fast remoting mechanism for OSGi with more than 25.000 requests per second on my laptop.  This remoting mechanism is actually not dependant on OSGi and external clients can also connect to a remote OSGi service provided they can find the service identifier from ZooKeeper or some other place.&lt;br /&gt;&lt;br /&gt;A &lt;a href="https://github.com/fusesource/fabric/tree/master/fabric-examples/fabric-camel-dosgi"&gt;complete example&lt;/a&gt; can be found in the Fabric source tree at on github.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-2828277070903882986?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/2828277070903882986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=2828277070903882986' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2828277070903882986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2828277070903882986'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2011/06/distributed-osgi-in-fabric.html' title='Distributed OSGi in Fabric'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-2493584862248473072</id><published>2011-06-14T17:47:00.000+02:00</published><updated>2011-06-14T17:47:20.462+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='karaf osgi fusesource fabric fuse'/><title type='text'>Provisionning with Fabric</title><content type='html'>Already, one month since my last blog entry, but time as been flying with the birth of my son Arthur a few weeks ago.  I'd like to talk about the provisioning mechanism of &lt;a href="http://fabric.fusesource.org/"&gt;Fabric&lt;/a&gt; a bit.&lt;br /&gt;&lt;br /&gt;In my last post, I explained how configuration was done through the use of ZooKeeper as the repository for configurations and profiles, propagated to various bundles using the OSGi ConfigurationAdmin service.  The provisioning mechanism in Fabric is based on this mechanism: the fabric-agent bundle receives its configuration through the org.fusesource.fabric.agent pid and will automatically update bundles as needed.  The nice thing is that the configurations are computed using an overlay mechanism which means that the list of bundles or features to deploy will come from the various profiles a give node has been assigned.&lt;br /&gt;&lt;br /&gt;The agent itself supports several kinds of informations:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;bundles that need to be installed&lt;/li&gt;&lt;li&gt;karaf features that need to be installed&lt;/li&gt;&lt;li&gt;repositories for karaf features&lt;/li&gt;&lt;li&gt;a url pointing to the osgi framework to use&lt;/li&gt;&lt;li&gt;system properties&lt;/li&gt;&lt;li&gt;osgi framework properties&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;An example of defining such profiles can be found in the &lt;a href="https://github.com/fusesource/fabric/blob/master/fabric-examples/fabric-camel-dosgi/etc/install-fabric-dosgi-camel.karaf#L37"&gt;fabric example&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The agent will use those informations and delegate to an internal OSGi resolver to compute the actual list of bundles to deploy.  It will then compare this list to the list of bundles already installed and resolve the differences by installing / updating / uninstalling bundles.  The agent is able to upgrade all bundles, including core Karaf bundles and even the OSGi framework itself and framework properties.&lt;br /&gt;&lt;br /&gt;The profile notion I explained in my &lt;a href="http://gnodet.blogspot.com/2011/05/configuration-with-fusesource-fabric.html"&gt;previous blog entry&lt;/a&gt; allow the use of profiles for provisioning and configuration.  For example, a profile can be defined for deploying ActiveM or Camel.  And remember one can override profiles, so you can define a profile for your application and change the IP of the ActiveMQ broker in overridden profiles based on the geographic location to connect to the nearest broker.&lt;br /&gt;&lt;br /&gt;Due to the configuration bridge between the OSGi Configuration Admin and ZooKeeper, any change made into the zookeeper tree will be reflected to the provisionning agent and the bundles updated immediately.  This may or may not be a desired behavior and that's one of the reason why the ZooKeeper tree used by Fabric has a notion of versions.  But that'll be explained in a follow up entry.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-2493584862248473072?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/2493584862248473072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=2493584862248473072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2493584862248473072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2493584862248473072'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2011/06/provisionning-with-fabric.html' title='Provisionning with Fabric'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-4051444236704437654</id><published>2011-05-07T10:47:00.005+02:00</published><updated>2011-05-08T00:29:07.174+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='fabric'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='karaf'/><title type='text'>Configuration with FuseSource Fabric</title><content type='html'>From a high level, ZooKeeper can be seen as a replicated tree, and &lt;a href="http://fabric.fusesource.org/"&gt;Fabric&lt;/a&gt; uses this tree to store the configuration of the various agents (we call Agent, any Karaf instance connected to the same Fabric cluster).&lt;br /&gt;&lt;br /&gt;Fabric defines a notion of profile, which is a "kind" of agent.  We can define different profiles for various applications we want to deploy in Karaf, for example an ActiveMQ broker or a web server.  A given agent can be assigned multiple profiles, allowing a single Karaf instance to serve multiple purposes.&lt;br /&gt;&lt;br /&gt;To configure a Karaf instance, Fabric uses the ConfigAdmin OSGi service which is the standard way to push configurations to OSGi applications. An agent will have a bundle deployed which will monitor the ZooKeeper tree and update the configurations according to the profiles it has been assigned.  Each bundle will then automatically be notified of the changes through the ConfigAdmin service.&lt;br /&gt;&lt;br /&gt;It is often the case that configurations are mostly the same between several nodes, but to one or two parameters that may change.  In order to increase sharing between profiles, profiles can inherit other profiles. The actual configurations are computed using an overlay mechanism so that the parent's configurations are overriden by the children ones.&lt;br /&gt;&lt;br /&gt;The zookeeper layout for the configurations is setup using the following nodes in the zookeeper tree:&lt;br /&gt;&lt;pre&gt;/fabric/configs/agents/{agent}&lt;br /&gt;/fabric/configs/versions/{version}/agents/{agent}&lt;br /&gt;/fabric/configs/versions/{version}/profiles/{profile}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The first node contains the &lt;code&gt;{version}&lt;/code&gt; used for a given agent.  I'll explain more about versions in a later post.  Once we have the version, we can go the the second node which will give the list of profiles assigned to that node.  The computation is done by going to the list of parents and retrieving the configurations maps which are organized as following:&lt;br /&gt;&lt;pre&gt; /.../{profile}/{pid}/{key}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;A profile can contain any number of such nodes, which gives a map (indexed by the &lt;code&gt;{pid}&lt;/code&gt;) of maps (indexed by the &lt;code&gt;{key}&lt;/code&gt;) and which values are the content of the node. A special value &lt;code&gt;#deleted#&lt;/code&gt; can be used to flag a &lt;code&gt;{pid}&lt;/code&gt; or &lt;code&gt;{key}&lt;/code&gt; as deleted so that it won't appear in the overlaid configuration.  The &lt;code&gt;{pid}&lt;/code&gt; will be used as the OSGi configuration pid and the contents will be the various &lt;code&gt;{key}&lt;/code&gt;s defined.   Note that a &lt;code&gt;{pid}&lt;/code&gt;containing a dash will be identified as a factory pid.&lt;br /&gt;&lt;br /&gt;After creating creating the ZooKeeper server in Fabric using the &lt;code&gt;fabric:zk-cluster root&lt;/code&gt; command, you can experiment with the &lt;a href="http://fabric.fusesource.org/documentation/commands/commands.html"&gt;zookeeper commands&lt;/a&gt; and see the changes reflected on agents.&lt;br /&gt;&lt;br /&gt;Provisioning is done through this very mechanism.  My next post will explain in details how this is done.  Stay tuned!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-4051444236704437654?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/4051444236704437654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=4051444236704437654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/4051444236704437654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/4051444236704437654'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2011/05/configuration-with-fusesource-fabric.html' title='Configuration with FuseSource Fabric'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-3100365016840154368</id><published>2011-05-04T15:11:00.003+02:00</published><updated>2011-05-04T15:26:43.864+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cluster'/><category scheme='http://www.blogger.com/atom/ns#' term='fabric'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='provisioning'/><category scheme='http://www.blogger.com/atom/ns#' term='karaf'/><title type='text'>Introducing FuseSource Fabric</title><content type='html'>I'm very pleased to introduce &lt;a href="http://fabric.fusesource.org/"&gt;FuseSource Fabric&lt;/a&gt;, a distributed configuration, management and provisioning system for the products supported by &lt;a href="http://fusesource.com/"&gt;FuseSource&lt;/a&gt;: &lt;a href="http://servicemix.apache.org/"&gt;Apache ServiceMix&lt;/a&gt;, &lt;a href="http://camel.apache.org/"&gt;Apache Camel&lt;/a&gt;&lt;a&gt;, &lt;/a&gt;&lt;a href="http://activemq.apache.org/"&gt;Apache ActiveMQ&lt;/a&gt; and &lt;a href="http://cxf.apache.org/"&gt;Apache CXF&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://fabric.fusesource.org/documentation/user-guide.html"&gt;user's guide&lt;/a&gt; contains lots of informations, so I won't rewrite it all again, but I instead invite you to have a quick look at it.   The core Fabric is deployed on top of &lt;a href="http://karaf.apache.org/"&gt;Apache Karaf&lt;/a&gt; and heavily reuses the very mature &lt;a href="http://zookeeper.apache.org/"&gt;Apache ZooKeeper&lt;/a&gt; project.&lt;br /&gt;&lt;br /&gt;I'm really excited about Fabric.  I've been working on it since Apache Karaf 2.2.0 has been released and I'm glad to share this work.  I won't add much more for now, but stay tuned as I plan to write a number of posts explaining the various parts of Fabric.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-3100365016840154368?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/3100365016840154368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=3100365016840154368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/3100365016840154368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/3100365016840154368'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2011/05/introducing-fusesource-fabric.html' title='Introducing FuseSource Fabric'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-9125990171287702095</id><published>2011-05-03T16:52:00.008+02:00</published><updated>2011-05-03T17:17:41.301+02:00</updated><title type='text'>CamelOne conference</title><content type='html'>&lt;div&gt;&lt;br /&gt;I just want to point out the great conference &lt;a href="http://fusesource.com/"&gt;FuseSource&lt;/a&gt; is sponsoring around open source integration and especially Apache Camel.   Unfortunately, I won't be able to attend the event as my wife is expecting our sixth child in the coming weeks :-).  That would have been a great opportunity to have my copy of the EIP book signed by Gregor though.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You should definitely go there and listen to all the &lt;a href="http://fusesource.com/camelone2011/speakers/"&gt;great speakers&lt;/a&gt;.  Click on the image below for more informations.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://fusesource.com/camelone2011/"&gt;&lt;img style="cursor:pointer; cursor:hand; width: 400px; height: 200px" src="http://fusesource.com/images/website_banner_resize.jpg" border="0" alt="CamelOne" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://fusesource.com/camelone2011/"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-9125990171287702095?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/9125990171287702095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=9125990171287702095' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/9125990171287702095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/9125990171287702095'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2011/05/camelone-conference.html' title='CamelOne conference'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-687922390714666659</id><published>2010-12-21T18:11:00.002+01:00</published><updated>2010-12-21T18:15:18.108+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBI'/><category scheme='http://www.blogger.com/atom/ns#' term='esb'/><category scheme='http://www.blogger.com/atom/ns#' term='camel'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='servicemix'/><title type='text'>Thoughts about ServiceMix</title><content type='html'>I’ve been involved in ServiceMix, the Open Source ESB, nearly since its inception.  ServiceMix was started by &lt;a href="http://macstrac.blogspot.com/"&gt;James Strachan&lt;/a&gt; and &lt;a href="http://rajdavies.blogspot.com/"&gt;Rob Davies&lt;/a&gt; in May 2005 and the 1.0 version was released in August 2005. I joined LogicBlaze in October 2005 (leaving Mule behind, as I was a committer on Mule) to work on the 2.x releases (2.0 was released in November 2005) and then on the 3.x after the move from Codehaus to the Apache Software Foundation (3.0 was released in May 2007) and the 4.x versions based on OSGi (4.0 was released in March 2009).  Even though I’m now focusing more on the OSGi side now (being the VP of Karaf), I’ve done my share of work on ServiceMix (I’m still the first committer in terms of number of commits according to http://svnsearch.org/svnsearch/repos/ASF/search?path=/servicemix) and I’ve been the VP of ServiceMix at the ASF for a few years.&lt;br /&gt;&lt;br /&gt;ServiceMix started as a very lightweight implementation of JBI spec.  The 2.x version brought much more JBI compliance and the 3.x has seen migration from the lightweight component to fully fledge JBI components and full JBI compliance.  In doing so, ServiceMix became a container, as required per the JBI spec and over-time lost a bit of its lightweight-ness.  That’s exactly at the same time that Camel was created as a routing library, based on the experience with ServiceMix.  After the 3.0 was released it became apparent that the JBI spec was way too limited with respect to the container (classloaders and even the packaging are a real pain in JBI), so we started experimenting with OSGi at that time and that led the path to ServiceMix 4.x and the Karaf project, which started as ServiceMix Kernel.&lt;br /&gt;&lt;br /&gt;In 2007, the SCA spec came out, backed by IBM and Oracle, and during a few months, there were a lot of heated debate around JBI versus SCA.  It eventually settled a bit when people started understanding that those specs were not really competing, as JBI was targeted around components interoperability while SCA target was application development and could be built on top of JBI.  However, JBI was not backed by the big vendors (only really SUN), and when the spec lead for JBI 2.0 left SUN with no replacement, it became clear that the JBI spec was dead.&lt;br /&gt;&lt;br /&gt;Another point is that over time, Camel grew to become a top level project and be the very successful project we know, and for some time, we did not really know what to do with the overlap between Camel components and ServiceMix components.   &lt;br /&gt;&lt;br /&gt;Since JBI 2.0 doesn't appear to be going anywhere we realised we should focus on Camel for the EIP support and connectivity and that OSGi was a better long term standard to represent the registry of endpoints, so we've refactored ServiceMix NMR to be more lightweight, based on the lightweight OSGi container and based around the OSGi registry; with JBI support an optional legacy connector. So we now have a simple lightweight approach to providing a middleware agnostic registry of endpoints with full hot-deploy and supporting powerful class loader versioning schemes via the OSGi registry. &lt;br /&gt;&lt;br /&gt;Long live ServiceMix, Camel and OSGi!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-687922390714666659?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/687922390714666659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=687922390714666659' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/687922390714666659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/687922390714666659'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2010/12/thoughts-about-servicemix.html' title='Thoughts about ServiceMix'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-7284981595604465569</id><published>2010-09-27T14:40:00.002+02:00</published><updated>2010-09-27T14:41:52.736+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='camel'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='karaf'/><title type='text'>Two Karaf related Camel components</title><content type='html'>While thinking about a centralized logging system for &lt;a href="http://karaf.apache.org/"&gt;Karaf&lt;/a&gt; and &lt;a href="http://fusesource.com/products/enterprise-servicemix/"&gt;FUSE ESB&lt;/a&gt;, I had this idea that instead of using a built-in JMS appender, such as the one provided by Log4j, we could instead easily use &lt;a href="http://camel.apache.org/"&gt;Camel&lt;/a&gt; for that.  Camel is really the best fit for such a thing, as we'd be able to add advanced things such as redelivery, batching, compression and choose easily the transport we want (JMS or plain TCP).&lt;br /&gt;&lt;br /&gt;The OSGi EventAdmin service is also an important point for monitoring events in the OSGi runtime, as most of the OSGi services do publish events to it (Blueprint bundles events, bundle events, etc...).  So this was another need for a camel component.&lt;br /&gt;&lt;br /&gt;Given Camel 2.5 will be released soon, I did not want to destabilize trunk just before the release so I've committed them to a &lt;a href="http://github.com/gnodet/camel/commits/trunk"&gt;github fork&lt;/a&gt; for now.&lt;br /&gt;&lt;br /&gt;Those two components are really easy to use:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"&gt;&lt;br /&gt;    &amp;lt;camelcontext xmlns="http://camel.apache.org/schema/blueprint"&gt;&lt;br /&gt;        &amp;lt;route&gt;&lt;br /&gt;            &amp;lt;from uri="paxlogging:camel"/&gt;&lt;br /&gt;            &amp;lt;to uri="stream:out"/&gt;&lt;br /&gt;        &amp;lt;/route&gt;&lt;br /&gt;    &amp;lt;/camelContext&gt;&lt;br /&gt;&amp;lt;/blueprint&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In your Karaf installation, add the &lt;span class="Apple-style-span"&gt;osgi:camel&lt;/span&gt; as a root appender, and you'll see events printed to the console, though not in a nice way, as the goal is really to send them over the wire.&lt;br /&gt;&lt;br /&gt;For the event admin component, things are really easy too:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"&gt;&lt;br /&gt;    &amp;lt;camelcontext xmlns="http://camel.apache.org/schema/blueprint"&gt;&lt;br /&gt;        &amp;lt;route&gt;&lt;br /&gt;            &amp;lt;from uri="eventadmin:*"/&gt;&lt;br /&gt;            &amp;lt;to uri="stream:out"/&gt;&lt;br /&gt;        &amp;lt;/route&gt;&lt;br /&gt;    &amp;lt;/camelContext&gt;&lt;br /&gt;&amp;lt;/blueprint&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The name of the consumer endpoint identifies which topic the endpoint will consume from.  This component can also be used as a producer to actually publish events to the Event Admin.&lt;br /&gt;&lt;br /&gt;I think those components still miss a bit of configuration, but they seem to be a great way to distribute log events and OSGi events to the outside world in a very powerful configurable way.&lt;br /&gt;&lt;br /&gt;As usual, feedback welcome.  I think those two components can have some real use case, so I'd like them to be put back into the Camel trunk for 2.6.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-7284981595604465569?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/7284981595604465569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=7284981595604465569' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7284981595604465569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7284981595604465569'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2010/09/two-karaf-related-camel-components.html' title='Two Karaf related Camel components'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-508342205105469757</id><published>2010-09-22T23:00:00.003+02:00</published><updated>2010-09-22T23:38:15.182+02:00</updated><title type='text'>Introducing Cade, the Config ADmin Extender</title><content type='html'>The OSGi Alliance is working on enhancements to the OSGi ConfigAdmin and some of the experimentation have been unveiled by Peter Kriens in a &lt;a href="http://www.osgi.org/blog/2010/08/easier-configuration-admin.html"&gt;recent blog&lt;/a&gt;.   The point is I was in need for enhancing the &lt;a href="http://karaf.apache.org/"&gt;Apache Karaf&lt;/a&gt; blueprint configurations to be more dynamic, for example to restart the SSH server if its configuration had changed.&lt;br /&gt;&lt;br /&gt;So I decided to start hacking on this idea and create &lt;a href="http://cade.fusesource.org/"&gt;cade&lt;/a&gt;, the Config ADmin Extender.  The project is really small and allows you to easily access OSGi configurations in a type-safe manner.  It seems to work quite well, so I plan to start using it in Karaf for the various parts that need a bit of dynamism for handling configuration changes.&lt;br /&gt;&lt;br /&gt;I haven't done any release yet, but I hope to do that really soon.  The &lt;a href="http://github.com/gnodet/cade/"&gt;source code&lt;/a&gt; is Apache Licensed, so feel free to have a look and provide feedback.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-508342205105469757?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/508342205105469757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=508342205105469757' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/508342205105469757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/508342205105469757'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2010/09/introducing-cade-config-admin-extender.html' title='Introducing Cade, the Config ADmin Extender'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-7642979420149207058</id><published>2010-09-06T19:33:00.007+02:00</published><updated>2010-09-07T12:53:47.228+02:00</updated><title type='text'>RemoteOBR</title><content type='html'>Over the last months, I’ve been pondering over the use of OBR, the OSGi Bundle Repository.  OBR describes resources (mostly OSGi bundles) in terms of capabilities and requirements.  The OBR resolver is able to find the list of bundles needed to fulfill a given bundle requirements.  This allows deploying a bundle and its required dependencies without caring too much about the exact dependencies being deployed.  In addition, it takes into account the already locally installed bundles and thus reduces unneeded duplication of libraries in different versions.&lt;br /&gt;&lt;br /&gt;When I started to use the Felix OBR repository earlier this year, I quickly ran into performance problems during both the parsing phase and the resolution phase.  It was nearly unusable for repositories more than a few dozens of resources, which mean in real world scenarii.  So I spent some time optimizing things a bit.  I also enhanced the API to provide more meaningful informations and to allow more control over the resolution.  That work has been released as part of the &lt;a href="http://gnodet.blogspot.com/2010/04/new-version-of-apache-felix.html"&gt;1.6.x series of Felix BundleRepository&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;One of the enhancement I made was the ability to have a more powerful query mechanism for resources.  The goal was to be able to actually use OBR to help people find needed OSGi bundles.  This is often one of the main problem people have when building OSGi applications in the integration space.  The SpringSource guys have done a good job at providing their &lt;a href="http://www.springsource.com/repository/"&gt;Enterprise Bundle Repository&lt;/a&gt; and Apache ServiceMix also regularly provide a &lt;a href="http://repo2.maven.org/maven2/org/apache/servicemix/bundles/"&gt;bunch of OSGi bundles for third party libraries&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The main problem with those repositories is that they tend to become huge (more than 7 Mb of xml), which means it takes a long time to download, parse and consumes a lot of memory once it has been parsed.   If you use it on multiple JVMs, it becomes quickly a problem and a waste.&lt;br /&gt;&lt;br /&gt;That’s when I started to think about the idea of a remote OBR repository.  So here we are: I’ve created a small project named &lt;a href="http://remoteobr.fusesource.com/"&gt;RemoteOBR&lt;/a&gt; at &lt;a href="http://fusesource.com/"&gt;FuseSource&lt;/a&gt; &lt;a href="http://forge.fusesource.org/"&gt;Forge&lt;/a&gt;.  This project decouples the client API from the real repository manager which is remotely queried using a REST protocol.&lt;br /&gt;&lt;br /&gt;It’s not complete yet, but it is already usable, so I invite everyone to go the &lt;a href="http://remoteobr.fusesource.org/"&gt;RemoteOBR&lt;/a&gt; website, download, try it and provide feedback.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-7642979420149207058?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/7642979420149207058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=7642979420149207058' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7642979420149207058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7642979420149207058'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2010/09/remoteobr.html' title='RemoteOBR'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-2361838463113823837</id><published>2010-06-17T16:25:00.004+02:00</published><updated>2010-06-17T16:28:41.324+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asf'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='tlp'/><category scheme='http://www.blogger.com/atom/ns#' term='karaf'/><title type='text'>Apache Karaf</title><content type='html'>Yesterday, the Apache Software Foundation established &lt;a href="http://felix.apache.org/site/apache-felix-karaf.html"&gt;Karaf&lt;/a&gt; as a Top Level Project.&lt;br /&gt;It will take some time before the infrastructure resources are correctly set up, but you should see something at http://karaf.apache.org soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-2361838463113823837?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/2361838463113823837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=2361838463113823837' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2361838463113823837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2361838463113823837'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2010/06/apache-karaf.html' title='Apache Karaf'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-8748339810426384945</id><published>2010-04-14T01:24:00.002+02:00</published><updated>2010-04-14T01:29:36.434+02:00</updated><title type='text'>New version of Apache Felix BundleRepository released!</title><content type='html'>&lt;a href="http://felix.apache.org/site/downloads.cgi"&gt;Felix BundleRepository 1.6.0 released!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm very happy that the &lt;a href="http://felix.apache.org/site/apache-felix-osgi-bundle-repository.html"&gt;Apache Felix Bundlerepository&lt;/a&gt; subproject has been released last week.  I've been working on it recently and I think it should even have deserved a 2.0.0 release.&lt;br /&gt;&lt;br /&gt;This new version provides a new API, very similar to the org.osgi.service.bundlerepository package but which allows more control over the resolution.  Performances for both parsing and resolution have been improved by a factory 10, which in my opinion finally move piece of code into a usable state.&lt;br /&gt;&lt;br /&gt;At the same time, the Felix Web Console has been released and provides a refactored page for bundle repository browsing (amongst other things).  Have a look !&lt;br /&gt;&lt;br /&gt;Next steps on this subproject will include the move to the new Felix Framework resolver to be able to support more OSGi constraints such as uses clauses and thus have results that match the OSGi resolver.&lt;br /&gt;&lt;br /&gt;I'd also love to have an up to date and correct view of maven central repository using BundleRepository. Combined with the web console which allows querying bundle repository in a powerful way, I think that would help a lot finding OSGi bundles.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-8748339810426384945?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/8748339810426384945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=8748339810426384945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8748339810426384945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8748339810426384945'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2010/04/new-version-of-apache-felix.html' title='New version of Apache Felix BundleRepository released!'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-5458429901359027799</id><published>2010-03-16T18:32:00.001+01:00</published><updated>2010-03-16T18:34:09.678+01:00</updated><title type='text'>Spring-DM, Aries Blueprint and custom namespaces</title><content type='html'>Since Spring 2.0, Spring supports custom namespace handlers.  This feature is really useful and can be used to reduce the verbosity of your spring based applications.  Spring-DM has brought this feature along, so it's also available in an OSGi environment.  Unfortunately, the integration of those namespace handlers leads to a lot of problems, mostly due to the legacy spring way of configuring the handlers which does not map well at all in OSGi.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;In a standard environment, Spring lives in a simple classloader.  The classloader which is used to create the spring application is not supposed to change at any time, and everything that is needed for the application is supposed to be available from that classloader.  So let's see what happens with custom namespace handlers.   Spring detects custom namespace handlers through the presence of a file in the following location META-INF/spring.handlers.  This file contains the name of the class supporting a given namespace.  In a non OSGi environment, spring detects the namespace handlers by iterating through the resources and finding all these files.  However, in an OSGi environment, things must be done a bit differently.  The direction which has been taken by Spring-DM is to watch all started bundles and check for this META-INF/spring.handlers file.  The custom namespace is then registered and available for use.  This leads to multiple problems.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;The first one comes from the fact that there is now way to express a dependency onto a "started" bundle.  The OSGi specification defines the Require-Bundle header and Import-Package, but both headers do not care about the fact that the bundle is started or not, only that it is resolved.  This means that when you deploy your bundles, you need to control the start order of all your bundles to make sure that all custom namespace handlers are started before any application that use them.  Failing to do so will result in applications not being started and the solution is to manually restart the bundle.  This really goes against the OSGi best practices.  &lt;br /&gt;&lt;br/&gt;&lt;br /&gt;The second problem comes is caused by the non-staged approach in the parsing of the spring xml configuration files.  The Spring-DM extender parses the xml and each time a non standard element is found, try to locate the appropriate namespace handler in its internal registry and delegate to that namespace.  Once again, this does not work well in OSGi because namespace handlers can come and go and you can't be sure that the namespace are available at the time your bundle start.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;The next problem is related to classloading.  The namespace handler does not come with its own classloader than can contribute to the application (remember spring has been designed to work with a single static classloader).  This means that in order to use a custom namespace, the classloader of the bundle needs to be able to access all the classes that the custom namespace handler will refer to.  If you have ever tried to use CXF in OSGi, you know what I mean: you need to import dozens of packages for your application to start to allow the namespace handler to find the classes it needs.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Another limitation is that custom namespace can't be versioned with Spring-DM and it may lead to having to define different namespaces to solve class-related compatibility issues.  Let's say you have a namespace foo.  This namespace allows to to create an interface named bar (version 1.0).  Later, you have a revision of this package .  This new version of the interface may or may not be compatible with the previous 1.0 version, but this has nothing to do with the namespace or xml schema itself.  With Spring-DM, you need to version your schema because you can't have two namespace handlers supporting the same namespace.  This may be problematic because you end up with two solutions.  The first one is to always change your namespace (by including the version in the namespace), which means all the bundles using your namespace need to change their xml configuration even it it was compatible.  The other solution is to not allow two versions to live in the same OSGi environment.  This is simply not possible unless you fully control everything and this goes against the OSGi very goal.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;I really don't blame the Spring-DM guys: I think their goal was to be fully backward compatible and that's what they achieved.  Sadly, the end result does not behave well in an OSGi environment.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Now, the nice part is that the &lt;a href="http://incubator.apache.org/aries/"&gt;Apache Aries&lt;/a&gt; Blueprint implementation which I've worked on for quite some time now does a much better job at handling those custom namespaces.  All four problems have been solved by leveraging OSGi.   The implementation leverages the service registry for custom namespace handlers, each bundle containing a custom handler registering its own service.  When starting an application, the blueprint extender will make a first pass on the xml configuration files and detect which namespace are used, then put the application in a waiting state until all namespace handlers are available.  Each namespace handler can load its own classes thus avoiding the need for the blueprint bundle to import classes that it's not really aware of (because it uses a custom xml namespace and not plain beans).   Last, by ensuring class-space consistency, a much cleaner versioning can be done on the various namespaces.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;So give it a try if you hit one of the mentioned issues.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-5458429901359027799?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/5458429901359027799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=5458429901359027799' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/5458429901359027799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/5458429901359027799'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2010/03/spring-dm-aries-blueprint-and-custom.html' title='Spring-DM, Aries Blueprint and custom namespaces'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-403935154127177255</id><published>2009-10-21T16:47:00.005+02:00</published><updated>2009-10-21T17:17:28.290+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jira'/><category scheme='http://www.blogger.com/atom/ns#' term='irc'/><category scheme='http://www.blogger.com/atom/ns#' term='camel'/><category scheme='http://www.blogger.com/atom/ns#' term='karaf'/><title type='text'>A jira notification system for irc using camel</title><content type='html'>Last week, I thought that it would be a nice idea to have JIRA notifications for our Apache projects on IRC (for projects that sometimes use an IRC channel).  So I came up with a very simple solution using &lt;a href="http://camel.apache.org/"&gt;Camel&lt;/a&gt; deployed on top of &lt;a href="http://felix.apache.org/site/apache-felix-karaf.html"&gt;Karaf&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The application itself consists in a single xml file to be copied in the deploy folder of your Karaf installation.  This was one of my requirements for ease of maintenance.  This is possible because of the nice hot deployment mechanism for spring xml applications in Karaf.&lt;br /&gt;&lt;br /&gt;Now, if you log onto the #camel, #cxf, #servicemix or #activemq IRC channels, you'll see some messages that look like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;jirabot: Claus Ibsen -  Created: (CAMEL-2090) camel-jms - &lt;br /&gt;   Option autoStartup does not  work &lt;br /&gt;   (see https://issues.apache.org/activemq/browse/CAMEL-2090 )&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Those are all generated by the following applications:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;beans xmlns="http://www.springframework.org/schema/beans"&lt;br /&gt;       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;       xsi:schemaLocation="&lt;br /&gt;       http://www.springframework.org/schema/beans &lt;br /&gt;       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd&lt;br /&gt;       http://camel.apache.org/schema/spring &lt;br /&gt;       http://camel.apache.org/schema/spring/camel-spring.xsd&lt;br /&gt;    "&gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;manifest&gt;&lt;br /&gt;        DynamicImport-Package=*&lt;br /&gt;    &amp;lt;/manifest&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;camelContext xmlns="http://camel.apache.org/schema/spring"&gt;&lt;br /&gt;        &amp;lt;route&gt;&lt;br /&gt;            &amp;lt;from uri="imaps://imap.gmail.com:993?username=xxx&amp;amp;amp;password=xxx&amp;amp;amp;consumer.delay=1000&amp;amp;amp;delete=false" /&gt;&lt;br /&gt;            &amp;lt;convertBodyTo type="java.lang.String"/&gt;&lt;br /&gt;            &amp;lt;!-- Remove any cr/lf that would cause regexp to not work --&gt;&lt;br /&gt;            &amp;lt;setHeader headerName="tmpsubject"&gt;&lt;br /&gt;                &amp;lt;mvel&gt;&lt;br /&gt;    request.headers.subject.replaceAll("\r\n", " ").replaceAll("\r|\n", "")&lt;br /&gt;                &amp;lt;/mvel&gt;&lt;br /&gt;            &amp;lt;/setHeader&gt;&lt;br /&gt;            &amp;lt;!-- Extract the user name from the from header --&gt;&lt;br /&gt;            &amp;lt;setHeader headerName="tmpfrom"&gt;&lt;br /&gt;                &amp;lt;mvel&gt;&lt;br /&gt;    request.headers.from.replaceAll(".*\"(.*)\".*", "$1").replace("(JIRA)", "")&lt;br /&gt;                &amp;lt;/mvel&gt;&lt;br /&gt;            &amp;lt;/setHeader&gt;&lt;br /&gt;            &amp;lt;choice&gt;&lt;br /&gt;                &amp;lt;!-- Camel --&gt;&lt;br /&gt;                &amp;lt;when&gt;&lt;br /&gt;                    &amp;lt;mvel&gt;&lt;br /&gt;    request.headers.tmpsubject.matches(".*jira.*(CAMEL-[0-9]+).*")&lt;br /&gt;                    &amp;lt;/mvel&gt;&lt;br /&gt;                    &amp;lt;setHeader headerName="irc.target"&gt;&lt;br /&gt;                        &amp;lt;constant&gt;#camel&amp;lt;/constant&gt;&lt;br /&gt;                    &amp;lt;/setHeader&gt;&lt;br /&gt;                    &amp;lt;setHeader headerName="issuelink"&gt;&lt;br /&gt;                        &amp;lt;mvel&gt;&lt;br /&gt;    " (see https://issues.apache.org/activemq/browse/" + &lt;br /&gt;        request.headers.tmpsubject.replaceAll(".*jira.*(CAMEL-[0-9]+).*", "$1") + &lt;br /&gt;        " )"&lt;br /&gt;                        &amp;lt;/mvel&gt;&lt;br /&gt;                    &amp;lt;/setHeader&gt;&lt;br /&gt;                &amp;lt;/when&gt;&lt;br /&gt;                &amp;lt;!-- other projects filtering using the exact same mechanism --&gt;&lt;br /&gt;                &amp;lt;!-- Other non jira emails --&gt;&lt;br /&gt;                &amp;lt;otherwise&gt;&lt;br /&gt;                    &amp;lt;setBody&gt;&amp;lt;mvel&gt;&lt;br /&gt;    request.headers.from + ": " + request.headers.tmpsubject&lt;br /&gt;                    &amp;lt;/mvel&gt;&amp;lt;/setBody&gt;&lt;br /&gt;                    &amp;lt;setHeader headerName="irc.target"&gt;&lt;br /&gt;                        &amp;lt;constant&gt;#jirabot.test&amp;lt;/constant&gt;&lt;br /&gt;                    &amp;lt;/setHeader&gt;&lt;br /&gt;                &amp;lt;/otherwise&gt;&lt;br /&gt;            &amp;lt;/choice&gt;&lt;br /&gt;            &amp;lt;setBody&gt;&lt;br /&gt;                &amp;lt;mvel&gt;&lt;br /&gt;    request.headers.tmpfrom + "- " + &lt;br /&gt;        request.headers.tmpsubject.replace("[jira]", "") +&lt;br /&gt;        request.headers.issuelink&lt;br /&gt;                &amp;lt;/mvel&gt;&lt;br /&gt;            &amp;lt;/setBody&gt;&lt;br /&gt;            &amp;lt;to uri="irc:irc.codehaus.org/?nickname=jirabot&amp;amp;username=jirabot" /&gt;&lt;br /&gt;        &amp;lt;/route&gt;&lt;br /&gt;    &amp;lt;/camelContext&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/beans&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This has been a small and enjoyable exercise.  Camel rocks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-403935154127177255?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/403935154127177255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=403935154127177255' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/403935154127177255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/403935154127177255'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2009/10/jira-notification-system-for-irc-using.html' title='A jira notification system for irc using camel'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-7767963806951117039</id><published>2009-06-24T15:27:00.003+02:00</published><updated>2009-06-24T15:30:59.656+02:00</updated><title type='text'>Apache SSHD 0.1.0</title><content type='html'>Last week, we (the Apache Mina team) released the first version of the SSH library I've began and already blogged about. &lt;br /&gt;&lt;br /&gt;The SSHD project provides a server side implementation of the well known SSH protocol. It also provides a client side API which is currently limited and needs improvements (any help welcome!).&lt;br /&gt;&lt;br /&gt;Look at the &lt;a href="http://mina.apache.org/sshd/sshd-010.html"&gt;release page&lt;/a&gt; for more informations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-7767963806951117039?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/7767963806951117039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=7767963806951117039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7767963806951117039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7767963806951117039'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2009/06/apache-sshd-010.html' title='Apache SSHD 0.1.0'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-2225791330640379844</id><published>2009-06-24T15:04:00.004+02:00</published><updated>2009-06-24T20:38:14.460+02:00</updated><title type='text'>OSGi Blueprint Services</title><content type='html'>I gave a presentation on Monday at the OSGi DevCon in Zurich about Blueprint services.&lt;br /&gt;Blueprint Services is the OSGi standardized version of Spring-DM which I've been working on (both the spec and the implementation over the last weeks).&lt;br /&gt;Below is the presentation.  The spec is not published yet, but the implementation code is currently available at:  &lt;br /&gt;   &lt;a href="http://svn.apache.org/repos/asf/geronimo/sandbox/blueprint"&gt;http://svn.apache.org/repos/asf/geronimo/sandbox/blueprint&lt;/a&gt;&lt;br /&gt;This implementation is now integrated into &lt;a href="http://felix.apache.org/site/apache-felix-karaf.html"&gt;Apache Felix Karaf&lt;/a&gt;, a ready to use distribution of OSGi for enterprise / server side applications.&lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px;text-align:left" id="__ss_1622424"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/gnodet/osgi-blueprint-services-1622424?type=presentation" title="OSGi Blueprint Services"&gt;OSGi Blueprint Services&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=blueprintservices-090622184559-phpapp01&amp;stripped_title=osgi-blueprint-services-1622424" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=blueprintservices-090622184559-phpapp01&amp;stripped_title=osgi-blueprint-services-1622424" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View more &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/"&gt;Microsoft Word documents&lt;/a&gt; from &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/gnodet"&gt;gnodet&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-2225791330640379844?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/2225791330640379844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=2225791330640379844' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2225791330640379844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2225791330640379844'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2009/06/osgi-blueprint-services.html' title='OSGi Blueprint Services'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-2193161881243276050</id><published>2009-04-02T13:49:00.006+02:00</published><updated>2009-04-10T20:18:14.144+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='felix'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='karaf'/><category scheme='http://www.blogger.com/atom/ns#' term='servicemix'/><title type='text'>Apache Karaf</title><content type='html'>ApacheCon was really interesting this year!  Recently, a lot of people have expressed a real interest in &lt;a href="http://servicemix.apache.org/kernel/"&gt;ServiceMix Kernel&lt;/a&gt;, our generic OSGi distribution for server side applications.  We've been discussing moving this subproject into &lt;a href="http://felix.apache.org/"&gt;Apache Felix&lt;/a&gt; for several reasons:&lt;ul&gt;&lt;li&gt;raise the visibility and awareness on ServiceMix Kernel&lt;/li&gt;&lt;li&gt; attract a broader community&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Several Apache projects are planning to use ServiceMix Kernel as their container: this includes &lt;a href="http://james.apache.org/"&gt;Apache James&lt;/a&gt;, &lt;a href="http://directory.apache.org/"&gt;Apache Directory&lt;/a&gt; and &lt;a href="http://activemq.apache.org/"&gt;Apache ActiveMQ&lt;/a&gt;.  The &lt;a href="http://incubator.apache.org/sling/site/"&gt;Apache Sling&lt;/a&gt; community is also willing  to contribute to this effort along with some other groups like the &lt;a href="http://wiki.ops4j.org/display/ops4j/Open+Participation+Software+for+Java"&gt;OPS4J&lt;/a&gt; project.&lt;br /&gt;&lt;br /&gt;During this discussion, a name as been proposed by Jamie Goodyear: &lt;span style="font-weight: bold;"&gt;Apache Karaf&lt;/span&gt;.&lt;br /&gt;&lt;blockquote&gt;A carafe is a small container used for serving wine and other drinks (http://en.wikipedia.org/wiki/Carafe). In similarity to the name the Kernel allows applications to be more easily handled, and improves their characteristics (much like a bottle of wine left to breath in a decanter) :)&lt;/blockquote&gt;&lt;br /&gt;I have to thanks Jamie for this name, I really like it.  Plus the K might eventually fill a hole in the list of Apache projects and also reminds the Kernel.&lt;br /&gt;&lt;br /&gt;Moving into Felix does not mean that Karaf will be tied to the Felix OSGi runtime.  We haven't really worked on that yet, but the goal is to be able to use either Felix or Equinox runtimes inside Karaf.  Maybe we'll provide two different distributions in the future...&lt;br /&gt; &lt;br /&gt;Today, both ServiceMix and Felix community have voted and accepted this move.  I think this is a great news for ServiceMix Kernel users, for the Apache communities and for all OSGi users and I'm really excited about that...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-2193161881243276050?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/2193161881243276050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=2193161881243276050' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2193161881243276050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2193161881243276050'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2009/04/apache-karaf.html' title='Apache Karaf'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-8214047792205102597</id><published>2009-04-02T13:46:00.002+02:00</published><updated>2009-04-02T13:49:48.233+02:00</updated><title type='text'>New clustering engine in ServiceMix 4</title><content type='html'>I have expressed several times on the mailing list that the JMS flow included in ServiceMix 3 has some deficiencies.  Learning from that, ServiceMix 4 has a brand new clustering engine that Adrian and I have discussed a bit at ApacheCon.  He blogged about that recently, so have a look at his &lt;a href="http://trenaman.blogspot.com/2009/03/new-jms-flow-in-servicemix-4.html"&gt;blog post&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-8214047792205102597?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/8214047792205102597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=8214047792205102597' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8214047792205102597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8214047792205102597'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2009/04/new-clustering-engine-in-servicemix-4.html' title='New clustering engine in ServiceMix 4'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-4824056635071293478</id><published>2009-04-02T13:37:00.002+02:00</published><updated>2009-04-02T13:40:47.295+02:00</updated><title type='text'>Apache ServiceMix 4.0.0 and Apache ServiceMix NMR 1.0.0</title><content type='html'>During ApacheCon last week, we're released &lt;a href="http://servicemix.apache.org/smx4/servicemix-400.html"&gt;Apache ServiceMix 4.0.0&lt;/a&gt;, the first release of our OSGi-based integration platform.&lt;br /&gt;We've also released &lt;a href="http://servicemix.apache.org/nmr/servicemix-nmr-100.html"&gt;Apache ServiceMix NMR 1.0.0&lt;/a&gt; which contains the NMR layer, the JBI layer.  The main distribution is a minimal JBI container with no components.&lt;br /&gt;Have a look at those, we welcome your feedback!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-4824056635071293478?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/4824056635071293478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=4824056635071293478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/4824056635071293478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/4824056635071293478'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2009/04/apache-servicemix-400-and-apache.html' title='Apache ServiceMix 4.0.0 and Apache ServiceMix NMR 1.0.0'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-3455401965111331566</id><published>2009-04-02T09:58:00.002+02:00</published><updated>2009-04-02T13:37:31.997+02:00</updated><title type='text'>Whitepaper: Large scale deployments with ServiceMix 4</title><content type='html'>At ApacheCon Europe last week, Andreas Gies, a coworker, has given a nice presentation about large scale deployments with ServiceMix 4.  It has been now published as a whitepaper and is available on the &lt;a href="http://fusesource.com/resources/collateral/#whitepapers"&gt;FUSE site&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-3455401965111331566?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/3455401965111331566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=3455401965111331566' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/3455401965111331566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/3455401965111331566'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2009/04/whitepaper-large-scale-deployments-with.html' title='Whitepaper: Large scale deployments with ServiceMix 4'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-740050646785344400</id><published>2009-03-18T09:50:00.002+01:00</published><updated>2009-03-18T09:53:02.680+01:00</updated><title type='text'>Apache ServiceMix Kernel 1.1.0 released</title><content type='html'>The new version of &lt;a href="http://servicemix.apache.org/kernel"&gt;Apache ServiceMix Kernel&lt;/a&gt; has just been released.&lt;br /&gt;&lt;br /&gt;This new release brings a lot of new features, enhancements and bug fixes:&lt;br /&gt;   * remote connection using SSH protocol&lt;br /&gt;   * provisioning enhancements: versioning / hot deployment of features&lt;br /&gt;   * new commands, including OSGi related commands for the Configuration&lt;br /&gt;     Admin and Package Admin services&lt;br /&gt;   * improved spring integration: upgrade to spring 2.5.6 and spring-dm&lt;br /&gt;     1.2.0-m2, the osgi/list command now displays spring applications status&lt;br /&gt;   * container level locking for master / slave deployments&lt;br /&gt;   * support for JAXP 1.4 on all platforms&lt;br /&gt;   * improved JMX support for managing the OSGi framework and features&lt;br /&gt;&lt;br /&gt;You'll find download links and details release notes at the following &lt;a href="http://servicemix.apache.org/kernel/servicemix-kernel-110.html"&gt;location&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-740050646785344400?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/740050646785344400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=740050646785344400' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/740050646785344400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/740050646785344400'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2009/03/apache-servicemix-kernel-110-released.html' title='Apache ServiceMix Kernel 1.1.0 released'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-8754876200947879334</id><published>2008-12-05T09:00:00.003+01:00</published><updated>2008-12-05T11:50:12.039+01:00</updated><title type='text'>SSHD becomes an Apache Mina subproject</title><content type='html'>Just an update on the SSHD project I started a few weeks ago.  It has been accepted yesterday as a MINA subproject :-)&lt;br /&gt;You can find all the needed pointers on the &lt;a href="http://mina.apache.org/sshd/"&gt;web site&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-8754876200947879334?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/8754876200947879334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=8754876200947879334' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8754876200947879334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8754876200947879334'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/12/sshd-becomes-apache-mina-subproject.html' title='SSHD becomes an Apache Mina subproject'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-4457216759617900583</id><published>2008-11-25T13:23:00.004+01:00</published><updated>2008-11-25T13:44:31.954+01:00</updated><title type='text'>ServiceMix4: much more than a JBI container</title><content type='html'>David Greco has posted a nice &lt;a href="http://www.davidgreco.it/MySite/Blog/Entries/2008/11/22_ServiceMix4%3A_much_more_than_a_JBI_container.html"&gt;blog entry&lt;/a&gt; about ServiceMix Kernel.  &lt;br /&gt;I do totally agree: &lt;a href="http://servicemix.apache.org/smx4"&gt;ServiceMix 4&lt;/a&gt; is not only a JBI container, and more precisely the &lt;a href="http://servicemix.apache.org/kernel"&gt;ServiceMix Kernel&lt;/a&gt; which can be run standalone is a universal container (which does not include JBI by default) where you can deploy virtually any kind of artifact from web applications, to JBI applications or plain JAX-WS services.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-4457216759617900583?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/4457216759617900583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=4457216759617900583' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/4457216759617900583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/4457216759617900583'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/11/servicemix4-much-more-than-jbi.html' title='ServiceMix4: much more than a JBI container'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-4770988439820139998</id><published>2008-11-13T10:19:00.003+01:00</published><updated>2009-09-12T10:44:23.394+02:00</updated><title type='text'>SSH Server in Java</title><content type='html'>&lt;a title="ServiceMix Kernel" href="http://servicemix.apache.org/kernel/" id="vcpz"&gt;ServiceMix Kernel&lt;/a&gt; is a small container based on OSGi.  The latest release allows external clients to connect to it and issue commands using a simple protocol implemented on top of TCP or SSL.  However, this remoting protocol has some drawbacks as the internals makes it unable to do another remote login from a remote session.  In addition to that, completion and history do not really work great.&lt;br /&gt;&lt;br /&gt;So I've been thinking about using the SSH protocol, which is widely used, secured, with tons of different clients available. Unfortunately, no SSH server is available in Java.  Over the past weeks, I've been working on implementing this SSH server, based on the IEFT specifications, the JSch SSH client library, and the OpenSSH server source code.  The server itself is based on Apache Mina which is a great framework for using NIO.&lt;br /&gt;&lt;br /&gt;The project is available at &lt;a title="http://code.google.com/p/sshd/" href="http://code.google.com/p/sshd/" id="nuqk"&gt;http://code.google.com/p/sshd/&lt;/a&gt; and although there are lots of limitations right now, the basics of the SSH protocol work.  I plan to integrate it in a bit into ServiceMix Kernel as the default remoting protocol.  Maybe over time, we'll be able to implement SFTP or even a full SSH server integrated with Unix OS (I've already made some tests, but I'm missing a few bits on the PAM integration for authenticating against the OS).&lt;br /&gt;&lt;br /&gt;Anyway, if anyone want to contribute or have any problems trying to use it, just send me an email.  I may set up a google group list for that later if there is any need.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Update: the code is now developed as a subproject of Apache Mina and available at &lt;a href="http://mina.apache.org/sshd/"&gt;http://mina.apache.org/sshd/&lt;/a&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-4770988439820139998?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/4770988439820139998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=4770988439820139998' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/4770988439820139998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/4770988439820139998'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/11/ssh-server-in-java.html' title='SSH Server in Java'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-3628634641731981520</id><published>2008-10-15T23:03:00.002+02:00</published><updated>2008-10-15T23:07:32.339+02:00</updated><title type='text'>FUSE ESB 4 release!</title><content type='html'>&lt;a href="http://fusesource.com/products/enterprise-servicemix4/"&gt;FUSE ESB 4 has just been released&lt;/a&gt;.  I welcome everybody to download and give it a try.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-3628634641731981520?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/3628634641731981520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=3628634641731981520' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/3628634641731981520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/3628634641731981520'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/10/fuse-esb-4-release.html' title='FUSE ESB 4 release!'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-8806970899934405313</id><published>2008-09-18T14:15:00.006+02:00</published><updated>2008-09-18T14:26:25.977+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='servicemix'/><title type='text'>Apache ServiceMix Kernel 1.0.0 released!</title><content type='html'>Apache ServiceMix Kernel 1.0.0 has just been released.&lt;br /&gt;&lt;br /&gt;Apache ServiceMix Kernel is a small OSGi based runtime which provides&lt;br /&gt;a lightweight container onto which various bundles can be deployed.&lt;br /&gt;Amongst the list of supported features, Apache ServiceMix Kernel supports:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;hot deployment of OSGi bundles, exploded bundles or custom artifacts (spring xml configuration files support is provided)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;services configuration stored as property files are monitored and provided as standard OSGi configurations&lt;br /&gt;&lt;/li&gt;&lt;li&gt;a centralized logging back end supported by Log4J, ServiceMix Kernel supports a number of different APIs (JDK 1.4, JCL, SLF4J, Avalon, Tomcat, OSGi)&lt;/li&gt;&lt;li&gt;provisioning of libraries or applications can be done using simple commands via simple xml descriptors&lt;br /&gt;&lt;/li&gt;&lt;li&gt;native OS integration as a service so that the lifecycle will be bound to your Operating System.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;an extensible shell console to manage services, applications and libraries&lt;/li&gt;&lt;li&gt;operations on the console can be done remotely via a secured and encrypted channel&lt;br /&gt;&lt;/li&gt;&lt;li&gt;a security framework based on JAAS&lt;/li&gt;&lt;li&gt;new instances can be created using a single command line&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;This release, with the detailed release notes, is available at:&lt;br /&gt;&lt;a href="http://servicemix.apache.org/kernel/servicemix-kernel-100.html"&gt; http://servicemix.apache.org/kernel/servicemix-kernel-100.html&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-8806970899934405313?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/8806970899934405313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=8806970899934405313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8806970899934405313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8806970899934405313'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/09/apache-servicemix-kernel-100-released.html' title='Apache ServiceMix Kernel 1.0.0 released!'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-8085002815026622998</id><published>2008-09-18T14:15:00.005+02:00</published><updated>2008-09-18T14:26:00.815+02:00</updated><title type='text'>IONA FUSE Open Source Group now offically part of Progress</title><content type='html'>I'll just quote &lt;a href="http://rajdavies.blogspot.com"&gt;Rob&lt;/a&gt;'s &lt;a href="http://rajdavies.blogspot.com/2008/09/iona-fuse-open-source-group-now.html"&gt;blog entry&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Progress completed its acquisition of IONA Technologies last Friday. The FUSE open source group will be running as its own business unit as part of the Progress Software Corporation - so we are still operating as before - but with considerably more investment.&lt;br /&gt;&lt;br /&gt;Progress saw the number and quality of enterprise customers we have using our integration products, saw that we consistently met and exceeded our sales targets and realized our potential to grow significantly.&lt;br /&gt;&lt;br /&gt;So although we currently employee a lot of open source developers - we will be recruiting even more - and have some exciting new software projects in development for release in 2009 :) &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-8085002815026622998?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/8085002815026622998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=8085002815026622998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8085002815026622998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8085002815026622998'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/09/iona-fuse-open-source-group-now.html' title='IONA FUSE Open Source Group now offically part of Progress'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-9197673459449126024</id><published>2008-09-09T10:17:00.002+02:00</published><updated>2008-09-09T10:34:39.688+02:00</updated><title type='text'>Bundling third party dependencies in ServiceMix 4</title><content type='html'>I'd like to talk a bit about third party dependencies in ServiceMix 4.&lt;br /&gt;&lt;br /&gt;ServiceMix 4 is based on OSGi and when deploying applications to it, you have two choices:&lt;ul&gt;&lt;li&gt;use the JBI packaging&lt;/li&gt;&lt;li&gt;use the OSGi packaging&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The first solution is a good thing if you want to abide by the JBI specification completely or if you want to use non OSGi aware components.  However, you'll come into the known limitations of the JBI packaging with respect to classloaders: the JBI specification is quite limited in this area.&lt;br /&gt;The second solution is more powerful as, in addition to being able to leverage the OSGi classloader mechanisms, you'll also be able to access the OSGi registry, thus registering or retrieving services in the registry.&lt;br /&gt;&lt;br /&gt;However, when using the OSGi packaging, you need to deal with third party dependencies.  OSGi is becoming more and more popular, so more and more projects are now distributing the jars as native OSGi bundles.  But not all have converted to OSGi yet.  And of course, you also need to transform your own jars into OSGi bundles.&lt;br /&gt;&lt;br /&gt;&lt;a title="Costin Leau" href="http://blog.springsource.com/main/author/costinl/" id="czp1"&gt;Costin Leau&lt;/a&gt; has covered most of the aspects of creating OSGi bundles in his &lt;a title="Creating OSGi bundles" href="http://blog.springsource.com/main/2008/02/18/creating-osgi-bundles/" id="atn4"&gt;blog post&lt;/a&gt;.  But there are a few tweaks that I want to talk about.&lt;br /&gt;&lt;br /&gt;When repackaging a library as an OSGi bundle, one as to take care about package imports.  I had a question recently about a problem when repackaging &lt;a title="c3p0" href="http://sourceforge.net/projects/c3p0" id="gkfi"&gt;c3p0&lt;/a&gt;.  This library is a JDBC connection pool, so it needs the class for the JDBC driver to be available in its classpath.  A simplistic way to handle the problem is to force an optional import of the package containing the driver you use.  This would be something like:&lt;br /&gt;&lt;pre&gt;   Import-Package: *, com.mysql.jdbc;resolution:=optional&lt;/pre&gt;&lt;br /&gt;The drawback is that you tie your mysql bundle to the driver you use, which will break things if you want to switch to another database.&lt;br /&gt;OSGi has a solution for such things which is called Dynamic Imports.  This is needed when a library uses the Class.forName() method to load classes dynamically, such as the c3p0 library. The big difference between static imports and dynamic imports is that dynamic imports are resolved ... dynamically.  This means that when the Class.forName() method is called, the OSGi framework will look for the requested package and wire it to your bundle at runtime.  The OSGi headers would look like:&lt;br /&gt;&lt;pre&gt;   Import-Package: *&lt;br /&gt;   DynamicImport-Package: *&lt;/pre&gt;&lt;br /&gt;But this feature must be use with caution, and only when possible to avoid having unwanted wiring between bundles.&lt;br /&gt;&lt;br /&gt;A second use case if the legal problems encountered while dealing with proprietary software of non liberal open source licenses.  IANAL, so take the following with the appropriate caution and check with your legal department before doing anything.  Back to the point: proprietary software often forbid any modification to the jars.  In such a case, the only alternative is to &lt;b&gt;embed&lt;/b&gt; the jar in an OSGi bundle.  Basically, when you repackage a library into an OSGi bundle, you extract the content of the jar, add some OSGi headers to the manifest, and rebuild the jar.  There is an alternative though, which is to create a bundle and include the full jar inside it.  The &lt;a title="bnd tool" href="http://www.aqute.biz/Code/Bnd" id="dlrk"&gt;bnd tool&lt;/a&gt; and &lt;a title="felix bundle plugin" href="http://felix.apache.org/site/maven-bundle-plugin-bnd.html" id="tunp"&gt;felix bundle plugin&lt;/a&gt; for maven (which uses bnd) both support that and you end up with using the Bundle-Classpath header:&lt;br /&gt;&lt;pre&gt;   Import-Package: *&lt;br /&gt;   Bundle-Classpath: .,bin/mysql-connector-java-5.1.6.jar&lt;/pre&gt;&lt;br /&gt;The only drawback is that the bundle jar can not be used anymore in a non-OSGi environment.&lt;br /&gt;&lt;br /&gt;Before bundling a jar, check the existing bundle repositories (the &lt;a href="http://repo1.maven.org/maven2/org/apache/servicemix/bundles/"&gt;ServiceMix one&lt;/a&gt; or the &lt;a href="http://www.springsource.com/repository/"&gt;SpringSource one&lt;/a&gt;) for an existing bundle.  And if you write one for an open source library, feel free to submit a patch if you want ServiceMix to host it...&lt;br /&gt;&lt;br /&gt;Happy bundling!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-9197673459449126024?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/9197673459449126024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=9197673459449126024' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/9197673459449126024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/9197673459449126024'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/09/id-like-to-talk-bit-about-third-party.html' title='Bundling third party dependencies in ServiceMix 4'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-7965540153483868462</id><published>2008-09-09T00:46:00.002+02:00</published><updated>2008-09-09T01:01:13.716+02:00</updated><title type='text'>A fun physic game</title><content type='html'>I found &lt;a href="http://fantasticcontraption.com/"&gt;Fantastic Contraption&lt;/a&gt; a small, but very fun game to play.  &lt;a href="http://fantasticcontraption.com/?designId=1452284"&gt;Here&lt;/a&gt; is my solution to the last free level.  Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-7965540153483868462?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/7965540153483868462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=7965540153483868462' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7965540153483868462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7965540153483868462'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/09/fun-physic-game.html' title='A fun physic game'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-3971319241617997546</id><published>2008-09-08T17:41:00.001+02:00</published><updated>2008-09-08T17:43:51.508+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='servicemix'/><title type='text'>What's new in ServiceMix 4.x?</title><content type='html'>Rod Biresch has posted a nice blog post about &lt;a href="http://soatechlab.blogspot.com/2008/09/whats-new-in-servicemix-4x.html"&gt;what's new in ServiceMix 4.x&lt;/a&gt;.  Definitely worth a read!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-3971319241617997546?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/3971319241617997546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=3971319241617997546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/3971319241617997546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/3971319241617997546'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/09/whats-new-in-servicemix-4x.html' title='What&apos;s new in ServiceMix 4.x?'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-1949371031952532451</id><published>2008-07-29T10:40:00.003+02:00</published><updated>2008-08-25T10:43:17.303+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBI'/><category scheme='http://www.blogger.com/atom/ns#' term='servicemix'/><title type='text'>Is JBI so bad?</title><content type='html'>Ross Mason, the CTO of MuleSource, recently started a &lt;a title="The Road to JBI" href="http://www.theserverside.com/tt/articles/article.tss?l=TheRoadtoJBI" id="nh9e"&gt;discussion&lt;/a&gt; about JBI.&lt;br id="bjxb"&gt;&lt;br id="bjxb0"&gt;His first point is that JBI is no TCP/IP, meaning somehow that JBI is targeted at vendors and not at developers.  Well, I'm not sure about the TCP/IP thingy, but he's a bit right about JBI being targeted at vendors and not developers.  Why? If you have some knowledge about JBI, you know that there are multiple JBI components (bindings that handle a particular protocol such as HTML, JMS, etc... and engines that provides business logic such as a rules engine, a BPEL engine and so on).   The developer will mostly see those components, not the JBI APIs: if you work with a BPEL engine and write a process, you won't see the JBI APIs surface in the BPEL at all.  If you write a WSDL to define a SOAP/HTTP service, you won't really see JBI there either.  So, yes, at some point, he is right that JBI 1.0 hasn't focused on the developer, or I should say, the user.   Because if you need a custom component for your JBI container, you, as a developer, will need to dive into JBI and fully understand it.  At this point, if you don't use JBI, you'd have to dive into a proprietary set of APIs to write your component.  JBI aims to be mostly hidden for the users.&lt;br id="szh0"&gt;&lt;br id="szh00"&gt;His second point is about some of the restrictions in JBI 1.0, mainly the use of XML, WSDL and no support for streaming.  About XML, JBI has ways to convey binary data in non XML formats using attachments (don't you use attachments in your emails?).  About WSDL, this point seems a bit weird since MuleSource has a product named &lt;a title="Galaxy" href="http://mulesource.com/products/galaxy.php" id="xvja"&gt;Galaxy&lt;/a&gt; which is a registry of services described by WSDLs.  Everyone knows WSDL is the standard for describing services.  Anyway, the JBI specification says each endpoint has to be described by a WSDL, however, since the early days of ServiceMix, WSDL has not been a requirement and you can deploy your endpoints without any WSDL at all.  With respect to data streaming, I'm not sure to understand the supposed flaw of JBI here: in the JBI world, a message contains an XML payload (which can be a stream, a DOM document or any kind of XML representation) and a set of attachments (which can also be streams).  Just leveraging these APIs, JBI components are able to transfer very large amount of data using streams only.&lt;br id="osip"&gt;&lt;br id="osip0"&gt;His third point is about component reuse in JBI.  We have users using ServiceMix components inside OpenESB and others using OpenESB components inside ServiceMix.  It's true that most of the JBI vendors offer their own set of components.  Let me ask the question: doesn't Mule come with its own set of transports? It would not make sense at all to distribute an ESB without any support for the most commonly used transports.  It does not mean that these components can not work together.&lt;br id="ljsm"&gt;            &lt;br id="vl0m"&gt;Last comes some points about the existing standards.  Since a long time, I don't think SCA should be viewed as a competitor to JBI.  For some reasons exposed above, JBI does not really target the end users, while SCA does.   However, SCA does not allow components to interoperate together.  Hence, those two standards are complementary, not competitors. &lt;br id="nih4"&gt;&lt;br id="nih40"&gt;All in all, I think JBI is a good specification.  It does not address all the possible use cases in the best way (I'm thinking about handling non XML data) and sometimes goes beyong what should have been required (on the packaging and deployment side), but the core messaging APIs are well defined, and given the success of ServiceMix, I'm far from thinking that JBI should be dismissed.&lt;br id="ou.5"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-1949371031952532451?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/1949371031952532451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=1949371031952532451' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/1949371031952532451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/1949371031952532451'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/07/ross-mason-cto-of-mulesource-recently.html' title='Is JBI so bad?'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-6691314063171538745</id><published>2008-05-26T11:39:00.005+02:00</published><updated>2008-08-25T10:42:00.063+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java ee'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='servicemix'/><title type='text'>Java EE specs in OSGi</title><content type='html'>For ServiceMix 4, I've been working on making sure the Java EE specifications can be used in OSGi.  The first step was to release OSGi versions of the various specifications by just adding the needed manifest entries to make them usable in OSGi.  This was done inside the Geronimo project (on which I am a committer).  This means that since a few months, most of the Java EE specification jars are available as OSGi bundles (you can grab those from &lt;a href="http://repo1.maven.org/maven2/org/apache/geronimo/specs/"&gt;maven 2 public repositories&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;However, this is not always sufficient.  Some of these specifications (mostly JAXB, SAAJ, JAX-WS and Stax) do not work well in OSGi.  The mean reason is that the implementation is discovered using different mechanisms by the API.  The most commonly used one is to find a file on the classpath in the &lt;code&gt;META-INF/services&lt;/code&gt; directory and find the main entry point class of the implementation. Unfortunately, to make this work in OSGi, the client bundle (the one using one of these APIs) has to have the required file in its classpath, which means the inability to use one provided by the runtime in which the bundle is deployed and that it can not be switched without changing and re-compiling the bundle.  Another way would be to add a Require-Bundle OSGi manifest so that the classpath of the implementation becomes part of the client bundle, but this also ties the client bundle to the implementation used.  &lt;br /&gt;&lt;br /&gt;The solution came to me after a chat with &lt;a href="http://www.dankulp.com/blog/"&gt;Dan Kulp&lt;/a&gt;: an OSGi specific discovery mechanism can be easily plugged into these spec jars.  It consists in two small classes shared amongst these spec jars: an OSGi bundle &lt;a href="http://svn.apache.org/repos/asf/servicemix/smx4/specs/trunk/locator/src/main/java/org/apache/servicemix/specs/locator/Activator.java"&gt;activator &lt;/a&gt; and another &lt;a href="http://svn.apache.org/repos/asf/servicemix/smx4/specs/trunk/locator/src/main/java/org/apache/servicemix/specs/locator/OsgiLocator.java"&gt;class&lt;/a&gt;  not tied to the OSGi api that maintain a list of available implementations.  The final step if to rewrite the factory of those jars to look inside this map before performing the usual lookup.  &lt;br /&gt;&lt;br /&gt;This means that in a non OSGi environment, the jar behaves as usual, but when deployed into an OSGi runtime such as &lt;a href="http://servicemix.apache.org/kernel/"&gt;ServiceMix Kernel&lt;/a&gt;, the spec bundle will be able to locate dynamically the implementation to use.  Therefore, the client bundle using the spec jar is now free of any requirements.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-6691314063171538745?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/6691314063171538745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=6691314063171538745' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/6691314063171538745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/6691314063171538745'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/05/jee-specs-in-osgi.html' title='Java EE specs in OSGi'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-2108355162695700000</id><published>2008-05-21T21:08:00.004+02:00</published><updated>2008-08-25T10:44:21.808+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='jaas'/><category scheme='http://www.blogger.com/atom/ns#' term='servicemix'/><title type='text'>JAAS in OSGi</title><content type='html'>I've working on implementing the security framework for ServiceMix 4.  ServiceMix 3 used JAAS for the authentication part, and it also makes sense to use it in ServiceMix 4 for several reasons: reuse of existing login modules, integration with the JMX and the console security which are already based on JAAS. &lt;br /&gt;However JAAS is not very OSGi friendly (well, most of the JEE specifications are not, and I'll talk about the others in another post), mostly because is makes some strong assumptions upon the thread context classloader, and this, mainly on the client code.  This means the client that uses the JAAS api to authenticate has to have all the login modules available in its thread context classloader.  This is usually not the case in OSGi.&lt;br /&gt;So the solution is to use a proxy login module that will be available to all bundles (by using the boot framework delegation package).  This proxy login module can use some OSGi properties on the login module configuration to determine the actual class to use and the bundle to load it from.&lt;br /&gt;Using a simple XML schema for Spring, you can deploy a JAAS realm very easily:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;jaas:config id="realm" xmlns:jaas="http://servicemix.apache.org/jaas"&gt;&lt;br /&gt;    &amp;lt;jaas:module className="org.apache.servicemix.kernel.jaas.config.SimpleLoginModule" flags="required"&gt;&lt;br /&gt;        key=value&lt;br /&gt;    &amp;lt;/jaas:module&gt;&lt;br /&gt;&amp;lt;/jaas:config&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This will register a service in OSGi that the OSGi specific Configuration for JAAS will discover and make it available for clients.&lt;br /&gt;&lt;br /&gt;Find more informations on the ServiceMix Kernel &lt;a href="http://cwiki.apache.org/SMX4KNL/45-security-framework.html"&gt;JAAS doc&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-2108355162695700000?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/2108355162695700000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=2108355162695700000' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2108355162695700000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2108355162695700000'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/05/jaas-in-osgi.html' title='JAAS in OSGi'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-2151545779396340082</id><published>2008-05-15T17:02:00.003+02:00</published><updated>2008-08-25T10:42:20.327+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='servicemix'/><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;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-2151545779396340082?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/2151545779396340082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=2151545779396340082' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2151545779396340082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2151545779396340082'/><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'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-2476208687048658215</id><published>2008-05-13T21:53:00.004+02:00</published><updated>2008-08-25T10:42:38.318+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='servicemix'/><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;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-2476208687048658215?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/2476208687048658215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=2476208687048658215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2476208687048658215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2476208687048658215'/><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'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></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).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-1476773987122858653?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/1476773987122858653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=1476773987122858653' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/1476773987122858653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/1476773987122858653'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/04/spring-app-server.html' title='Spring App Server'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>4</thr:total></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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-9156304376974485238?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/9156304376974485238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=9156304376974485238' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/9156304376974485238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/9156304376974485238'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/04/ziphone.html' title='Ziphone'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-8629976890039625534?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/8629976890039625534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=8629976890039625534' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8629976890039625534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8629976890039625534'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/04/apachecon-eu-2008.html' title='ApacheCon EU 2008'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-1949136737333158261</id><published>2008-04-04T15:50:00.002+02:00</published><updated>2008-08-25T10:43:04.471+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBI'/><category scheme='http://www.blogger.com/atom/ns#' term='sca'/><category scheme='http://www.blogger.com/atom/ns#' term='servicemix'/><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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-1949136737333158261?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/1949136737333158261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=1949136737333158261' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/1949136737333158261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/1949136737333158261'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2008/04/jbi-and-sca-again.html' title='JBI and SCA (again)'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></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;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-1735188165759609495?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/1735188165759609495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=1735188165759609495' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/1735188165759609495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/1735188165759609495'/><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'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>2</thr:total></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;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-1389691950594188021?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/1389691950594188021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=1389691950594188021' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/1389691950594188021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/1389691950594188021'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/09/apache-servicemix-312.html' title='Apache ServiceMix 3.1.2'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>2</thr:total></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).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-8371237444025460171?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/8371237444025460171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=8371237444025460171' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8371237444025460171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8371237444025460171'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/09/servicemix-has-graduated.html' title='ServiceMix has graduated'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>7</thr:total></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...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-2962639653571417555?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/2962639653571417555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=2962639653571417555' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2962639653571417555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2962639653571417555'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/08/fuse-esb.html' title='FUSE ESB'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>8</thr:total></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;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-6827755281339955299?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/6827755281339955299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=6827755281339955299' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/6827755281339955299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/6827755281339955299'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/08/switching-to-mac.html' title='Switching to Mac'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>2</thr:total></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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-7326448082056956244?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/7326448082056956244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=7326448082056956244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7326448082056956244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7326448082056956244'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/07/servicemix-311-released.html' title='ServiceMix 3.1.1 released'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-7896999562600317297</id><published>2007-06-28T14:00:00.001+02:00</published><updated>2008-08-25T10:43:40.271+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='servicemix'/><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 !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-7896999562600317297?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/7896999562600317297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=7896999562600317297' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7896999562600317297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7896999562600317297'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/06/accessing-databases-in-servicemix.html' title='Accessing databases in servicemix-drools'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30094322.post-6780567621258796017</id><published>2007-06-22T08:54:00.001+02:00</published><updated>2008-08-25T10:43:57.546+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBI'/><category scheme='http://www.blogger.com/atom/ns#' term='servicemix'/><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;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-6780567621258796017?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/6780567621258796017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=6780567621258796017' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/6780567621258796017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/6780567621258796017'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/06/loose-coupling-in-jbi.html' title='Loose coupling in JBI'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>1</thr:total></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://3.bp.blogspot.com/_HOWFwBzQCJY/RmFm2GXrV5I/AAAAAAAAAI8/3PkPmxjMZm4/s1600-h/IMG_4080.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_" alt="" src="http://3.bp.blogspot.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;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-8522862676873545688?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/8522862676873545688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=8522862676873545688' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8522862676873545688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8522862676873545688'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/06/father-for-fifth-time.html' title='Father for the fifth time'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_HOWFwBzQCJY/RmFm2GXrV5I/AAAAAAAAAI8/3PkPmxjMZm4/s72-c/IMG_4080.jpg' height='72' width='72'/><thr:total>6</thr:total></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 !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-7130607122680810128?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/7130607122680810128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=7130607122680810128' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7130607122680810128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7130607122680810128'/><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'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>6</thr:total></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 ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-529337360701716289?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/529337360701716289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=529337360701716289' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/529337360701716289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/529337360701716289'/><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'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>3</thr:total></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 ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-8649239194709393228?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/8649239194709393228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=8649239194709393228' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8649239194709393228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/8649239194709393228'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/03/servicemix-dependencies.html' title='ServiceMix dependencies'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-2014404634864915511?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/2014404634864915511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=2014404634864915511' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2014404634864915511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/2014404634864915511'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/02/servicemix-31-released.html' title='ServiceMix 3.1 released'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></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 ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-7794283936456463728?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/7794283936456463728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=7794283936456463728' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7794283936456463728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/7794283936456463728'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/01/jms-soap-binding.html' title='JMS Soap Binding'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-3943950254789485782?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/3943950254789485782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=3943950254789485782' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/3943950254789485782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/3943950254789485782'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2007/01/jencks-20.html' title='Jencks 2.0'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>2</thr:total></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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-4443885744640258713?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/4443885744640258713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=4443885744640258713' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/4443885744640258713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/4443885744640258713'/><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'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>4</thr:total></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 ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30094322-116596025860041227?l=gnodet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gnodet.blogspot.com/feeds/116596025860041227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30094322&amp;postID=116596025860041227' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/116596025860041227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30094322/posts/default/116596025860041227'/><link rel='alternate' type='text/html' href='http://gnodet.blogspot.com/2006/12/gwt.html' title='GWT'/><author><name>Guillaume Nodet</name><uri>http://www.blogger.com/profile/16560449735432714687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://people.apache.org/~gnodet/me.jpg'/></author><thr:total>0</thr:total></entry></feed>
