A Look Inside FUSE ESB 4: An OSGi-Based Integration Platform
Listing 9 The InsuranceRouter implementation which talks with the file poller and sender.
package com.fusesource.camel;
import org.apache.camel.builder.RouteBuilder;
public class InsuranceRouter extends RouteBuilder {
public void configure() throws Exception {
from("jbi:service:http://fusesource.com/examples/jbicamel/insuranceCamelRouter")
.to("log:showAll?level=info")
.to("jbi:service:http://fusesource.com/examples/jbicamel/insuranceFileService");
}
}
In the from method we can define a JBI service address, which enables JBI components, such as the file poller in this example, to send messages to this InsuranceRouter. Notice that you need to define the fully qualified service name, including the namespace and the service name. In this example, we log the incoming message and sent it to the insuranceFileService JBI service. This is, of course, the file sender we defined in listing 8.
To get this example running, we first need to install several components on the container using the features install command. Execute the following commands to install the necessary components:
features install jbi
features install servicemix-shared
features install servicemix-file
features install servicemix-camel
Now we can build the OSGi bundle. The jbi-camel-test project structure is similar to figure 4, so we can build the OSGi bundle using Maven with the mvn clean install command. In the target directory of the project the jbi-camel-test-1.0.jar is then created, so this file can be copied to the deploy directory of the FUSE ESB 4. Now you can trigger the example by copying the insurance-request.xml message to the insuranceIn directory created in the root of the FUSE ESB installation. This file is moved to the insuranceOut directory and the message content is logged to the FUSE ESB container. You can look at this log file with the log display command in the console.
Conclusion
In this article we’ve shown the new architecture of FUSE ESB 4 and the new capabilities this brings for developers. The new FUSE ESB console provides a nice management tool to interact with the container. And the provisioning component provides a really flexible way to install and remove components from the container, so you can create the ESB you need in your environment. The integration with Maven is really helpful to developers.
We looked at two main deployment models with the Spring XML configuration file and OSGi bundle in several examples. In the examples we showed that the role of Camel is pretty dominant in FUSE ESB 4 and this makes implementing routing logic very easy. You can choose if you want to define this logic with XML configuration or the Java DSL.
And of course we can still use JBI within FUSE ESB 4, so we can reuse the JBI components that are already available in FUSE ESB 3. You can choose to use OSGi bundles with a single configuration file or a service assembly consisting of several service units.
I hope you enjoyed this introduction into FUSE ESB 4 and working with the given examples. I really think the new OSGi bundle deployment model and the ease to configure Camel routes and CXF services is a step forward. FUSE ESB 4 is ready to be used and should ease your life as an integration developer. Keep integrating!
Additional resources
1. Fuse ESB – http://fusesource.com/products/enterprise-servicemix4/
2. ServiceMix 4 – http://servicemix.apache.org/SMX4/index.html
3. Fuse website – http://www.fusesource.com
3. Enterprise Integration Patterns – http://www.enterpriseintegrationpatterns.com
4. Apache Camel – http://activemq.apache.org/camel
5. Download article source code – http://www.esbinaction.com/files/osgi_article.zip
Tijs Rademakers
Tijs is a software architect working for Atos Origin and specializing in enterprise integration. Tijs is the co-author of the Manning book “Open Source ESBs in Action” (http://www.manning.com/rademakers). He speaks frequently at Java conferences about open source enterprise integration projects like ServiceMix, Mule, Apache Synapse and Apache Tuscany.
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)





Comments
Claus Ibsen replied on Wed, 2009/03/11 - 12:57am
Maybe the description for the Camel SEDA and VM components, could be changed to:
- asynchronous call to another endpoint in the same Camel Context
- asynchronous call to another endpoint in the same JVM The List component is renamed to Browse in Camel 2.0 as a better name what it does, eg being able to browse Messages that have passed it.
--
Claus Ibsen
Apache Camel Committer
Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Claus Ibsen replied on Wed, 2009/03/11 - 1:03am
Claus Ibsen replied on Wed, 2009/03/11 - 1:06am
AMQ web console:
http://activemq.apache.org/web-console.html
Tijs Rademakers replied on Wed, 2009/03/11 - 2:24am
Tang Yong replied on Sat, 2009/03/14 - 9:21am
The same greate and wonderful article as "Open-Source ESB In Action"!
I wish that you can contribute more excellent article about enterprise integration.
Especially about the key technoledge points of open source integration(such as spring with mule,spring with servicemix,...).
--- Mike Tang
Sun Glassfish FishCat Contributor
Open Source Integration Fans
Blog: http://mikertang.blogspot.com/
Tijs Rademakers replied on Sat, 2009/03/14 - 11:51am
in response to:
Tang Yong
Robert Williams replied on Wed, 2009/03/18 - 7:42am
Could not download the article source code at the URL listed.
Could you please make the article source code available
BTW Nice article!
Erwin Teseling replied on Wed, 2009/03/18 - 8:12am
in response to:
Robert Williams
Tijs Rademakers replied on Wed, 2009/03/18 - 2:52pm
in response to:
Erwin Teseling
Erwin Teseling replied on Wed, 2009/03/18 - 5:39pm
in response to:
Tijs Rademakers
Ali Yang replied on Wed, 2010/07/14 - 10:59am
Mohit Dklkjhsds replied on Mon, 2010/08/16 - 10:20am
Larry Xu replied on Mon, 2010/11/15 - 3:27am
Dead Devil replied on Tue, 2011/03/15 - 4:17pm
Carla Brian replied on Sat, 2012/06/30 - 11:12am