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
  • soapUI
  • Petals SE Jsr-181
  • Petals SE EIP (new)
This tutorial is based on the use case: Bufferize operations with EIP.

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 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.
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 Note: 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"])
    Service Parameters  
    Service Parameters 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 Note: 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

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

Orchestration alternatives
You can orchestrate services in Petals with BPEL, SCA, JSR181, EIP or POJO. Read this Orchestration Whitepaper if you are interested.

Summary:

  • 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.

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

Want to know more ?

  • Tell me what additional tutorial you would like.
  • Ask me for a free advise on your project architecture. I will pass it to our architects so they can have a look. This might give you new insights.
  • 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.