ode-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kurt Westerfeld" <kwesterf...@novell.com>
Subject Re: ODE Invoking Multiple Implementations of Service Interface for One Inbound Message
Date Wed, 03 Nov 2010 17:52:29 GMT
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 <tvanlessen@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" <kwesterfeld@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

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message