In My previous post, I explained how to invoke synchronous SOA service or any other service from Oracle Service Bus over HTTP. But when we talk about specific to SOA then we have one another protocol (SOA-Direct) which we should use to invoke synchronous SOA service from Oracle Service Bus. Below are the advantages of SOA-Direct protocol.
· Invocation of any SOA binding component services through Java remote method invocation (RMI)
· WS-Addressing, including optional auto-generation of ReplyTo properties for asynchronous callbacks
· Identity propagation
· Transaction propagation
· Optimized RMI transport for invoking SOA services
· High availability and clustering support
· Failover and load balancing (not available for services in the Service Callback role
· Connection and application retries on errors
In this post, we will see how to invoke synchronous SOA service from Oracle service Bus using SOA-Direct protocol. To use the SOA-Direct protocol in OSB, First we need to make changes to our SOA service. We need to change default binding to direct binding. To do that simply drags the “Direct Binding” component from component palette. In create Direct Binding pop-up window, choose type as service and choose service wsdl file and click on ok.
Now wire the direct binding service reference to already existing wire so now we can invoke the service either by default binding or by direct binding. Your composite should look like below.
Now we will create OSB project from where we invoke above created SOA service using SOA Direct protocol. To invoke the service we need either WSDL URL of that service or WSDL file which we need to import to OSB project.
We can not access direct binding from EM console , so to access that service, open the below URL and select your service.
Copy the service endpoint which we will use in later stage.
Create a new OSB project and add required folder structure to it. Now click on resource folder and import SOA service resources to OSB by specifying the service URL which we copied in earlier step.
Create a business service which invokes the synchronous SOA service. Specify the business service name, choose WSDL as service Type and browse synchronous SOA service WSDL file.
Click on the WSDL file and choose SOA service port with version 1.2. Click on submit.
As mentioned in the starting we use SOA-Direct protocol to invoke synchronous SOA service, so choose “soa-direct” protocol from protocol drop down list. You see that EndPoint URI already added, this is taken from synchronous SOA service WSDL file. Click on next to go over next step.
Choose Synchronous client role as we call synchronous SOA service using SOA-Direct protocol.
Accept defaults and save the business service.
Now create the proxy service which route the message to above created business service. Click on proxy folder and choose “Proxy Service” from create resource drop down. Specify the proxy service name and Choose “Business service” as service type and browse above created business service. You can also choose “WSDL” as service type if your requester structure is different.
Accept default for proxy service and save it.
Open the message flow of the proxy service where you can see route node is added to it and inside route node message is routed to business service.
Activate the session and test the proxy service.