Signup for Training
- Kuala Lumpur, ML, Nov 25-27
- Frankfurt, DE, Dec 02-04
- Ciudad de Mexico, Dec 2-4
- Atlanta, GA Dec 3-5
- Melbourne, AU, Dec 9-11
More trainings...
Intalio|BPMS Webinars
- Nov 20, 2008 1 PM EST
- Nov 21, 2008 1PM EST
- Nov 26, 2008 10 AM GMT
- Dec 5, 2008 10 AM PST
- Dec 9, 2008 1 PM EST
- Dec 11, 2008 1 PM EST
- Dec 19, 2008 10 AM PST
- Dec 30, 2008 10 AM PST
- Jan 13, 2009 10 AM PST
- Jan 15, 2009 1 PM EST
- Feb 3, 2009 10 AM PST
- Feb 12, 2009 1 PM EST
- Feb 17, 2009 10 AM PST
- Mar 10, 2009 10 AM PST
- Mar 12, 2009 1 PM EST
- Mar 24, 2009 10 AM PST
Login
Who's online?
- (jloge@ebsco.com)
- Admin Intalio (admin)
- Alex Prada (alex.prada)
- Alexandre Miguel de Andrade Souza (alexandremas)
- Crezo Ferreira (crezo.ferreira)
- Dariusz Gawrych (dariusz.gawrych)
- ESOMCHI NWOFOR (esomchi.nwofor)
- Ezequiel Muñoz (ezequiel.munoz)
- Johan Strandler (johan)
- Jose garcia (jose.garcia2)
- Jose Meza (jose.meza)
- Kevin Murray (kevin.murray)
- Leonardo Saraiva (leonardo.saraiva)
- Raul Rivas (raulxavier)
- Richard Guydan (richard.guydan)
- Soul Id (soul.id)
- Talita Pezzi (talita.pezzi)
Subscribe
Create a process using Implicit Correlation
Description:
In this sample, we cover how a correlation is setup implicitly between 2 processes. In this description we are covering all the details about what exactly correlation means and how it works.
Correlation:
At the start of a Business Process, a new process instance is created and it lives for the lifetime of the business process. Since there might be multiple business-process instances active at the same time in the BPEL Engine, all messages sent to the business process have to be delivered to the correct business process instance. As the multiple business-process instances are active at the same time, business-application-specific data available in the exchanged messages are used to maintain references to specific business process instances. This idea of associating business-application-specific data found in the messages to maintain references to specific business process instances is termed BPEL Correlation.Or in a single phrase we can also say that Correlation provides a way to associate an arbitrary number ofmessages with each other, Now these messages can be provided in two ways i.e. :->
Implicitly (using sequence identifier)
Explicitly (using Correlation Sets)
Implicit Correlation:
These are the correlations that are not defined by the user but are created by the Intalio-bpms server. The only thing that is required is to associate a unique session identifier with every partner link instance. When a message is sent on a partner link, the session identifier is sent along with the message. The recipient is then able to use the received session identifier in subsequent communications with the process instance. Messages received by the BPEL engine that have a session identifier are routed to the correct instance (and partner link) by that session identifier.
Explicit Correlation:
These are the correlations that are defined by the user. The user needs to create the correlation sets for the process. For more reference on how to create a complex process using explicit correlation check for Create a process using Explicit Correlation .
The document describes in detail the dependencies, requirements and step-by-step process of creating this process, deploying it and executing it in the Intalio-bpms Server.
Use case dependencies:
Â
correlate.xsd:
The schema is of complex type
Â
Requirements covered:
1.    Server:intalio-bpms-4.42.   Designer:Intalio|BPMS Designer-4.4
3. Â Â Â Implicit_Correlation.n3x (n3x file created for this process).Â
Process Download:
1. Please download the Implicit_Correlation.zip.
2. In Intalio|BPMS Designer, go to File > Import...
3. In the wizard, select 'Existing Projects into Workspace' and click Next >
4. Select the 'select archive file:' radio button and provide the location to the Implicit_Correlation.zip file you have just downloaded.
5. Click Finish.
This should create a new project called 'Implicit_Correlation' in your Process Explorer. In the Process Explorer, expand the new Implicit_Correlation project. This project essentially contains the following files:
1. Implicit_Correlation.n3x
2. correlate.xsd
 The process i.e. Implicit_Correlation.n3x should look like:
Preconditions:
Â
Make sure Intalio|BPMS server is up and running successfully.1.   For the first time, go to the “File->New->Projectâ€.
2.   Select “Process-> Business Process Project†and Click on “Nextâ€.
3.   Give the Business Process Project name as “Implicit_Correlation†and click on “Finishâ€.
Scenario in Intalio|BPMS Designer:
1. Create a new diagram, and name it as “Implicit_Correlation.n3xâ€.
2. A pool with a task is available on the modeler window Name the default pool as ‘ClientPool’ and default task as ‘send’.
3. Make sure that the first pool “ClientPool†is non-executable (Change the pool “Executable process†as ‘False’ in “Properties Windowâ€).
Note: As per the BPEL standards, an executable pool must start with an Event Gateway or an element that receives a ‘One-way’ or ‘Request’ message. This can be easily accomplished by making the first pool as non-executable. Incase if the first pool is an executable pool then the following error will be generated if there is no event gateway or a one-way / request message “An executable Pool ‘input’ must start with an Event Gateway or an element that receives a ‘One-way’ or ‘Request’ messageâ€.4. Dnd another pool with two simple tasks from the palette window.
5. Name the second pool as ‘ServerPool1’ and tasks as ‘receive’, ‘sendName’ respectively.
6. Connect ‘send’ to ‘receive’ using message flow and name the message flow as ‘req’.
7. Dnd another pool below ‘ServerPool’ with a simple task from the palette window.
8. Name the third pool as ‘CallServerPool’ and the task as ‘receiveName’.
9. Connect ‘sendName’ to ‘receiveName’ using message flow and name the message flow as ‘reqname’.
10. Dnd another task on ‘CallServerPool’ pool towards the right of ‘receiveName’ and name the task as ‘responseName’.
11. Connect ‘receiveName’ to ‘responseName’ using sequence flow tool.
12. Dnd another task on ‘ServerPool1’ pool towards the right of ‘sendName’ and name the task as ‘resultName’.
13. Connect ‘sendName’ to ‘resultName’ using sequence flow tool.
14. Connect ‘responseName’ task to ‘resultName’ task using message flow and name the message flow as ‘resname’.
15. Dnd a ‘Timer Intermediate Event’ on the ‘Server’ pool and towards the right of ‘resultName’ task.
16. Dnd a ‘Parallel Gateway’ towards the right of ‘Timer Intermediate Event’
17. Connect ‘Timer Intermediate Event’ to ‘Parallel Gateway’ using sequence flow tool.
18. Dnd two tasks towards the right of ‘Parallel Gateway’
19. Name one of the task as ‘sendupdate’ and the other as ‘sendcancel’ and place the ‘sendcancel’ task below ‘sendupdate’ task.
20. Connect the ‘Parallel Gateway’ to ‘sendupdate’, and ‘sendcancel’ tasks with sequence flow.
21. Dnd a ‘Looping-Subprocess’ on the ‘CallServerPool ’ and towards the right of ‘responseName’ and name the task within the ‘Looping Sub-process ’ as ‘execute’.
22. Connect ‘responseName’ to ‘Looping Sub-process’ using sequence flow.
23. Dnd an ‘Event-based Gateway’ and two tasks within the ‘Looping Sub-process’
24. Place the ‘Event-based Gateway’ towards the right of ‘execute’ task
25. Place the two tasks vertically i.e. one above the other and towards the right of ‘Event-based Gateway’ and name the tasks as ‘receiveupdate’ and ‘receivecancel’.
26. Connect ‘sendupdate’ to ‘receiveupdate’ and ‘sendcancel’ to ‘receivecancel’ using message flows and name the message flowsas ‘requpdate’ and ‘reqcancel’ respectively.
27. Dnd ‘Material’ schema from ‘correlate.xsd ’onto ‘req’ and ‘reqname’
28. Dnd ‘startname’ schema from ‘correlate.xsd ’onto ‘resname’.
29. Dnd ‘receiveupdate’ schema from ‘correlate.xsd ’onto ‘requpdate’.
30. Dnd ‘receivecancel’ schema from ‘correlate.xsd ’onto ‘reqcancel’.
31. Click on ‘Timer Intermediate Event’ and in the properties window give the Timecycle as ‘PT10S’.
Working in Mapper:
1.  Click on the ‘sendName’ task in the Modeler.
2.  In the mapper 3 frames are displayed where:
         Left frame (1st) reflects the source side
         Middle frame(2nd) reflects the mapper area
       Right frame(3rd) reflects the target side.
3.  Go to Mapper Palette and expand ‘Constructor Functions for XML Schema Built-in Types’ and select ‘bpdm:literal’ and dnd the literal on the Mapper.
4.  Go to Mapper Toolbar and click on ‘Connects operators and nodes’ button
5.  Click on the literal created and then click on ‘$reqname.Material’ given in the target side of the Mapper.
6. Â Right click on the literal and select Edit option and provide the below given code:
     ‘bpdm:literal('<ns:Material><ns:MaterialName>pen</ns:MaterialName><ns:Quantity>3</ns:Quantity> </ns:Material>')’
7.  Go to the Data Editor and expand the ‘CallServerPool’ node.
8.  Right click on the ‘declarations’ and select ‘Create $ variable’
9.  In the ‘Create Variable’ window enter the variable name as ‘output’ and select the ‘Create’ button available.
10. Again go to the Data Editor->‘CallServerPool’->‘declarations’-> ‘output’ and right click on it and select ‘Edit’.
11. In the Edit window provide the below code:
     ‘<bpel:variable name="output" type="xs:string"/>’
12. Go to Modeler and click on ‘responseName’.
13. Go to Mapper Palette and expand ‘Constructor Functions for XML Schema Built-in Types’ and select ‘bpdm:literal’ and dnd the literal on the Mapper.
14. Go to Mapper Toolbar and click on ‘Connects operators and nodes’ button
15. Click on the literal created and then click on ‘$resname.startname’ given in the target side of the Mapper.
16. Right click on the literal and select Edit option and provide the below given code
     ‘bpdm:literal('<ns:startname>pen</ns:startname>')’
17. Go to Mapper Toolbar and select ‘creates new operator’
18. Now click on the Mapper, click on the textbox that is available and right click on it and select Edit and give the text as "1" in the textbox.
19. Go to Mapper Toolbar and click on ‘Connects operators and nodes’ button
20. Click on the ‘1’ and then click on ‘$output’ given in the target side of the Mapper.
21. Go to the Modeler and click on the ‘Looping Sub-process’
22. Go to Mapper Palette and expand ‘Functions and Operators on Numerics’ -> ‘Comparison of Numeric Values’ and select ‘op:numeric-greater-than’ operator and dnd it on the Mapper.
23. Go to Mapper Toolbar and click on ‘Connects operators and nodes’ button
24. Click on ‘$output’ node given in the source side of the Mapper and then click on ‘op:numeric-greater-than’ operator available in the Mapper
25. Again click on ‘op:numeric-greater-than’ operator available in the Mapper and then click on ‘Quantity’ node given under ‘$reqname.Material’ in the source side of Mapper.
26. Again click on ‘op:numeric-greater-than’ operator available in the Mapper and then click on ‘condition’ node given in the target side of Mapper.
27. Again go to Modeler and click on ‘execute’ task.
28. Go to Mapper Palette and expand ‘Functions and Operators on Numerics’-> ‘Operators on Numeric Values’ and select ‘op:numeric-add’ operator and dnd it on the Mapper.
29. Go to Mapper Toolbar and select ‘creates new operator’
30. Now click on the Mapper, click on the textbox that is available and right click on it and select Edit and give the text as "1" in the textbox.
31. Go to Mapper Toolbar and click on ‘Connects operators and nodes’ button
32. Click on the ‘$output’ node given in the source side of Mapper and then click on ‘op:numeric-add’ operator available in the Mapper.
33. Again click on ‘op:numeric-add’ operator available in the Mapper and then click on ‘1’ available in the Mapper.
34. Again click on ‘op:numeric-add’ operator available in the Mapper and then click on the ‘$output’ node given in the target side of Mapper
35. Again go to Modeler and click on ‘sendupdate’ task
36. Go to Mapper Toolbar and click on ‘Connects operators and nodes’ button
37. Click on the literal created and then click on ‘$requpdate.receiveUpdate’ node given in the target side of the Mapper.
38. Right click on the literal and select Edit option and provide the below given code
    ‘bpdm:literal('<ns:receiveupdate>pencil</ns:receiveupdate>')’
39. Again go to Modeler and click on ‘sendcancel’ task
40. Go to Mapper Toolbar and click on ‘Connects operators and nodes’ button
41. Click on the literal created and then click on ‘$reqcancel.receivecancel’ node given in the target side of the Mapper.
42. Right click on the literal and select Edit option and provide the below given code
     ‘bpdm:literal('<ns:receivecancel>pen</ns:receivecancel>')’
43. Validate the Diagram there should be no errors.
44. Make sure your intalio-bpms is up and running fine.
45. Generate Bpel & Deploy the Diagram to the server.
Scenario in Intalio|BPMS Console:
1.Make sure bpms server is running fine.
2.Open a browser window and provide the url as:
   http://localhost:8080/bpms-console
3.Enter the User Name as "admin†and password as "changeit" then click on login button.
Note: give the username and password without double quotes4. http://localhost: 8080/bpms-console/Processes window opens
5. Under the “Processesâ€, check the checkbox of “ServerPool†given under the list of processes and select “Start†under “Processes†tab.
6. The “Process Invocation†window is opened.
7.  In the textbox give the values as
    Material
    MaterialName-> pen
    Quantity-> 3
 and select ‘Submit’ button available.
8. The output will be displayed as: OK
9. The state of ‘ServerPool’ and the ‘CallServerPool’ changes to ‘InProgress’ state.
10. Again check the checkbox of “ServerPool†given under the list of processes and select ‘Instances’ button
11. In the Instances page click check the checkbox of “ServerPool†given under the list of processes and select “Invoke†button.
12. The “Process Invocation†window is opened.
13. In the textbox give the values as
     startname-> pen
    and select ‘Submit’ button available.
14. The output will be displayed as: OK
15. The state of the ‘ServerPool’ changes to ‘Completed’ after sometime but the state of ‘CallServerPool’ remains as ‘InProgress’ and changes to ‘Completed’ state after completing the loop and after 10 seconds
Note. In order to view the process has executed properly go to Data tab of the ‘CallServerPool’ that display the whole of the process execution.
Process Flow:
1.In this process we are using 3 pools i.e. ClientPool, ServerPool1,CallServerPool
2.For every task that sends value we have already created unique identifierNote: The unique identifier is created by initializing the instance with a literal that contains a value
3. In this process, the ‘sendName’ task in the Server Pool is associated with the unique identifier that contains the below valuesMaterialName: penQuantity: 3
4.When the message is being send to the Server Pool from the Client Pool. The identifier linked to the process also gets initiated and is sent to the ‘ClientServerPool’ where it is received by ‘receiveName’.
5. The recipient i.e. ‘receiveName’ then uses the received session identifier and pass this value to the ‘responseName’.
Note: At this point the Server pool goes into InProgressState 6. In the CallServerPool the ‘responseName’ is also assigned a unique value for MaterialName which is then received by ‘’resultName’ in ServerPool1.
Note: At this point the CallServerPool goes into InProgressState7. When the ‘resultName’ receives the identifier it waits for ‘20’ secs after which the Server process goes into completed state
8. Also after 20 secs the session identifiers created for ‘sendupdate’ and ‘sendcancel’ are received by ‘receiveupdate’ and ‘receivecancel’ in the CallServerPool which execute 3 times after which the CallServerPool also goes to completed state
