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.
- 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
- 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
- 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).
- Create a new Service Assembly.
Service Assembly Name sa-Eip-AggregatorSplitter - Add the two EIP Service-Units you created, and confirm
- Fast-export the Service Assembly for Petals.
- 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
- 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.
- 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
- 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.
<AddIntegers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <integer1>1</integer1> <integer2>2</integer2> </AddIntegers>
<result xmlns="http://petals.ow2.org/petals-se-eip/aggregator">Aggregator: the content is buffered by the pattern</result>
Bufferize more messages:
<AddIntegers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<integer1>3</integer1>
<integer2>4</integer2>
</AddIntegers>
<AddIntegers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <integer1>5</integer1> <integer2>6</integer2> </AddIntegers>
Trigger :
<AddIntegers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <equals/> </AddIntegers>
Messages processed by MathOperations :
<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.