You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ode.apache.org by Kurt Westerfeld <kw...@novell.com> on 2010/11/03 15:36:18 UTC
Re: ODE Invoking Multiple Implementations of Service Interface
for One Inbound Message
Bump. Any ideas/thoughts?
>>> "Kurt Westerfeld" <kw...@novell.com> 10/29/2010 4:43 PM >>>
OK, subject says it all. Why does ODE call all implementing processes of a given inbound message when the message is specifically targeted to a single endpoint?
It actually goes to a fair amount of trouble to do this, and now our project needs to have multiple implementations of a given service interface and use dynamic EPR to route to desired endpoints. In our scenario, we cannot use bpel because a single message inbound to ODE becomes delegated to multiple implementations--regardless of their endpoint designation.
I can see it starts here:
BpelEngineImpl, line 349, method: List<BpelProcess> route():
* Route to a process using the service id. Note, that we do not need the endpoint name here, we are assuming that two processes
* would not be registered under the same service qname but different endpoint.
So why? There's no way for me to workaround this as far as I can see. I think the only thing I can do is change the service name for each endpoint.
Re: ODE Invoking Multiple Implementations of Service Interface
for One Inbound Message
Posted by Kurt Westerfeld <kw...@novell.com>.
I believe it's NOT in the JBI bridging, that basically an inbound message doesn't descriminate the endpoint name. It seems to be a feature of BpelEngineImpl within bpel-runtime:
List<BpelProcess> route(QName service, Message request) {
This method doesn't take and endpoint name, such that the JBI calls (not sure about axis) don't even get a shot at finding the endpoint...it just gets the list of all implementers of that service name. Yet, a JBI message is targeted at an endpoint, but there's no way to descriminate.
Let's say you have 3 bpel processes, all of which implement the same interface, have the same service name, and different endpoint (port) names in deploy.xml. Sending a message to one of these bpel processes results in all 3 getting the message.
Internally to ODE, the process-to-process (p2p) communication has the same issue. If there's two bpel processes with two different endpoints, but the same service name, any message to either party will get sent to both. And this seems deliberate....my question is why and is there a way to disable that. I guess by looking at the sourcecode I see there isn't, but it did cause me fits for a while with recursive bpel invocations. :)
>>> Tammo van Lessen <tv...@gmail.com> 11/3/2010 1:32 PM >>>
Hi Kurt,
I'm not sure if I can follow. Are you talking about ODE in general or
about it's JBI deployment in particular? I think the ODE terminology of
a service is somewhat different. Could you please give an example of
what you mean by "Why does ODE call all implementing processes of a
given inbound message when the message is specifically targeted to a
single endpoint?"
Thanks,
Tammo
On 03.11.2010 15:36, Kurt Westerfeld wrote:
> Bump. Any ideas/thoughts?
>
>>>> "Kurt Westerfeld" <kw...@novell.com> 10/29/2010 4:43 PM >>>
> OK, subject says it all. Why does ODE call all implementing processes of a given inbound message when the message is specifically targeted to a single endpoint?
>
> It actually goes to a fair amount of trouble to do this, and now our project needs to have multiple implementations of a given service interface and use dynamic EPR to route to desired endpoints. In our scenario, we cannot use bpel because a single message inbound to ODE becomes delegated to multiple implementations--regardless of their endpoint designation.
>
> I can see it starts here:
>
> BpelEngineImpl, line 349, method: List<BpelProcess> route():
>
> * Route to a process using the service id. Note, that we do not need the endpoint name here, we are assuming that two processes
> * would not be registered under the same service qname but different endpoint.
> So why? There's no way for me to workaround this as far as I can see. I think the only thing I can do is change the service name for each endpoint.
>
--
Tammo van Lessen - http://www.taval.de
Re: ODE Invoking Multiple Implementations of Service Interface for
One Inbound Message
Posted by Tammo van Lessen <tv...@gmail.com>.
Hi Kurt,
I'm not sure if I can follow. Are you talking about ODE in general or
about it's JBI deployment in particular? I think the ODE terminology of
a service is somewhat different. Could you please give an example of
what you mean by "Why does ODE call all implementing processes of a
given inbound message when the message is specifically targeted to a
single endpoint?"
Thanks,
Tammo
On 03.11.2010 15:36, Kurt Westerfeld wrote:
> Bump. Any ideas/thoughts?
>
>>>> "Kurt Westerfeld" <kw...@novell.com> 10/29/2010 4:43 PM >>>
> OK, subject says it all. Why does ODE call all implementing processes of a given inbound message when the message is specifically targeted to a single endpoint?
>
> It actually goes to a fair amount of trouble to do this, and now our project needs to have multiple implementations of a given service interface and use dynamic EPR to route to desired endpoints. In our scenario, we cannot use bpel because a single message inbound to ODE becomes delegated to multiple implementations--regardless of their endpoint designation.
>
> I can see it starts here:
>
> BpelEngineImpl, line 349, method: List<BpelProcess> route():
>
> * Route to a process using the service id. Note, that we do not need the endpoint name here, we are assuming that two processes
> * would not be registered under the same service qname but different endpoint.
> So why? There's no way for me to workaround this as far as I can see. I think the only thing I can do is change the service name for each endpoint.
>
--
Tammo van Lessen - http://www.taval.de