Monday, December 19, 2011

Oracle SOA Suite 11g - Multiple partner link endpoint locations to enable failover in composite.

Oracle SOA Suite 11g - Multiple partner link endpoint locations to enable failover in composite

Oracle SOA Suite provides the support for specifying multiple partner link endpoint locations. This capability is useful for failover purposes if the first endpoint is down.


The endpointURI property of the Composite.xml will help us to override the endpoint location specified in the default WSDL as shown below.

<reference name="HelloworldService"
ui:wsdlLocation="http://localhost:8000/soa-infra/services/default/HelloWorld/Helloworld.wsdl">
<interface.wsdl interface="http://xmlns.oracle.com/Failover/HelloWorld/Helloworld#wsdl.interface(Helloworld)"
callbackInterface="http://xmlns.oracle.com/Failover/HelloWorld/Helloworld#wsdl.interface(HelloworldCallback)"/>
<binding.ws port="http://xmlns.oracle.com/Failover/HelloWorld/Helloworld#wsdl.endpoint(helloworld_client_ep/Helloworld_pt)"
location="http://localhost:8000/soa-infra/services/default/HelloWorld/helloworld_client_ep?WSDL"
soapVersion="1.1">
<property name="endpointURI">http://localhost:8002/soa-infra/services/MEDIATOR/HelloWorld/helloworld_client_ep</property>
<property name="endpointURI">http://localhost:8002/soa-infra/services/UTILITIES/HelloWorld/helloworld_client_ep</property>
<property name="weblogic.wsee.wsat.transaction.flowOption"
type="xs:string" many="false">WSDLDriven</property>
</binding.ws>
<callback>
<binding.ws port="http://xmlns.oracle.com/Failover/HelloWorld/Helloworld#wsdl.endpoint(helloworld_client_ep/HelloworldCallback_pt)"/>
</callback>
</reference>

In runtime the location specified in the endpointURI at the end will be invoked first and if it fails it will try to invoke the previous endpointURI specified and so on; if all the endpointURI invocations are failed, the location(default) specified in the WSDL file will be invoked.
endpointURI’s:



Default location:



15 comments:

  1. Super post! Just like your blog professionalism! Keep up the good work.

    ReplyDelete
  2. Is this also valid for SOA Suite 11.1.1.5.0 ? In my case SOA Suite is only using the last endpointURI in the configuration and if that one fails it tries the url in the WSDL file

    ReplyDelete
    Replies
    1. What if i want to change the endpoint after deployment ??

      Delete
  3. You can refer the below blog to change the endpoint dynamically through a EM console.

    http://albinoraclesoa.blogspot.com/2012/01/oracle-soa-11g-changing-service.html

    Even you can implement the Dynamic Partner link approach to change the endpoint dynamically after the deployment.

    ReplyDelete
  4. Hi Albin,

    I set endpointURI like this tutorial,I also set from Enterprise Manager (http://albinoraclesoa.blogspot.com/2012/01/oracle-soa-11g-changing-service.html).But sometimes when I invoke the service I get the following message :

    unable to access the following endpoint: http://www.example.com,but this does not exist in my project.
    How can I do to take always the address Location from the endpointURI property from INVOKE ACTIVITY as default address?
    Sorry for my english.

    Thanks in advance!

    FALCO

    ReplyDelete
  5. If u are not set any endpoints from em console or through java then the endpoint configured in the invoke activity will be considered.

    There is no possibility of getting error for http://www.example.com without configuring the same in the composite or in the em console.

    Cross verify whether you have configure http://www.example.com in your project.

    Regards
    Albin I

    ReplyDelete
  6. Can we have multiple end point of a bpel composite and all working without failiver ?

    ReplyDelete
  7. Is there a way to disable this behavior and force the URI specified in the plan.xml only?

    Regards.

    ReplyDelete
    Replies
    1. I have the same question! I just want to call the URL in Composite.xml. If it fails, let it fail, do not call the default address in WSDL, how do I do that?

      Delete
  8. My requirement is to create a WEBSERVICES based on .bpel file .and i want to call that froom meditor component.For example.

    I have abcProcess.bpel file.I want to configure a webservice by providing the URL

    http://../soa-infra/services/default/abcBPEL.bpel , in my WSDL URL field.Unfortunately i could not find the .bpel file path in EM Console.Would you please let me know how can i find the >bpel files in EM Console.

    Thanks in Advance ,Nihar

    ReplyDelete
  9. U cant directly invoke the BPEL file as Web service, you have to expose the same as webservice through WSDL.

    Create a new Composite project with this BPEL file and deploy the same to the server so that you can invoke as a webservice.

    Regards
    Albin I

    ReplyDelete
  10. Well job, appreciated keep updates, thanks.

    ReplyDelete
  11. Hi Albin,

    Is it possible to invoke a webservice from a soa composite in a round robin fashion?
    For eg: Can a BPEL invoke another BPEL in a clustered environment in a round robin fashion?

    Regards,
    Amit

    ReplyDelete
  12. Hi,
    Thanks for this tutorial, I am facing one problem at the time of calling a web service,

    Suppose my web service is running over a cluster port & IP x.x.x.x:8888/XYZ/abx?wsdl

    If i am using this web service in oracle soa with that IP & port i am able to got response from web service, Same service is exposed over a domain name like abc.com which is SSL based so with that domain name my web service URL is something like.
    https://abc.com/XYZ/abx?wsdl
    When i am trying to calling this web service i am not able to got any response from web service.

    I already imported the certificate in the trust store and had been cross verified that certificate is exist in the trust store.


    I had tried with all the way but the web service is not giving response.


    I am stuck in my development please help me.

    Thanks!

    ReplyDelete
  13. Hi Albin,

    Great post!!

    Have a question:

    We are facing a problem while connecting from SalesCloud to SOA, and I just wanted to check if you have had this problem before.



    SalesCloud can only connect over https to SOA. For that to work, we have a reverse proxy configured which takes requests from SalesCloud over https, and delivers them to the soa environment over http. We have checked that part and SalesCloud is able to successfully import the WSDL with https:// endpoint.



    Now, The soap address in the SOA composite WSDL which I have deployed on the SOA server looks like this:







    Now, SalesCloud is not able to resolve the http in this location, we are assuming it needs https.



    For this, I tried changing the "FrontEnd host" and "Frontend HTTPS Port" to and respectively (In Admin console->Servers->SOA server->Protocols->HTTP).



    Now, when I deploy my composite, the soap address in the composite WSDL looks like this:







    However, I can't get https in place of http, which was my primary concern.



    Any suggestions?


    Thanks

    ReplyDelete