[ 
https://issues.apache.org/jira/browse/ODE-364?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12622714#action_12622714
 ] 

Karthick Sankarachary commented on ODE-364:
-------------------------------------------

To answer Alex's comments:

1) There was a proposal to add a boolean annotation in the provisioned service 
listed in the deployment descriptor (specifically, 
deploy/provide/service/shareable) that would indicate whether or not the 
endpoint was actually designed for pub-sub semantic. However, I did not get an 
overwhelming thumbs up for that idea, so it was dropped. I was hoping to enable 
endpoint sharing if and only if the "shareable" element on the corresponding 
service is true. Currently, that (hypothetical) attribute is treated as always 
being set to true.

2) I was assuming that the design-time tooling would ensure that 
request-response operations are not enabled for pub-sub. However, come to think 
of it, the engine could very well perform that validation at run-time by 
introspecting the service (that is about to be shared), and automatically 
disabling endpoint sharing if even one operation in that service is 
request-response. Having said that, there might be a use-case where using 
pub-sub in the context of request-response operations makes sense, particularly 
if the consumer (requestor) doesn't necessarily care which process provides the 
response, as long as it gets one (think of it as a distributed OR-Join workflow 
pattern.) In fact, I suspect that's why I probably wanted to handle 
request-response gracefully to begin with. In light of that, I suggest 
extending the "shareable" annotation with a boolean attribute (specifically, 
deploy/provide/service/shareable/@oneway), which by default would be true, to 
indicate whether or not to ensure if all operations are one-way. If its false, 
then the reply sent back to the consumer will be that of one of the subscribing 
processes.

> Publishing a SOAP message to a set of interested BPEL processes
> ---------------------------------------------------------------
>
>                 Key: ODE-364
>                 URL: https://issues.apache.org/jira/browse/ODE-364
>             Project: ODE
>          Issue Type: New Feature
>          Components: BPEL Runtime
>    Affects Versions: 1.2
>         Environment: Platform-Independent
>            Reporter: Karthick Sankarachary
>             Fix For: 1.2
>
>         Attachments: patch.txt
>
>   Original Estimate: 168h
>  Remaining Estimate: 168h
>
> By default, a SOAP request is targeted at a specific BPEL process in ODE. At 
> times, though, one might want to publish the request simultaneously to 
> multiple BPEL processes, especially if the invocations are one-way.
> This issue describes an implementation of such a feature in the BPEL runtime, 
> in a way that is agnostic of the integration layer and transport bindings.
> In order to facilitate message publishing, processes must have a way to 
> subscribe to messages. While there are many ways to register subscriptions, 
> we chose a implicit mechanism of subscription, wherein no new deployment 
> artifacts are required.  In our approach, if two or more processes provide 
> the same (i.e., shared) service, messages targeted at the endpoint of that 
> service will essentially fan out to each of those (subscribing) processes.
> In general, there are two paths that need to be considered:
> a) Out-Of-Process invocation of the shared service: This follows the path 
> outlined in the BpelServer.createMessageExchange() method. For shared 
> services, we create a new kind of Brokered MEX that clones and pushes the 
> message to each of the "subscribing" process.
> b) In-Process invocation of the shared service: This follows the path 
> outlined in the BpelProcess.invokePartner() method, which bypasses the MEXs 
> and creates the MEXDAOs directly.  Again, we clone and push the message to 
> each "subscribing" process.
> During registration, services will now be associated with a list of processes 
> that provide it, which could potentially be of any size. The endpoint is 
> physically activated with the integration layer when the first process 
> registers on it, and is physically deactivated when the last process 
> de-registers from it. Care must be taken though, to remove any older versions 
> of processes in the server's map. 
> Also, in order to handle two-way pub-subs gracefully, we take the response 
> from one of the processes and return that to the end-consumer. Ideally, the 
> design-time tooling should take care to prevent pub-sub across any services 
> whose operations are not one-way.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to