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 <[email protected]> 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" <[email protected]> 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

Reply via email to