Introduction to Split-Joins:A split-join is a mediation pattern that can be used in a Service Bus to direct the flow and processing of messages. Split-joins let you split a service payload, such as an order, into individual messages that are sent to multiple services concurrently, as opposed to standard sequential processing. This greatly improves service performance. Split-join achieves this by splitting an input message payload into sub-messages (split), routing them concurrently to their destinations, and aggregating the responses into one overall return message (join). This process of payload splitting and response aggregation is called a split-join pattern.
You create and design split-joins in the JDeveloper/eclipse with OSB plugin enabled Split-Join Definition Editor. You can then export the split-join and its associated resources, and import those resources to the Oracle Service Bus Console for testing and production. A split-join is saved to a file in JDeveloper, and is always based on a WSDL operation. A split-join can be invoked from a proxy service, a pipeline, or another split-join. A split-join can invoke a proxy or business service, a pipeline, or another split-join.
Our problem: We have 3 different procedure which will be called, Scenario is PL1 , PL2, PL3. Based on a request code PL1 or PL2 will be called, both PL are sharing common input and output, So output from both will be same, The output of PL1 or PL2 will be work as an input for PL3 and the output from the PL3 will be merged in the response that is generated by PL1 or PL2 response, As this is a sequential process and with the OSB proxy we can't achieve this, So for same we are using OSB split-join component which will be used by proxy service as a business service.
1.Proxy service.
2.Business services for all the procedures.
3.Business service for the split-jon flow.
Proxy service Design:
Business service design:
ConsultaDir_SplitJoin.flow(Split-join)1:
ConsultaDir_SplitJoin.flow(Split-join)2:initialize the response variable with xsd main element, else it will generate an error with the message that "response variable is used before initialization" or we can say before using any declared variable it is mandatory to initialize a variable.
ConsultaDir_SplitJoin.flow(Split-join)3:
ConsultaDir_SplitJoin.flow(Split-join)4:
ConsultaDir_SplitJoin.flow(Split-join)5:Make a copy of the response which is generated by PL1 or PL2, As the main response variable of flow is type of message, So you can't iterate over it.
ConsultaDir_SplitJoin.flow(Split-join)6:
Xquery used for merging PL3 response in main response: As we are using assign tag for merging PL3 response with PL1 so we need to again add main response in the Xquery as it will be replaced by NULL, As assign tag is assigned to a variable and the value is replaced by new value.
<ns1:mainResponseTagName>
<data>
{
for $directoriosMedico at $counterValue in $FlowResponse/data/dataList
return
<Response>
{
<data>
{
for $directoriosMedico at $counterValue in $FlowResponse/data/dataList
return
<Response>
{
Main response tags
}
{
for $P_SUCURSALES_ITEM in $PL3_Variable/ns3:ITEM[$counterValue]/ns3:P_SUCURSALES/ns3:P_ITEM
return
<ResponseInner>
{
PL3 response tags, available in main response
</ResponseInner>
}
</Response>
}
</data>
</ns1:mainResponseTagName>
{
for $P_SUCURSALES_ITEM in $PL3_Variable/ns3:ITEM[$counterValue]/ns3:P_SUCURSALES/ns3:P_ITEM
return
<ResponseInner>
{
PL3 response tags, available in main response
</ResponseInner>
}
</Response>
}
</data>
</ns1:mainResponseTagName>
Could you please reload the screen shots, which are not visible here Please...
ReplyDelete