Monday, December 30, 2013

Apache Camel Developer's Cookbook


I wanted to announce a new book coming out on Camel from Scott Cranton and Jakub Korab.  The book contains production ready examples.  Find out more information at http://www.jakubkorab.net/2013/12/apache-camel-developers-cookbook.html#!.  You can also order the book from http://www.packtpub.com/apache-camel-developers-cookbook/book.

The chapters of the book cover:
  • Structuring routes – everything from how to integrate the framework through to route templating
  • Message routing – a coverage of the main routing patterns
  • Routing to your code – how Camel interacts with your Java Code (bean binding, processors etc.)
  • Transformation – moving between XML, JSON, CSVs etc.
  • Splitting and Aggregating – a deep dive into the related Splitter and Aggregator EIPs
  • Parallel Processing – outlines Camel’s support for scaling out processing
  • Error Handling and Compensation – dealing with failure, including capabilities for triggering compensating logic
  • Transactions and Idempotency – how to handle failure of transactional (JDBC, JMS) and non-transactional (web services) resources
  • Testing – how to verify your routes’ behavior without the need for backend systems
  • Monitoring and Debugging – describes Camel’s support for logging, tracing, and debugging
  • Security – encrypting communication between systems, hiding sensitive configuration information, non-repudiation using certificates, and applying authentication and authorization to your routes
  • Web Services – a deep dive into working with one of Camel’s main use cases: SOAP web services
Some of the juicier recipes include:
  • Working with asynchronous APIs
  • Defining completion actions dynamically
  • Testing routes with fixed endpoints using conditional events
  • Digitally signing and verifying messages
  • Enabling step-by-step tracing in code
  • Monitoring other systems using the Camel JMX Component
  • Idempotency inside transactions
  • Setting up XA transactions over multiple transactional resources (many thanks to the guys at Atomikos for their help on this one)

Friday, December 27, 2013

The year in review

I have thoroughly enjoyed this past year in the Red Hat JBoss Middleware Business Unit.   I have worked with wonderful people and great products.  I continue to be amazed at the quality of software and the knowledge of the people that work in the community as well as Red Hat.  I know this coming year will be even better!

I wanted to highlight some accomplishments from 2013:

Red Hat JBoss Developer Program
The developer program allows developers to download Red Hat Enterprise Products to try in development without paying subscriptions.  Each middleware product is located on the jboss.org product page at http://www.jboss.org/products.  A green download now button allows downloading of the latest version of each product.  The information button allows more information on an individual product including blogs, videos and articles.   Of course installing in a production environment requires a subscription.

Red Hat JBoss Fuse and A-MQ
Red Hat acquired Fusesource in 2012.  This year, Red Hat JBoss Fuse and A-MQ 6.0 GA was released.  Also Fuse and A-MQ 6.1 Alpha was released.  Fuse is a small footprint, flexible, open source ESB and A-MQ is a small footprint, high performance, open source messaging platform.  Fuse is based on the community projects Apache CXF, Apache Camel, Apache Karaf and Apache ActiveMQ.  A-MQ is based on the community projects Apache ActiveMQ and Apache Karaf.   Both are available from the product pages:
Fuse - http://www.jboss.org/products/fuse.html
A-MQ - https://www.jboss.org/products/amq.html

Red Hat JBoss Data Virtualization
Red Hat JBoss Data Services Platform was changed to Red Hat JBoss Data Virtualization and v6 Beta was released.  Data Virtualization is based on the community projects Teiid, Teiid Designer and Modeshape.  JBoss Data Virtualization is complete data provisioning, federation, integration and management solution that access and transforms data from one or more heterogeneous sources into logical, business-friendly data models and easily consumed through standard mechanisms.  See more detailed information at https://www.jboss.org/products/datavirt.html.

Red Hat JBoss Fuse Service Works
Red HatHat JBoss Fuse Service Works is the new comprehensive SOA Solution for application integration, messaging, SOA, and service governance requirements.  v6 Beta was released and is based on the community projects Overlord, Switchyard, Apache CXF, Apache Camel and Apache ActiveMQ.   See more detailed information at https://www.jboss.org/products/fsw.html.



Tuesday, December 17, 2013

Simplify your integrations with Apache Camel

In a simpler IT environment, integration would be easy. But when business information is spread across disparate enterprise systems, that’s not the case.  To build up any non-trivial business processing, you may have to connect systems that are exposed by web-services, fire off events over message queues, notify users via email or social networking, and much more.

Apache Camel is a lightweight integration framework that helps you connect systems in a consistent and reliable way. Focus on the business reasons behind what's being integrated, not the underlying details of how.

Join Christian Posta, Red Hat Principal Consultant, for a webinar to learn how to simplify integration with Apache Camel which is part of Red Hat Fuse.  He will run through a presentation as well as a demonstration.

The Registration link is located at https://vts.inxpo.com/scripts/Server.nxp?LASCmd=AI:4;F:QS!10100&ShowKey=17683&Referrer=https%3A%2F%2Fmojo.redhat.com%2Fdocs%2FDOC-926067=em2&elq=6a652da896c04a31902271a837b7ce51

You can also view Christian's blog at http://www.christianposta.com/blog/?p=351 and the presentation on slideshare at http://www.slideshare.net/opensourcementor/inxpo-integrationenterprisecamel

Monday, November 18, 2013

Sneak Peek at what is coming with Fuse 6.1

Red Hat JBoss Fuse 6.1 has alot of new features and components.  James Strachan, who works on several Open Source Projects, has written a blog covering some new features of JBoss 6.1, mostly the new version of the Fuse Managament Console.  The FMC is now implemented by the Hawtio Open Source Project.   Also he highlights how you can work with all the configuration in git so all changes are audited and can easily combine Fuse 6.1 with any git Continuous Integration or Continuous Deployment tooling for all your provisioning & configuration data.

http://macstrac.blogspot.co.uk/2013/10/a-sneak-peek-at-whats-coming-in-jboss.html


Producing and Consuming OData with Data Virtualization

The OData Protocol is an increasingly powerful RESTful interface for data access.  It is in the process of becoming an OASIS Specification.  
 
Definition from the OData site: The Open Data Protocol (OData) is a Web protocol for querying and updating data that provides a way to unlock your data and free it from silos that exist in applications today.OData does this by applying and building upon Web technologies such as HTTP, Atom Publishing Protocol (AtomPub) and JSON to provide access to information from a variety of applications, services, and stores.

Ted Jones has an excellent article, link below, that provides an example of how to expose any datasource as an OData source and then consume the source using OData URLs.  His example is shown with Teiid and Teiid Designer which are the community projects for Data Virtualization.  Try out his sample code!

Thursday, November 14, 2013

Fuse Service Works Governance

With the Release of Fuse Service Works v6 Beta, SOA Governance is now included in the JBoss SOA Platform through the Overlord Project.  Three main components are in FSW Governance:

Design Time Governance - This component provides the capability to manage the lifecycle of systems from inception through deployment through subsequent change management. A flexible workflow driven approach is used to enable organizations to customize governance to fit the way they work.  A good article from Kurt Stam, Bleeding Edge Governance - Getting Started

Run Time Governance (was BAM) - This component provides the infrastructure to capture service activity information and then correlate, analyse and finally present the information in a form that can be used by a business to police Business/Service Level Agreements, and optimize their business.  A good video by Gary Brown,  Introducing RTGov 

S-RAMP - "The SOA Repository Artifact Model and Protocol (S-RAMP) TC defines a common data model for SOA repositories as well as an interaction protocol to facilitate the use of common tooling and sharing of data." This component provides a reference implementation for this standard.  A good video by Eric Wittmann,  
SRAMP-101: Everything you ever wanted to know about S-RAMP but were afraid to ask  

Tuesday, November 12, 2013

JBoss A-MQ 6.1 and JBoss Fuse 6.1 ALPHA Available!


Red Hat is now distributing Alpha releases of JBoss Fuse 6.1 - Red Hat's core ESB, and JBoss A-MQ 6.1 - Red Hat's message broker.  Feel free to download either product and take it for a drive.  

The new features in JBoss A-MQ 6.1 include:

* Full support of AMQP 1.0 – provides wire-level compatibility across connections 
* Improved high availability (HA) – embedded message store for shared-nothing HA 

 JBoss Fuse 6.1, which includes JBoss A-MQ 6.1, additionally offers: 

* A vast library of connectors – over 200 out-of-the-box-connector via Apache Camel 
* Managed integration routes - start, stop, measure and trace Camel routes 
 
Visit jboss.org and download JBoss A-MQ 6.1 or JBoss Fuse 6.1 and let us know what you think.


Monday, November 11, 2013

Your First Fuse Service Works Application

Introduction

This blog will show you how to create your first JBoss Fuse Service Works 6 Application.  The application will be a basic application that exposes a simple web service implemented in a Java Bean.  The service will accept a string and add "Hello" such as "Hello Kenny!" which is displayed in the console.  A transformer changes the response to "Hello World!".  We will use SOAPUI as the client to send the SOAP message to the service.

Preparation

Before we get started with the application, install JBoss Developer Studio 7 with the Integration Stack for JBDS 7 as well as the Fuse Service Works 6 Product.    You can find the instructions  for installation in addition to the downloads at http://www.jboss.org/products/fsw.html.  Also install SOAPUI which can be found at http://www.soapui.org/, either standalone or the eclipse plugin (http://www.soapui.org/eclipse/update).

Step Overview

The following describes the steps that we will follow to build and deploy our application:

1. Start JBoss Developer Studio
2. Create a new workspace
3. Create a new Switchyard Project
4. Create a Bean component and its contract
5. Add the Business Logic of the bean  and the details of the contract
6. Promote the Service and create the transformation
7. Create the SOAP binding
8. Deploy the Service
9. Test the Service

Step By Step

Step 1 : Start JBoss Developer Studio

I have different installs and version of JBDS so I start this particular instance from the command prompt.  The blog assumes you have the software installed as described in the Preparation section.  You can start JBDS from the command prompt, Program Menu Item or desktop launcher.


Step 2 : Create a new workspace

Create a new workspace, I used /home/kpeeples/workspaces/fsw-gettingstarted


Step 3 : Create a new Switchyard Project

Select the New Switchyard Project Wizard.

We will take the default on the first screen of switchyard-example.  Click the next button.  On the second screen, the switchyard project configuration, change the Runtime to "none" as we will deploy to the server after creation.  Select the Switchyard version of 1.0.0.Final.   Select the Bean Implementation and the SOAP Gateway binding.  Then click Finish to create the project.

The editor which consists of the canvas and palette will be opened.



  • The Canvas, shown in Blue, is our workspace where we will create and manipulate project elements.
  • The Palette, shown on the right side, contains the elements that can be added to the project.
Step 4 :  Create a Bean component and its contract

To create a new bean component, select the Bean implementation icon from the palette and drag to the canvas.  The Bean definition dialog will open.  Type HelloServiceBean in the Name field and then click on the interface link to create the corresponding contract/interface.  Enter HelloService for the interface.  Then click Finish for the interface and Finish for the bean.

Step 5 : Add the Business Logic of the bean  and the details of the contract

Add the following code to the bean and it's interface:

HelloService.java
package com.example.switchyard.switchyard_example;

public interface HelloService {
 String sayHello(String helloString);

}
HelloServiceBean.java
package com.example.switchyard.switchyard_example1;

import org.switchyard.component.bean.Service;

@Service(HelloService.class)
public class HelloServiceBean implements HelloService {

  @Override
    public String sayHello(String helloString) {
      System.out.println("Hello: " + helloString);
      return "Hello " + helloString + "!";
    }
}

Step  6 : Promote the Service and create the transformation

In this step we promote the service to make is visible by clicking on the promote service button or right click on the service's green icon and select promote service.  The service should be visable as a web service so we select WSDL as the interface type.  Then click interface to generate the WSDL based on the contract/interface that was defined earlier.
Click next to specify the WSDL options.  Uncheck the wrapped messages so transformations can access only what is inside the elements they receive.  Click finish which will show the interface  and service name.  Make sure to leave the create required transformations checked so we can define our transformer.

Click next.  Leave both transformer types checked and the type as a java transformer.  Type in the name as ExampleTransformer and click finish which will show our composite-service and our bean component.
Open the Transformer class and add the following code.
ExampleTransformer.java
package com.example.switchyard.switchyard_example;

import org.switchyard.annotations.Transformer;
import org.w3c.dom.Element;

public final class ExampleTransformer {

@Transformer(to = "{urn:com.example.switchyard:switchyard-example:1.0}string")
public String transformStringToString(String from) {
// TODO Auto-generated method stub
String to = "Hello World!";
return "<sayHelloResponse xmlns=\"urn:com.example.switchyard:switchyard-example:1.0\"><string>"
+ from + " TRANSFORMED TO " + to + "</string></sayHelloResponse>";
}

@Transformer(from = "{urn:com.example.switchyard:switchyard-example:1.0}string")
public String transformStringToString1(Element from) {
// TODO Auto-generated method stub
return new String(from.getTextContent());
}

}

Step 7 : Create the SOAP binding

Go to the canvas and click on the create binding button on the composite-service.  Select the SOAP binding from the menu.   Keep the defaults and click on Finish.

Step 8 :  Deploy the Service

Now we can deploy our service.  I already added the Fuse Service Works Server in the IDE and started the server.  Right click on the project and indicate to Run As/Run on Server.  Take the defaults to deploy to the server.  The Application should deploy as shown below.  The WSDL should be accessible at http://localhost:8080/HelloService/HelloService?wsdl

Step 9 : Test the Service

Create a new SOAPUI project with the WSDL.  Enter Kenny as the string for the request.  Submit the request.  On the console Hello: Kenny displays.  In the SOAP response Hello Kenny! TRANSFORMED TO Hello World!  because of the code in the transformer.  You have created your first simple Fuse Service Works Application.


Monday, November 4, 2013

Enhancing your JBoss Integration with JBoss BRMS in Practice

In the previous article in this series, we talked about extending and expanding your enterprise integration to account for an expanding architectural landscape that included diverse backend systems.

In this article we want to provide an example project, called the BRMS Fuse Integration Demo, that demonstrates how to achieve some of the discussed use cases, specifically how to integrate your service bus with a business process engine.

Introduction

The main focus of this article will be an actual integration project that provides you with an architectural blueprint for calling out to your Red Hat JBoss Business Rules Management System (BRMS) engine from your Red Hat JBoss Fuse service bus messaging routes. The use cases that were discussed in the previous article were as follows:

Use cases

  • call JBoss Fuse (Camel) services from a business process (BPM)
  • call JBoss BRMS to apply rules from JBoss Fuse (Camel) route, such as content based routing rules
  • call a business process from a JBoss Fuse (Camel) route
The project we provide covers the last use case, where we want to trigger a business process from one of our JBoss Fuse (Camel) routes. Our project provides the following aspects to provide you with a quick way to get started and an architectural blueprint.

Example project

  • Automated installation of JBoss Fuse
  • Automated installation of JBoss BRMS
  • Example BPM project deployed to JBoss BRMS
    • Process is a three step process (Start → “Hello World” → End) that logs a message on execution
  • Example (Camel) route deployed to JBoss Fuse
    • Fuse (Camel) route that is triggered by messages from a specific data directory
    • Logging of message from route
    • SOAP Web service call from route to collect external information
    • REST service call from a Bean from the camel route to start the external business process

JBoss BRMS and Fuse demo project

The reference project shows an example of integrating JBoss BRMS with a focus on the BPM component and JBoss Fuse. The environment consists of a JBoss Fuse instance with a Fuse (Camel) deployment and a JBoss BRMS instance with a BPM project. We touched on the business process, but let us examine the rest of the projects in more detail. We have designed our architecture to loosely couple the business process allowing access by other components, like our JBoss Fuse example project, by using a REST client from our Camel route.  The REST client uses the Process ID and the proper user credentials to start a new instance of the business process.

Peek under the hood

The demo project will execute a lot of the mechanics out of our sight, so let us take you on a tour of what is happening under the hood of our project. If all goes according to plan it would step through our project as follows:
  1. The src/data directory defined in the Camel route is checked for xml messages which contain a stock code in a SOAP message.  In our example we are using RHT as the symbol to get stock data on from the external SOAP Web Service.  Open up the message1.xml file to see the sample SOAP envelope and body.
  2. When a xml file is found then the body of the message is read in and displayed in the log message.
  3. Next the message is sent to the external SOAP web service to get the stock information.
  4. The response that is returned is then displayed in the log message.
  5. Next the startProcessFromCamel method in the RestClientSimple is called to start the business process that prints hello world. Additional information on calling the RestAPI that is provided by JBoss BRMS BPM component is found below. As noted in the section Future work, the stock data will be sent to to the business process.
  6. The process id is displayed in the log message.

The Fuse Component

The Fuse project starts with our simpleRoute project, which contains two parts.  The first is our RestClientSimple class, which allows us to define the business process ID and the user credentials.  We need this class in when dealing with starting our process through the JBoss BRMS BPM RestAPI.  The second is our camel-spring.xml file which contains our bean and route.  A bean is defined with startit as the ID and RestClientSimple as the class.

Here is a closer look at a section of the camel-spring-xmlfile.

<bean id="startit" class="com.jboss.examples.RestClientSimple"/>
<camelContext trace="false" xmlns="http://camel.apache.org/schema/spring">
<route id="my_Sample_Camel_Route_with_CXF">
<from uri="file:src/data?noop=true"/>
<log message="&gt;&gt;&gt; ${body}" loggingLevel="INFO"/>
<log message="&gt;&gt;&gt; ${body}" loggingLevel="INFO"/>
<to uri="bean:startit?method=startProcessFromCamel"/>
<log message="&gt;&gt;&gt; ${body}" loggingLevel="INFO"/>
</route>
</camelContext>

Note that the SOAP web service call to get stock data and then the call for the startProcessFromCamel method in the RestClientSimple class.  We aren't currently passing the stock data to the business process, but that is possible, see the section on future work. Our RestSimpleClientgives three options for interaction with our JBoss BRMS BPM deployment.
  1. RestClientSimple starts a process without parameters
  2. RestClientStartWithParam starts a process with parameters
  3. RestClientTask starts a process and complete a task with form data
In our case we are will be  using the first option, but for more information on the RestAPI see the Red Hat Customer Portal Knowledge base article.

Future work

This article has demonstrated how to integrate your service bus with a business process engine. This example project solved only one of the use cases and there are interesting extensions that could be added.
  • The business process can be replaced by a more extensive example process, such as the Customer Evaluation Demo to show both BPM and rule integration.
  • Parametrize the REST service such that diverse processes could be called.
  • Pass the Stock data that was looked up in the Camel route as a parameter into the business process for display like the current Hello World.
  • Deploy the SimpleRestClient service in apart bundle within JBoss Fuse container. Currently it is a bean in the route but it could be set as a proxy service that would receive a processID, user name, and user password.)
These extensions we leave for you to work out, like homework exercises, as you explore the integration scenarios that JBoss BRMS and JBoss Fuse can solve for you.

(Co-authored by Kenny Peeples & Eric D. Schabell)

Monday, October 28, 2013

Fuse Service Works v6 Beta Announced

Announcing Fuse Service Works 6.0 Beta!

Overview of FSW

JBoss Fuse Service Works (FSW), formerly named SOA-Platform, is the Red Hat middleware solution for application integration, messaging and SOA integration. It combines the technical innovations from open source communities including the core integration technologies from the FuseSource acquisition to address integration requirements.

JBoss Fuse Service Works consists of several leading open source projects from JBoss and Apache communities such as:
  • SwicthYard – business services and SCA capabilities
  • RiftSaw - service orchestration capabilities
  • Overlord - service governance and activity monitoring 
  • Drools – business rules processing
  • Apache Camel, Apache CXF and Apache ActiveMQ - core integration capabilities
The component versions are this point are:
  • Overlord Runtime Governance  - 1.0.0.Final
  • Overlord Design Time Governance  - 1.0.0.Final
  • Overlord S-RAMP  - 0.3.0.Final
  • ModeShape  - 3.5.0.Final
  • SwitchYard - 1.1.0.M3
  • Camel - 2.10.0
  • EAP - 6.1.0
  • Smooks - 1.5.1
  • Drools/jBPM - 6.0.0.CR3
Below each project is highlighted and then we have a sample application to get you started. The Home Loan FSW Application walks you through building your first FSW application.  So to get started let's first go through the components in a little detail:

Apache Camel - implementation of the popular and widely used Enterprise Integration Patterns (EIP) framework for routing, transformation that enables faster and more efficient integration solutions

Apache ActiveMQ - high performance, reliable messaging broker that supports messaging patterns such as publish-subscribe, point-to-point and store-forward, and multiple cross language clients

Apache CXF - web services framework which exposes integration assets as services and calls external services, supporting all major web services standards.

SwitchYard – lightweight service delivery framework, based on SCA (Service Component Architecture), providing full life-cycle support for developing, deploying, and managing service-oriented applications
 
Design time Governance (Overlord) – manage the life-cycle of services from design, development through deployment by defining, exposing and enforcing rules or policies
  • Built on top of the S-RAMP artifact repository
  • Supports triggering Governance Workflows based on repository changes
    • Embeds jBPM 6 to support workflow execution
    • Maps an S-RAMP query to a workflow definition
  • Includes an out-of-the-box Governance Workflow to handle Deployment Lifecycle Management
  • Implements several REST services to support Governance Workflows
    • General purpose Notification (email) Service
    • Artifact meta-data Update Service (used to add meta-data to the S-RAMP artifact being governed)
    • Deployment Service used to deploy binary artifacts into runtime EAP systems
      • Supports RHQ
      • Supports JBoss AS CLI
      • Supports direct file copying
      • Can also deploy into a Maven repository
      • Supports multiple, configurable logical deployment targets (e.g. DEV, TEST, PROD)
  • Web UI
    • Includes a Task Inbox for human tasks created by the Governance Workflows
    • Provides a UI specific to the Deployment Lifecycle Governance Workflow
      • Can drill into a deployment to see its contents
      • Shows the change history for a deployment
      • Provides a way to see which deployments are deployed to which environments
Overlord Runtime Governance (Overlord)  – capture service activity information, define and collect metrics, define alerts to optimize and meet Business/Service Level Agreements (SLA)
    • Activity Collector
      • Activity events can be reported directly to the Activity Server via REST service, OR
    • Embedded collector to intercept activities, pre-process the information to extract correlation details and business relevant properties, before batching events for distribution to the server.
      • Events can be 'validated' using pluggable event processors, which can be used to block business transactions
  • Activity Server

    • Provides a REST interface to enable events to be reported
    • Persists activity information
    • Distributes reported events to subscribed components.
  • Event Processor Network

    • Subscribes to the Activity Server, to receive reported activity events
    • Distributes activity events through a series of registered networks, that consist of event processors to validate, transform and retransmit events. Processors can be specified using Java, Drools CEP rules and MVEL.
  • Maintaining Derived Results

    • Information derived by the Event Processor Network can be presented as a set of 'active' collections
    • Components can directly access these collections, or issue queries through a REST API.
  • Web UI

    • Runtime governance information is provided through a set of gadgets.

      • Service Response Time Gadget - displays response time information per service and optionally operation.
      • Situations Gadget - table for displaying situations detected by the event processing (e.g. SLA violation)
      • Call Trace Gadget - provides a tree based visual display of the call stack associated with a business transaction
      • Service Overview - graphical representation of the services and their dependencies, showing response time and invocation details.

        Introducing the Home Loan FSW Application 1.0


        TheHome Loan FSW Application 1.0 in a nutshell takes a home loan application in Fannie Mae standard and processes it through the system to get a decision. The diagram below is a high level overview of the application.


For our sample we are a creditor service and receive loan applications from different interfaces like messaging and SOAP in a special format, “Fannie Mae 1003 Loan Application”. Each application is processed with customer data based on different sources. According to a business process, if it's an existing customer there is a manual task to be performed by a loan officer. Otherwise it is an automatic task performed by business rules. The business process is shown below which is from the IDE.




The Home Loan v1 on FSW 6.0 is using Switchyard, DTGov and Camel. We are also using Data Virtualization 6.0. In the future we will be adding RTGov in the demo. The application can be viewed through the Switchyard composite in the IDE.


The diagram below describes the pieces of the Switchyard composite.


Download the FSW and DV Enterprise Products from jboss.org at http://www.jboss.org/products. Check out additional code on www.github.com/FuseServiceWorksByExampleCheck out the Wiki for step by step instructions for setting up and running the sample application. We will by adding more to this example for the different components.

Wednesday, October 23, 2013

Using the Camel SAP NetWeaver Gateway Component in Fuse

Overview


We won't go into great detail on describing Camel other than it is the open source integration framework based on Enterprise Integration Patterns.  Apache Camel uses URIs to work directly with any kind of Transport or messaging model such as HTTP,ActiveMQJMSJBI, SCA, MINA or CXF, as well as pluggable Components and Data Format options.  One of these components is the sap-netweaver component available in Camel 2.12 which will be available in Fuse 6.1.

In this blog we show how to use the sap-netweaver component in Fuse.

Setup a SAP Developer Account


In order to run the project a SAP Developer account should be setup.  Visit the Developer Page at http://scn.sap.com/docs/DOC-31221  Also visit the Red Hat JBoss Enterprise Middleware for SAP page on SCN at http://scn.sap.com/docs/DOC-39134

Running a test of the component



Step 2 - Import the Project into JBDS
JBDS - https://www.jboss.org/products/jbds.html
Core Update http://download.jboss.org/jbosstools/updates/stable/kepler/
Integration Stack http://download.jboss.org/jbosstools/updates/development/kepler/integration-stack/

Step 3 - Update the Username and Password in the camel-context.xml

Step 4 - Right click on camel-context.xml and run as 'Local Camel Context'

Step 5 - The output will look like the below in the console:

[pache.camel.spring.Main.main()] MainSupport                    INFO  Apache Camel 2.12.0.redhat-610-SNAPSHOT starting
[pache.camel.spring.Main.main()] ileSystemXmlApplicationContext INFO  Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@6fc0394c: startup date [Wed Oct 23 11:52:53 EDT 2013]; root of context hierarchy
[pache.camel.spring.Main.main()] XmlBeanDefinitionReader        INFO  Loading XML bean definitions from URL [file:/home/kpeeples/workspace/camel-spring/src/main/resources/META-INF/spring/camel-context.xml]
[pache.camel.spring.Main.main()] DefaultListableBeanFactory     INFO  Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@15222f9f: defining beans [template,consumerTemplate,camel-1:beanPostProcessor,camel-1]; root of factory hierarchy
[pache.camel.spring.Main.main()] SpringCamelContext             INFO  Apache Camel 2.12.0.redhat-610-SNAPSHOT (CamelContext: camel-1) is starting
[pache.camel.spring.Main.main()] ManagedManagementStrategy      INFO  JMX is enabled
[pache.camel.spring.Main.main()] DefaultTypeConverter           INFO  Loaded 191 type converters
[pache.camel.spring.Main.main()] SpringCamelContext             INFO  StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html
[pache.camel.spring.Main.main()] FileEndpoint                   INFO  Endpoint is configured with noop=true so forcing endpoint to be idempotent as well
[pache.camel.spring.Main.main()] FileEndpoint                   INFO  Using default memory based idempotent repository with cache max size: 1000
[pache.camel.spring.Main.main()] NetWeaverProducer              INFO  Creating NetWeaverProducer using url: https://sapes1.sapdevcenter.com/sap/opu/odata/IWFND/RMTSAMPLEFLIGHT/?authUsername=P1940066098&authPassword=xxxxxx&authMethod=Basic
[pache.camel.spring.Main.main()] SpringCamelContext             INFO  Route: route1 started and consuming from: Endpoint[file://src/sap-netweaver?fileName=command.txt&noop=true]
[pache.camel.spring.Main.main()] SpringCamelContext             INFO  Total 1 routes, of which 1 is started.
[pache.camel.spring.Main.main()] SpringCamelContext             INFO  Apache Camel 2.12.0.redhat-610-SNAPSHOT (CamelContext: camel-1) started in 0.572 seconds
[ #0 - file://src/sap-netweaver] AuthChallengeProcessor         INFO  Basic authentication scheme selected
[ #0 - file://src/sap-netweaver] response                       INFO  Exchange[ExchangePattern: InOnly, BodyType: String, Body: <?xml version="1.0" encoding="utf-8"?><entry xml:base="https://sapes1.sapdevcenter.com:443/sap/opu/odata/IWFND/RMTSAMPLEFLIGHT/" xmlns="http://www.w3.org/2005/Atom" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"><id>https://sapes1.sapdevcenter.com:443/sap/opu/odata/IWFND/RMTSAMPLEFLIGHT/FlightCollection(carrid='AA',connid='0017',fldate=datetime'2013-05-01T00%3A00%3A00')</id><title type="text">FlightCollection(carrid='AA',connid='0017',fldate=datetime'2013-05-01T00%3A00%3A00')</title><updated>2013-10-23T15:58:27Z</updated><category term="RMTSAMPLEFLIGHT.Flight" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/><link href="FlightCollection(carrid='AA',connid='0017',fldate=datetime'2013-05-01T00%3A00%3A00')" rel="edit" title="Flight"/><link href="FlightCollection(carrid='AA',connid='0017',fldate=datetime'2013-05-01T00%3A00%3A00')/flightbooking" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/flightbooking" type="application/atom+xml;type=entry" title="flightbooking"/><link href="FlightCollection(carrid='AA',connid='0017',fldate=datetime'2013-05-01T00%3A00%3A00')/flightBookings" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/flightBookings" type="application/atom+xml;type=feed" title="flightBookings"/><link href="FlightCollection(carrid='AA',connid='0017',fldate=datetime'2013-05-01T00%3A00%3A00')/FlightCarrier" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/FlightCarrier" type="application/atom+xml;type=entry" title="FlightCarrier"/><content type="application/xml"><m:properties><d:flightDetails m:type="RMTSAMPLEFLIGHT.FlightDetails"><d:countryFrom>US</d:countryFrom><d:cityFrom>new york</d:cityFrom><d:airportFrom>JFK</d:airportFrom><d:countryTo>US</d:countryTo><d:cityTo>SAN FRANCISCO</d:cityTo><d:airportTo>SFO</d:airportTo><d:flightTime>361</d:flightTime><d:departureTime>PT11H00M00S</d:departureTime><d:arrivalTime>PT14H01M00S</d:arrivalTime><d:distance>2572.0000</d:distance><d:distanceUnit>SMI</d:distanceUnit><d:flightType/><d:period>0</d:period></d:flightDetails><d:carrid>AA</d:carrid><d:connid>0017</d:connid><d:fldate>2013-05-01T00:00:00</d:fldate><d:PRICE>422.94</d:PRICE><d:CURRENCY>USD</d:CURRENCY><d:PLANETYPE>747-400</d:PLANETYPE><d:SEATSMAX>385</d:SEATSMAX><d:SEATSOCC>372</d:SEATSOCC><d:PAYMENTSUM>191604.78</d:PAYMENTSUM><d:SEATSMAX_B>31</d:SEATSMAX_B><d:SEATSOCC_B>31</d:SEATSOCC_B><d:SEATSMAX_F>21</d:SEATSMAX_F><d:SEATSOCC_F>19</d:SEATSOCC_F></m:properties></content></entry>]

Friday, October 11, 2013

SAP NW Gateway with Fuse and DV

Travel Triage v1.0

The Travel Triage Reference Implementation v1.0 shows the integration of Red Hat JBoss Data Virtualization, Red Hat JBoss Fuse, SAP NetWeaver Gateway and MySQL.  The Android application communicates with Fuse through MQTT and with Data Virtualization through REST.

The demo architecture is described in this diagram-



Section 1 - Red Hat JBoss Developer Program

The JBoss developer program allows developers to download the Enterprise Software from Red Hat to try for free without having to purchase a subscription.  The developer can create , deploy and test applications in a development environment before purchasing subscriptions for the production environment.  For this Reference Architecture you can download the same products at-

Data Virtualization 6 - http://www.jboss.org/products/datavirt.html
Fuse 6 - https://www.jboss.org/products/fuse.html
JBDS 7 - https://www.jboss.org/products/jbds.html
JBDS Core and Integration Stack - http://www.jboss.org/tools/download

Section 2 - Red Hat JBoss Fuse 6 Overview and Integration to SAP NetWeaver Gateway

JBoss Fuse is composed of several community projects - Apache ActiveMQ, Apache CXF, Apache Karaf and Apache Camel.  We will highlight Apache ActiveMQ and Apache Camel.

Apache Camel is a integration framework based on Enterprise Integration Patterns.  Camel allows you to define routing and mediation rules in a variety of domain-specific languages (DSL). Camel exposed many component implementations via Uniform Resource Identifier (URI).  One of those components are the SAP NetWeaver Gateway component.  The sap-netweaver componenet integrates with the SAP NetWeaver Gateway using HTTP transports.  In this demonstration the camel route with the Spring DSL to get a command from a file, use it with the sap-netweaver component and then use the results.

Apache ActiveMQ is the open source messageing and integration pattern server.  ActiveMQ supports a variety of Cross Language Clients and protocols.  In this demonstration we are using the MQTT protocol.  MQTT is a lightweight machine-to-machine (M@M) publish and subscribe messaging protocol.

Section 3 - Red Hat JBoss Data Virtualization 6 Overview and Integration to SAP NetWeaver Gateway

Data Virtualization allows applications to use data from multiple, heterogenous data stores.  Through abstraction and federation, the data is accessed and integrated in real-time across distributed data sources copying or moving data from its system of record.  Teiid is the community project that is the basis for Data Virtualization.

In our demonstration we are using MySQL and SAP NetWeaver Gateway as the datasources and expose them as one datasource to the application.

Section 4 - Developer Resources

Slides from SAP Workshop -http://www.slideshare.net/opensourcementor/sap-webinarbriefingsep2013final

Using MQTT with Fuse and Android - /2013/10/red-hat-jboss-mq-and-iot.html
  with code - https://github.com/kpeeples/a-mq-android-mqtt

Using the Camel SAP NetWeaver Gateway with Fuse - /2013/10/using-camel-sap-netweaver-gateway.html
  with code - https://github.com/kpeeples/Fuse-sap-netweaver-gateway-component

Travel Triage Code - https://github.com/kpeeples/sap-partner-outreach

Red Hat Webinar next week - Sneak Preview of the next SOA Platform

Sneak preview of the next version of Red Hat JBoss SOA Platform 

Red Hat introduces a new way to integrate your services, applications, and data. Join our webinar for a demonstration of the next version of Red Hat JBoss SOA Platform’s features and functionality.
Want to create simple and flexible services that hide the complexity of integrating with different enterprise applications? A service-oriented architecture (SOA) platform can enable faster and easier mobile, cloud, and business process management (BPM) projects in your organization.
Attend this webinar to understand the new capabilities in the upcoming version of the JBoss SOA Platform, Red Hat's middleware solution for application integration, messaging, SOA, and service governance requirements.

Overview and deep dive into the next version of JBoss SOA Platform

During the webinar, we will present an overview of the platform, then run through a quick demonstration. The demonstration will cover:
  • The structure and layout of an application on the next version of the JBoss SOA Platform.
  • How to implement service logic and configure service bindings.
  • Configuring declarative transformation.
  • Exploring unit test services.
  • Deploying the application to the platform.
We will also provide links to resources such as our in-depth home loan demo, which uses several of Red Hat’s SOA capabilities

Date: October 17, 2013 Time: 15:00 UTC | 11 a.m. (New York) / 5 p.m. (Paris) / 8:30 p.m. (Mumbai)

http://www.redhat.com/about/events-webinars/webinars/2013-10-17-sneak-preview-jboss-soa-p

Thursday, October 10, 2013

JBoss Weekly Editorial by Eric Schabell

JBoss Open Source Goodness for this week from Eric Schabell - https://community.jboss.org/blogs/weekly-editorial/2013/10/10/this-week-in-jboss-10-october-2013

Wednesday, October 9, 2013

JBoss Data Virtualization Beta v6 is available!


Introducing Red Hat JBoss Data Virtualization v6.0 Beta!



JBoss Data Virtualization is the new name for JBoss Data Services. Key new features and capabilities in JBoss Data Virtualization v6 are:
  • New Big Data and Cloud Data Integration include support for Apache Hadoop, NoSQL - JBoss Data Grid and Mongo DB (Tech Preview) sources along with OData support (SAP integration) and Salesforce.com (SaaS).
  • New Business Dashboard - quickly build reports and visualize data with the new business dashboard.
  • Enhanced Developer Productivity with new Teiid Designer 8 integrated with JBoss Developer Studio and DDL based Virtual DB definitions, import/reuse, and native queries support.
  • Simplified deployment and packaging includes JBoss Enterprise Application Platform.  DV v6 does not require SOA-P.
Get started with Data Virtualization by following our Getting Started Video Series. Through the JBoss Developer Program the Enterprise product can be download from the JBoss.org Products page at http://www.JBoss.org/products/datavirt and development use is free.


To learn more and Beta download visit: http://www.jboss.org/products/datavirt 

Tuesday, October 8, 2013

Hadoop World in NY

Join us at Hadoop World in NY October 28-31!

It is Co-Presented by Cloudera and O'Reilly - http://strataconf.com/stratany2013

A demonstration of Red Hat JBoss Data Virtualization with Hive/Hadoop will be shown at the Red Hat booth.


Red Hat JBoss A-MQ and the IoT

How to be a JBoss A-MQ and Android Rock Star in the world of the Internet of Things!

I wanted to pull together a simple example of how to leverage Red Hat JBoss A-MQ in the Internet of Things (IoT) through the use of Message Queue Telemetry Transport (MQTT) in Android.  The first part of the article will highlight the concepts and technologies used in the demonstration.  The second part will get you up and running with an example in a couple of minutes just like a rock star.  The example shows how easy it is to publish and subscribe to a topic in JBoss A-MQ from Android using the MQTT Client.

Part 1 - The concepts

What is MQTT?

MQTT is a machine-to-machine (M2M)/"Internet of Things" connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport. It is useful for connections with remote locations where a small code footprint is required and/or network bandwidth is at a premium. [1]
 
MQTT is now an open standard through OASIS. The first meeting of the OASIS MQTT Technical Committee was held on 26 March 2013 in Boston as a F2F (Face 2 Face) meeting. [2]  A very good overview on MQTT from Dave Locke is in the references. [3]

What is Red Hat JBoss A-MQ?


A small footprint, high performance, open source messaging platform based on Apache ActiveMQ. [8]  Under the Red Hat Developer program the JBoss A-MQ Enterprise software is available for developers to try, FOR FREE! 

What supporting projects are included in the demonstration?

The demonstration includes code from the Red Hat JBoss Fuse MQTT Client library that Hiram Chirino started.  The library supports Blocking, Future and Callback/Continuation Passing Based APIs.  The source is located in the references. [4]  I included the library in the project.  I also utilized the code from Jason Sherman for the sample Android Application. [5] [6]  In addition I utilized Eric Schabell's JBoss Rock Star template for a quick build of the demonstration.  [7]

The only updates to the activemq.xml file that are required are:
1. The transport connector for mqtt.  The standard port is 1883.
<transportConnectors>  
  <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>  
  <transportConnector name="mqtt" uri="mqtt+nio://0.0.0.0:1883"/>  
</transportConnectors> 
2. To enable security we just use the SimpleAuthenticationPlugin.
<plugins>
   <simpleAuthenticationPlugin>
      <users>
         <authenticationUser username="system" password="manager" groups="users,admins"/>
         <authenticationUser username="user" password="password" groups="users"/>
         <authenticationUser username="guest" password="password" groups="guests"/>
      </users>
   </simpleAuthenticationPlugin>
</plugins>

The main code in the Android app is in the MQTTActivity.java file in the org.example.mqtt package.  The android app UI is in the main.xml and can be seen in the graphical layout.

Part 2 - The demo

Steps  to build and run the demo

1. Download the code from github at https://github.com/kpeeples/a-mq-android-mqtt
2. Download Red Hat JBoss A-MQ from https://www.jboss.org/products/amq.html and place in the installs directory.


3. Download the Android Bundle from http://developer.android.com/sdk/index.html and unzip.


4. Download and start JBoss Developer Studio 7 or the Fuse IDE.

5. Add the Android Developer Plugins http://rgladwell.github.com/m2e-android/updates/

6. Create a Android Virtual Device (AVD) through JBDS in the Android Virtual Device Manager in the Window menu.  If the Android Virtual Device Manager does not show on the Window menu then Click on Window > Customize perspective > Command Groups Availability tab. Check the "Android SDK and AVD Manager" option and hit the OK button.

7. Import the Android project in JBDS


8. Run the init.sh to setup A-MQ

9. Start A-MQ in the foreground by executing target/jboss-a-mq-6.0.0.redhat-024/bin/amq


10. Right click on AndroidManifest.xml and Run As Android.

11. Connect to the broker and make sure to use the IP instead of localhost and use a username/password entered from the activemq.xml

12. Enter a destination topic and a test message then click send

13. The message will sent to the topic, read from the topic and then placed in the received field.


References:

[1] http://mqtt.org/
[2] https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=mqtt
[3] https://www.oasis-open.org/committees/download.php/49205/MQTT-OASIS-Webinar.pdf 
[4] https://github.com/fusesource/mqtt-client
[5] http://java.dzone.com/articles/android-mqtt-activemq
[6] https://github.com/jsherman1/android-mqtt-demo.git
[7] https://github.com/eschabell/jboss-rock-star-template
[8] https://www.jboss.org/products/amq.html