Hi,

In the BPS 3.5.1 onward, we have introduced a correlation API to explicitly
perform correlation operation [1] .

In addition, we have another requirement to support functionality similar
to join correlation in BPEL. As per the new requirement, when ever we get a
request to start a process instance, we should follow the following
procedure.


   - We have to check for existing instance to correlate.
   - If there are no instance to correlate, then we can proceed with the
   instance creation
   - If there is an instance to correlate, then we have to resume from the
   place where the instance is paused.


The above scenario will work only for the message based correlation.

*Scenario 1*
=========

In order to implement this functionality, we are planning to add a Boolean
flag to enable join correlation during the instance startup. If this flag
is disabled, there won't be any join correlation operations.

This will be the sample request to start an instance

{
"processDefinitionId":"myProcess:1:2508", *"messageName":"resumeMessage",*
"variables": [
{
"name":"var1",
"value":"a1"
}
], "skipInstanceCreationIfExist":true, * "joinCorrelation":true*
}



As per above request  message, variables defined inside "*variables*" can
be used to either correlate with the existing instance. If there are no
instances defined, the variables defined insides the "*variables*" json
array will be added to the process instance. In addition, we have to add "
*messageName*" filed to perform correlation as well.


*Scenario 2*
=========

Another important feature with the BPS 3.5.1 is that we are performing
authorization of the users/groups during the process instance startup. In
some occasions users can defines the candidate users/groups with the
variable assignment like this ${group1} etc ...

In the above scenario, previously users can define those variables like "
*group1*" inside the "*variables*" json array like below mentioned.

{
   "processDefinitionId":"myProcess:1:2508",
   "messageName":"resumeMessage",
   "variables": [
      {
        "name":"var1",
        "value":"a1"
      },
    *  {*
*        "name":"group1",*
*        "value":"admin"*
*      }*
   ],
   "skipInstanceCreationIfExist":true,
   "joinCorrelation":true
}

But this type of implementation may create some unwanted complexity during
the correlation. In addition there might be scenarios where users want to
check the existence/correlate with only certain variables like var1, var2
etc ... But on the other hand users might not want to correlate with the
variables like var3, var4 etc ...

In order to achieve this functionality we can have a separate variable
array like
"*additional**variables*".

Therefore the suggested proposed json request message to achieve joint
correlation will be like this.

{
   "processDefinitionId":"myProcess:1:2508",
   "messageName":"resumeMessage",
   "variables": [
      {
        "name":"var1",
        "value":"a1"
      }
   ],
   "additionalVariables": [
       {
        "name":"group1",
        "value":"admin"
      },
       {
        "name":"var2",
        "value":"a2"
      }
   ],

  "skipInstanceCreationIfExist":true,
   "joinCorrelation":true
}


Please provide your valuable feedback and suggestion over the proposed
solution.

Regards,
Firzhan
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to