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

This Tutorial uses:

  • Petals Studio
  • Petals ESB
  • Petals SE RMI
  • Petals BC SOAP
  • Petals Web console
  • Tomcat
  • Petals SE Jsr-181
  • Petals SE EIP (new)
This tutorial is based on the use case: Bufferize operations with EIP.

Any question, any problem? Find the solution on the EIP tutorial discussion

Integration process definition

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

  • Several messages are sent to an EIPAggregator pattern, which bufferizes all the incoming messages.
  • A trigger message is sent to EipAggregator.
  • The EipAggregator sends an aggregated message to EipSPlitter.
  • The EipSplitter splits the aggregated message back into multiple messages.
  • The EipSPlitter sends the multiple messages to the operation AddIntegers of the MathOperations service.
  • The MathOperations.AddIntegers operation processes the messages and sends the responses.
Full Size
A Gliffy Diagram named: Petals RMI-EIP-JSR181

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

What is Agregator pattern ?
What is Splitter Pattern ?
Read EIP Aggregator and EIP SPlitter documentation to understand those patterns.

Configure EIP Splitter

  1. Launch Petals Studio.
  2. Click File > New > Service-Unit Project.
  3. Select Use a Petals technical Service > EIP > Your_EIP_Version.
  4. Configure Splitter Service-Unit with following configuration:
    Parameter name
    Value
    JBI properties Note: EIP does not need a WSDL
    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
    Chain calls (1)  
    Eip: Splitter
    Chain calls (2)
     
    Selected Pattern: splitter see below for configuration
  5. Click Add > Edit. It displays the window "EIP: Invoked Service 1".
  6. Click Select a service.
  7. Double click MathOperations implements MathOperations @ MathOperationsPort.
  8. Fill the following properties for Invoked Service 1:
    Service Identifiers auto-configured
    Invocation Properties  
    Operation Namespace: http://test.petalslink.com
    Operation: AddIntegers
    Mep: InOut
    Routing Condition  
    XPath Condition //*[local-name()="AddIntegers"]
  9. Click Ok > Next > Finish.

Configure EIP Aggregator

  1. Create another New Service-Unit Project for EIP Technical Service with the following configuration:
    Parameter name
    Value
    JBI propertie  
    Interface Namespace: http://test.petalslink.com
    Interface Name: EipAggregatorInterface
    Service Namespace: http://test.petalslink.com
    Service Name: EipAggregator
    End-point Name: EipAggregatorEndpoint
    Project Name and Location  
    Project Name: su-EIP-EipAggregator-provide
    Chain calls (1)  
    Eip: Aggregator
    Aggregator Correlation: boolean(/*[local-name()="AddIntegers"])
    Chain calls (2)  
    Selected Pattern: aggregator see below for configuration
  2. Click Add > Edit. It displays the window "EIP: Invoked Service 1".
  3. Click Select a service.
  4. Double click EipSplitter implements EipSplitterInterface @ EipSplitterEndpoint.
  5. Fill the following properties for Invoked Service 1:
    Service Identifiers auto-configured
    Invocation Properties  
    Operation Namespace: http://test.petalslink.com
    Operation: AddIntegers
    Mep: InOut
    Routing Condition  
    XPath Condition
    boolean(/*[local-name()="AddIntegers"]/*[local-name()="equals"])
  6. Click Ok > Next > Finish.

Create and deploy an EIP Service Assembly

Beacause EipSplitter and EipAggregator are tight-coupled, they can be packaged in one Service Assembly, without loosing felxibility. This is especially adapted with EIP, which can chain lots of EIP Service-Units.

  1. Click File > New > Service Assembly Project.
    Service Assembly  
    Name: sa-Eip-AggregatorSplitter
    Artifact ID: sa-Eip-AggregatorSplitter
  2. Click Next.
  3. Check su-EIP-EipSplitter-provide and su-EIP-EipAggregator-provide.
  4. Click Finish.
  5. Fast-export the Service Assembly for Petals.
  6. Download Petals-SE-EIP.
  7. Deploy Petals-SE-EIP in Petals ESB.
  8. Deploy sa-Eip-AggregatorSplitter in Petals ESB.

Understand XPath expressions

What is XPath ?
Run this tutorial (takes ~30 min) for Xpath : http://www.w3schools.com/XPath/default.asp
Look at XPath expressions used in EipSplitter and EipAggregator. Try to understand them. XPath is essential to use Petals-SE-EIP.

EIP Agregator conditions:

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

    Elements inside <AddIntegers> will be aggregated.

  2. When "test" is true, aggregated message is sent.
    <eip:test>boolean(/*[local-name()="AddIntegers"]/*[local-name()="equals"])</eip:test>

    When <AddIntegers> contains the <equals> element, the 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 sent one by one.

Test the EIP chain

  1. Check that sa-jsr181-MathOperations-provide (from last day tutorial) is deployed in Petals ESB. If not, deploy it.
  2. Deploy sa-Eip-AggregatorSplitter in Petals ESB.
  3. Go to Webconsole > Server: 0 > Test > Send
  4. Send following messages to Endpoint EipAggregatorEndpoint, with MEP InOut:
    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>
    
    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>
    
  5. Send trigger message:
    Message 4 - Trigger
    <AddIntegers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
    <equals/>
    </AddIntegers>
    
    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

Orchestration alternatives:

You can orchestrate services in Petals with either BPEL, SCA, JSR181, EIP or POJO. Read this Orchestration Whitepaper to learn more.

Main differences between orchestration technologies:

  • EIP: Good performances. But complicated and best-suited for integration projects than SOA (WSDL are not required).
  • BPEL: Based on XML and WSDL. Standard. Requires some time to be mastered.
  • SCA: Another approach of orchestration. Java code, based on WSDL and dependency injections offered by the SCA Java specification.
  • POJO or JSR181: Needs advanced Java programmation.
  • Custom JBI Component: Need of programming skills with Java. Best performances. Hard to maintain. Not mandatory a good practice.

Finished !
Bravo, you successfully ran the Petals Getting Started Guide.

Want to know more ?

  • Tell me what additional tutorial you would like.
  • Ask for advises and help on the forum.
  • Trainings gives advanced knowledge on Petals ESB. They talk more about SOA, and real project problems.

For all this, just contact me!
mathieu.lebreton@petalslink.com

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