Petals Getting started - day 5 - EIP Orchestration

Hi ! Today is you last day. You will create a simple process: bufferize messages, and execute all of them in one time with MathOperations. You will use EIP chains for this.

Last tested with
  • Petals ESB 3.1
  • Petals Studio 1.1.0
  • Petals SE RMI 1.1.1
  • Petals BC SOAP 4.0.2
  • Petals Webconsole 2.0.3
  • Tomcat 6.0.29
  • JDK 6 update 20
  • Petals SE Jsr181 1.1.2

Added in this tutorial :

  • Petals SE EIP 2.4.3
This tutorial is based on [EIP Buffer complex use case].

Definition of our integration process

You will use Enterprise Integration Patterns (EIP, see below for explanations) to create this process :

  • Several messages are sent to an EIPAggregator pattern, which bufferize all incoming messages.
  • Trigger message is sent to EipAggregator.
  • EipAggregator sends an aggregated message to EipSPlitter.
  • EipSplitter splits the aggregated message back into multiple messages.
  • EipSPlitter sends the multiple messages to the operation AddIntegers on the service MathOperations.
  • MathOperations.AddIntegers processes the messages and send you the responses.
Macro Error Cannot find the diagram with these parameters:
name: Petals RMI-EIP-JSR181
version:
pageName: Bufferize operations with EIP
pageId:
spaceKey: petalsesb

What is EIP ?
A set of design patterns for enterprise application integration.

What is Agregator pattern ?

[TODO]

What is Splitter Pattern ?

[TODO]

Configure the Splitter

  1. Create a new EIP Technical service with the following configuration:
Parameter name
Value
Comments
JBI propertie    
Interface namespace http://test.petalslink.com  
InterfaceName EipSplitterInterface  
Service Namespace http://test.petalslink.com  
Service Name EipSplitter  
End-point Name EipSplitterEndpoint  
Project Name and Location    
Project Name su-EIP-EipSplitter-provide  
Specific Component properties    
Eip Splitter  
Service Parameters    
Service Parameters Select "su-jsr181-MathOperations-provide"  Auto-configuration
XPath Condition    
XPath Condition //*[local-name()="AddIntegers"]  
Additional Parameters    
Operation Namespace http://test.petalslink.com  
Operation AddIntegers  
Mep InOut  
CDK properties    
Validate WSDL false There is no wsdl

Configure the Aggregator

  1. Create a new EIP Technical service with the following configuration:
Parameter name
Value
Comments
JBI propertie    
Interface namespace http://test.petalslink.com  
InterfaceName EipAggregatorInterface  
Service Namespace http://test.petalslink.com  
Service Name EipAggregator  
End-point Name EipAggregatorEndpoint  
Project Name and Location    
Project Name su-EIP-EipAggregator-provide  
Specific Component properties    
Eip Aggregator  
Aggregator Correlation
boolean(/*[local-name()="AddIntegers"])  
Service Parameters    
Service Parameters Select "su-EIP-EipSPlitter-provide Auto-configuration
XPath Condition    
XPath Condition boolean(/[local-name()="AddIntegers"]/[local-name()="equals"])  
Additional Parameters    
Operation Namespace http://test.petalslink.com  
Operation AddIntegers  
Mep InOut  
CDK properties    
Validate WSDL false There is no wsdl

Create and deploy an EIP Service Assembly

There is a tight-coupling between both EIP. Assembling them in one single SA can be a good idea (especially with EIP, which can chain lots of patterns, each requiring a different SU).

  1. Create a new Service Assembly.
    Service Assembly  
    Name sa-Eip-AggregatorSplitter
  2. Add the two EIP Service-Units you created, and confirm
  3. Fast-export the Service Assembly for Petals.
  4. Deploy in Petals ESB.

Understand XPath expressions

What is XPath ?

Run this tutorial (takes ~30 min) for Xpath : http://www.w3schools.com/XPath/default.asp
Now try to understand the XPath expressions we used. If you use EIP later, it is essential to understand and be able to write XPath.

EIP Agregator conditions

  1. Messages which satisfy "aggregator-correlation" are aggregated
    <eip:aggregator-correlation>boolean(/*[local-name()="AddIntegers"])</eip:aggregator-correlation>

    This means elements inside <AddIntegers> will be aggregated.

  1. Messages which satisfy "test" trigger the sending of aggregated buffer
    <eip:test>boolean(/*[local-name()="AddIntegers"]/*[local-name()="equals"])</eip:test>

    If <AddIntegers> contains <equals> element, aggregated message is sent to the next service and buffer cleared.

EIP Splitter conditions

  1. Elements which satisfy "test" are extracted and sent to the next service.
    <eip:test>//*[local-name()="AddIntegers"]</eip:test>

    <AddIntegers> elements are split and each one is sent in one message.

Test the EIP chain

Deploy the SA containing the SU su-jsr181-MathOperations-provide. Deploy the SA sa-Eip-AggregatorSplitter.

Send messages from webconsole, with InOut MEP (message exchange pattern), then send the trigger.

Message 1
<AddIntegers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<integer1>1</integer1>
<integer2>2</integer2>
</AddIntegers>
Response message
<result xmlns="http://petals.ow2.org/petals-se-eip/aggregator">Aggregator: the content is buffered by the pattern</result>

Bufferize more messages:

Message 2
<AddIntegers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<integer1>3</integer1>
<integer2>4</integer2>
</AddIntegers>
Message 3
<AddIntegers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<integer1>5</integer1>
<integer2>6</integer2>
</AddIntegers>

Trigger :

Message 4 - Trigger
<AddIntegers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<equals/>
</AddIntegers>

Messages processed by MathOperations :

Response message
<result xmlns="http://petals.ow2.org/petals-se-eip/splitter">
<dlwmin:AddIntegersResponse xmlns:dlwmin="http://test.petalslink.com" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<returnMessage xmlns="">3</returnMessage>
</dlwmin:AddIntegersResponse>
<dlwmin:AddIntegersResponse xmlns:dlwmin="http://test.petalslink.com" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<returnMessage xmlns="">7</returnMessage>
</dlwmin:AddIntegersResponse>
<dlwmin:AddIntegersResponse xmlns:dlwmin="http://test.petalslink.com" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<returnMessage xmlns="">11</returnMessage>
</dlwmin:AddIntegersResponse>
</result>

More about orchestration

Look at other EIP patterns. Simple theory exercise: how would you do in this case....?

[TODO]

Other orchestration ways: BPEL, SCA, JSR181 or POJO. More info in whitepaper

EIP : Good performances. But complicated and a bit "dirty old way" (for example, do not use WSDL)
BPEL: Based on XML and WSDL. Standard. Quite complicated to learn. Poorer performances.
SCA: The simplest. Java code based on WSDL.
POJO or JSR181: Needs advanced Java programmation.
Custom JBI Component: Needs lot of skills. Best performances. Hard to maintain.

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.