Apparently, the .jpg of the setup wasn't accepted by the mailing list.
The diagram can be found here : http://www.boza.be/SetupDiagram.jpg
Tom
Tom schreef:
Hello,
First of all, thanx for the previous help Guillaume.
Now I've got some more questions. Our setup is as follows (see
attachment) :
There are (currently) 4 WebServices available. A BPEL process that is
running on the PXE needs to communicate with all four of the services.
Before any message from the BPEL process is passed to the appropriate
WS, it must pass first through a single logging-component and then via
a SAAJ-binding-component to the correct endpoint.
Currently, we could realize this setup as follows :
- The PXE-system.xml of the BPEL process exports 4 ports, each for one
external WebService.
- We had to create 4 logging components (as service assemblies in a
lightweight container), where the servicename and endpoint corresponds
to the exported ports of the pxe-system.xml
- Then each logging component forwards the message through a SAAJ
component to each WebService (resulting in 4 SAAJ components)
- The logging component removes the SOAP-header from the SOAP-messages
that are returned from the WebServices.
- All communication is synchronous : the client gets the resulting
answer in a synchronous way
Problems :
- We want to have only one logging component and one SAAJ-component
instead of 4 each
- We would like to replace the SAAJ-component with a SOAP-component
because the WebServices return SOAP answers.
- We would like to have a loose coupling to the WSDLs of the
WebServices (so we won't have to hard code the locations of the WSDLs)
Questions :
- What are the possibilities in ServiceMix to realize the scenario as
dynamically as possible? In the examples in ServiceMix, the links
between endpoints are always hard-coded. Is it possible to route more
dynamically? Are there code examples available of this?
- Should the PXE-system.xml export only one port (the one of the
logger component)? And must the messages then be content-based-routed
after they pass through
the logger? Or are there other possibilities?
- Which HTTP SOAP-component from the 3.0 snapshot could replace the
SAAJ-binding to remove and add the SOAP-headers and allow the
synchronous communication?
- Is it possible to realize this setup by registering the WSDLs of the
WebServices as endpoints in one SOAP-binding? In the previous answer,
you suggested to bundle two service units into a single service
assembly. Does this mean that it is possible to create a service unit
for every WSDL from the external WebServices and bundle them into a
SA? So in our case, we make 4 service units (for each of the
WebServices) and combine them into a service assembly together with
the HTTP SOAP-components to make 4 JBI-endpoints available for the
logging component?
- Can endpoints be created on-the-fly? If for example a UDDI registry
is available (and polled once in a while), can endpoints be created
and removed as more or less WebServices are registered in the UDDI? Or
are there any alternatives available in ServiceMix? And in this way,
can new service units be created and on-the-fly bundled into an
existing service assembly?
Thanks in advance,
Tom
Guillaume Nodet schreef:
Hi Tom,
A BPEL engine integrated in a JBI container should not directly invoke
external web services over http. It should go through an http binding
component.
In the pxe-system.xml, you can specify services to export (with the <exports
/> tag). It means that PXE will send a JBI MessageExchange to the specified
JBI endpoint to handle the invocation. The binding informations on the wsdl
are not used by PXE. To route your request to the url you want, you have to
use a lightweight http or soap binding (see http://servicemix.org/HTTP),
specifying the informations you need (service and endpoint name, url).
You can also use the servicemix-http component to deploy a service unit
(using a wsdl), which would use the binding informations to retrieve the url
of the service and bundle the two service units in a single service
assembly.
Cheers,
Guillaume Nodet
On 2/27/06, Tom <[EMAIL PROTECTED]> wrote:
Hello all,
I'm relatively new to ServiceMix. I am trying to get the following
working :
1. A BPEL process (that is deployed on the PXE-engine in ServiceMix)
generates result messages and these should be routed to an external Java
WebService (later multiple webservices depending on the resulting
message). Normally, based on the binding in the WSDL from the extrenal
webservice, the message would be routed from the JBI-endpoint (of the
BPELprocess deployed in ServiceMix) to the URL specified in this
binding. How is it possible to let the routing first go to the
http-binding component and then to the URL? Is there a dynamic solution
or does it have to be hard-coded?
2. Additional, when multiple external webservices must be invoked : When
the messages pass from the BPEL process through the http-binding
component, how can this http-binding component determine which external
webservice to invoke? Should the binding component act as a
content-based router or are there alternatives?
Thanks in advance.
Greetz,
Tom