Red Hat
Jan 4, 2016
by Christina Lin
If your have ever played with JBoss Fuse Service Work, then you will probably know this already. So what exactly is switchyard?

SwitchYard is a structured framework for developing integration applications using the design principles and best practices of Service Oriented Architecture.

It supports the SCA, SCA stands for Service Component Architecture, it is basically specifications that describe a model for building applications and systems using a Service-Oriented Architecture. By applying the standards way of describing SOA's available components and services in integration solution, we will then have this abstract layer of services, that is not specifically belong to single language, or implementation. By implementing this standard, we will have a complete, well define SOA architecture.

In previous version of JBoss Fuse and JBoss Fuse Service Work, one of the dividing factor between them is the containers they are running. JBoss FSW runs in JBoss EAP which is the JavaEE container. And JBoss Fuse runs on Karaf, the OSGi standard container. But now that the Fuse can run on both JavaEE and OSGi, what about Switchyard? I can very happy to tell you, YEP! it's OSGi ready now.

Let's take a look at Switchyard features that is available in JBoss Fuse server.

These ones are the basic switchyard feature, and the libraries you will need. 


These ones are the feature libraries of the components in Switchyard


Then the rest of the features are quickstarts and demos for you to play with.
By adding the required library into container or add them to your application profile, it will enable the Switchyard running on Karaf.

Let's take one of the quick start demo, and see how to deploy it in Karaf or Fabric environment in JBoss Fuse.

Karaf - Standalone OSGi container

Karaf will be a simple and standalone OSGi container, it has fewer steps, basically, all we have to do is installed the feature and then it's ready to go.

The repository url should have already set in JBoss Fuse, all we have to do is to install the demo feature.

  • features:install switchyard-quickstart-camel-cxf

This will download and install the feature and we can start play with it.

Fuse Fabric - Set of Standalone Managed OSGi container

But, with Fuse Fabric, because we have another layer of control, the profile, therefore we will need , first create a profile,  (Make sure you have created your Fuse Fabric beforehand.)

  • profile-create demo-myswitchyard

Create a small container for this small service

  • container-create-child root mydemo

then we add the features we need in the profile, deploy the profile to a empty container, and then we are done!

  • profile-edit --features switchyard-quickstart-camel-cxf-binding demo-myswitchyard

Give the container a few good minutes to down and install the bundles in the container, type

  • container-list 

see if every container shows success in their status.
JBossFuse:karaf@root> container-list 
[id]      [version]  [type]  [connected]  [profiles]      [provision status]
root*     1.0        karaf   yes          fabric                  success          
  mydemo  1.0        karaf   yes          default                 success       

If this is what you see, then congratulations!!
This CXF binding demo is a very interesting example, basically it shows usage of SOAP with Camel Cxf component. The SwitchYard service binds to a Cxf URL and we can call the service via the URL of the CXF component.

This demo is an order service, the order is send by client through web service, the data is then send to Camel, which is going to route the message to it's destination, that is the warehouse service, checking the inventory.

The switchyard.xml show the architecture of the demo. The composite, which is the large blue rectangular shape base. It defines the boundary of your application, anything that is inside the rectangle is your application, and anything outside are external resources. We see there are two endpoint expose which let's outer resource to call. And an endpoint that calls the external resources.

In the middle you can see there are two Camel components, which passes the message we got from client, then process it within camel route then pass it out to next step in Switchyard, so how do we integrate Camel with switchyard? Simple, let's look at the Camel route here:

Notice some of the components started with switchyard? That's right, by creating a switchyard endpoint, it will be available to receive or produce data to your switchyard application. And to start the demo, simple run

  • mvn exec:java -Pkaraf -Dexec.args="Boeing 10"

Which will start the ClientProcessor in the project, and send a SOAP message ordering Boeing with amount of 10. Login in the to the console http://localhost:8181/hawtio with your ID/PWD.

Click on the container we have just create.
 It will take you to the container view,  here you will be able to see what is happening.
What I love about this version of JBoss Fuse, is now you get to see all the route at once,

Alright, that's all for this post. More about Switchyard in next one. 
Original Post