Dynamic orchestration using multiple proxy services

The project I am currently on is using ALSB for service orchestration. For a given orchestration, we would have one orchestration proxy (the control center), that synchronously calls a sequence of alsb proxy services.
Each proxy service in this second level fronts one or more business service calls to perform a specific operation ("Create Account", "Create User", etc.).
So far so good, all this can work just fine (and much of it is already working in production). The trick that I am trying to make happen currently, is to dynamically load the list of second-level proxies and loop through the list to trigger calls.
Loading a list of proxy paths/names is no problem, I have many options there. It's when I try to take that list and loop through it, calling each proxy on the list that I am stuck.
Unfortunately, it appears I could have three routing choices and none of them work:
1. Service Callouts only work with a static service name, not a dynamic one (so even if I had a for-each loop around a Service Callout action, it doesn't do me any good).
2. Dynamic Publish actions are asynchronous only
3. Dynamic Routing actions inside Route nodes work, except that only one can exist per proxy service.
Am I missing anything? Is there some way to get ALSB to accept dynamic synchronous invocation of multiple proxy services from one orchestration proxy service?
Meghan Pietila
Granite Consulting, Inc.
Minnesota

A way of Invoking a dynamically chosen proxy service (PS) synchronously could be the following.
Service Callout actions are synchronous, so ALSB will block in PS2 (PS=proxy service) when it does the invocation of PS1.
Assuming the following very simple scenario (I hope to have understood correctly your case):
OPS = orchestration proxy service
case1: OPS -> PS1 -> PS3 -> ...
case2: OPS -> PS1 -> PS2 -> ...
where each PSi calls one or more business service (I suppose that the business services called in each PSi are called in a predefined order), so what is changing from one case to another is the sequence of PSi to be called.
I've setup the following ALSB project:
- OPS proxy services
- PS1 .. PS4 proxy services
- a proxy called 'step'
- a xquery called 'routing'
The idea is to call, from OPS, another proxy (the 'step' proxy) in a synch way (service callout) passing the information of what proxy should be called dynamically.
In the 'step' proxy then I create the <route><service> XML fragment, for the Dynamic Route action. This <route><service> XML fragment will point to the configuration of yet another proxy service (PSx), that is the PSx that I want to call.
One limitation is that I assume that your OPS always calls for example 2 proxies which name is resolved dynamically.
About the xquery:
<routing>
<case name="1">
<node>PS1</node>
<node>PS3</node>
</case>
<case name="2">
<node>PS1</node>
<node>PS2</node>
</case>
</routing>
OPS performs the following steps:
- chooses what is the case: 1 or 2
- does 2 service callout to the proxy called 'step' passing each time the correct node to be called
$routing/case[@name=data($case)]/node[1]
$routing/case[@name=data($case)]/node[2]
In the 'step' proxy I do a dynamic publish to desidered PS:
<route xmlns="http://www.bea.com/wli/sb/context">
<service isProxy="true">{ $proxyToBeInvoked }</service>
</route>
where the proxyToBeInvoked variable is built from the node received by the caller.
I've used this approach in a solution currently under development but I've found some problems when I want to receive back in OPS the error raised by any PSi: I'm able to catch the error but I'm not able to receive back the detailed error like in an usual stack trace.
I hope that could be useful.
Regards
ferp

Similar Messages

  • [svn:bz-trunk] 20976: bug fix BLZ 602 IPv6 address isn' t properly resolved when used in dynamic url in the proxy service

    Revision: 20976
    Revision: 20976
    Author:   [email protected]
    Date:     2011-03-28 09:20:34 -0700 (Mon, 28 Mar 2011)
    Log Message:
    bug fix BLZ 602 IPv6 address isn't properly resolved when used in dynamic url in the proxy service
    checkintests pass
    Modified Paths:
        blazeds/trunk/modules/core/src/flex/messaging/messages/HTTPMessage.java

    Firstly, there's no such thing as Apache 9.3, there's Apache 1 (and subversions) and Apache 2 (and subversions). Your error message -
    Oracle-HTTP-Server/1.3.28Shows you're using Apache 1.3.28
    Secondly, I'm confused by your comment -
    I do not have Apache 9.3 or higher but I think oracle should offer this in its companion CDOracle does offer the Apache server, if you're saying you didn't get it from Oracle then where did your Apache server come from?
    Thirdly, I notice from your config file -
    ErrorLog "|E:\oracle\product\10.1.0\Companion\Apache\Apache\bin\rotatelogs logs/error_log 43200"That you're piping the logs through rotatelogs, are you sure the logfiles haven't just been renamed?

  • Extracting MIME attachment from email using OSB proxy service - email transport

    Hi,
    I'm reading email messages(multipart/mixed) with attachments(pdf, zip, xml and csv) from MS Exchange Server 2010 using OSB proxy service email transport.I need to save the attachments to a local folder and process one of the attachments, an XML file. Below is the proxy service config.
    Proxy Service Configuration (Test1/Proxy Services/GetEmail)
    Actions: 
    General Configuration
    Service Type   Messaging Service
    Message Type Configuration
    Request Message Type 
    Text     
    Response Message Type 
    None     
    Transport Configuration
    Protocol   email
    Endpoint URI   mailfrom:mailserver.net:143
    Get All Headers   No
    Headers   
    EMAIL Transport Configuration
    Email Protocol   imap
    Service Account   Test1/Proxy Services/email_acc
    Managed Server   WLS_OSB1
    Polling Interval   30
    Read Limit   2
    Pass By Reference   false
    Pass Attachments By Reference   false
    Post Read Action   move
    IMAP Move Folder   processed
    Attachments   archive
    Download Directory   \\soasup-stor01\Vacancy\test\download
    Archive Directory   \\soasup-stor01\Vacancy\test\archive
    Error Directory   \\soasup-stor01\Vacancy\test\error
    Request Encoding   iso-8859-1
    Message Handling Configuration
    Transaction Required   Disabled
    Same Transaction For Response   Disabled
    Content Streaming   Disabled
    The polling is working fine. I've encoded the attachment variable to Base64 using a java callout.$attachments/ctx:attachment/ctx:body/ctx:binary-content has been passed as the byte[] input to the java method and the response is captured in $encodedAttachment. I've created a SaveFile BS(file type) with Request Message Type = Binary and Response Message Type = None. I've tried replacing the node ./ctx:binary-content in body variable with encodedAttachment in the request action of the Publish action to call the BS. One file is getting created with contents of the entire email, MIME headers and boundary parts along with the base64 encoded attachments.
    <Contents from the created file>
    MIME-Version: 1.0
    Content-Type: multipart/related; boundary=MIME_Boundary;
      type="binary/octet-stream"
    --MIME_Boundary
    Content-Type: binary/octet-stream
    Content-Transfer-Encoding: 8bit
    Thanks &amp; Regards,
    Samyajit Talukdar
    : [email protected]
    -----Original Message-----
    From: Samyajit Talukdar
    Sent: 10 April 2015 14:11
    To: MS MLRP Returns
    Subject: FW: 22222
    Thanks &amp; Regards,
    Samyajit Talukdar
    : [email protected]
    --MIME_Boundary
    Content-Type: application/vnd.ms-excel; name="soainfra_v$session.xls"
    Content-Transfer-Encoding: base64
    Content-Description: soainfra_v$session.xls
    Content-Disposition: attachment; filename="soainfra_v$session.xls";
      size=25618; creation-date="Thu, 27 Nov 2014 09:56:35 GMT";
      modification-date="Fri, 10 Apr 2015 09:28:23 GMT"
    0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAA
    EAAAJgAAAAEAAAD+////AAAAAAAAAAD/////////////////////////////////////////////
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAA=
    --MIME_Boundary--
    If I put a delete action in the request to Publish action for SaveFile BS to delete the $attachments, the created file contains only the email body part and the attachment boundary part is missing.
    I've uploaded the OSB log with full trace enabled.
    How can I pass the  encodedAttachment to the BS for saving the files?
    Would iterating through the $aatachment/ctx:attachment give me the individual attachments for saving and processing, as there are separate binary-content refs in them?
    Any help to achieve my requirement is highly appreciated.
    Thanks in advance.

    Hi Manoj,
    Thanks for the quick reply to my query.
    The thing is, the link you have provided talks more from changing the business Service configurations i.e. the type of the service etc, but the concern is, that the Business Service is already Implemented and hence the change would not be an appropriate option for me.
    Please let me know, if any more information is required.
    Thanks & Regards,
    Anu

  • Multiple Proxy Services for single JMS endpoint

    Hi Forum,
    OSB Proxy services do not allow to have the same endpoint. I have defined 2 proxy services to look into one JMS queue. But it does not allow to do this.
    I want to fetch messages from the same queue by more than one Proxy (parallel execution to empty the queue faster). How can I do that?
    Thanks in advance..
    CK

    OSB/JMS by design are of little use here. For parallel execution to empty the queue faster we can
    1) use distributed Q in cluster and multiple proxies can process on the distributed Q.
    Manoj

  • Sending Message from Topic1 to Topic2 using OSB proxy service

    Hi all,
    I have created a proxy service which listens to a topic and a business service which writes to a topic.
    In proxy service, in stage i have used publish action to call the business service.
    Through Test console if i test and able to write the message to Topic2.But, when i created a message in Topic1 from weblogic console i'm not able to send the message to Topic2.
    Am i missing any configuration in Topic?
    Please help.
    Thanks

    Thanks vlad and anuj for your replies.
    proxy service is listening to topic when i insert the message from other business service.
    If i directly enter the message in Topic from weblogic console it's not picking up the message.
    What can be the reason for this??
    I have one more doubt. can we call a asynchronous soa composite (BPEL) from OSB.Service callout specifies that it cannot invoke a one way process.Which component can we use to call a asynchronous process?
    Thanks.
    Edited by: 947423 on Jul 23, 2012 3:52 AM

  • Error using tuxedo proxy services in a cluster

    We have successfully created proxy services using tuxedo transport in single server ALSB configurations.
    We are now installing ALSB 2.6 in a cluster, and we cannot make the service work. We have configured WTC in all the servers of the cluster.
    When we invoke the service, we get the following error in the log
    ####<Feb 19, 2007 4:32:00 PM CLST> <Error> <TuxedoTransport> <quintay> <ALSB1> <[ACTIVE] ExecuteThread: '7' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1171913520640> <BEA-381600> <Exception in TuxedoTask, java.lang.NullPointerException
    java.lang.NullPointerException
         at com.bea.wli.sb.transports.tuxedo.TuxedoTask.service(TuxedoTask.java:107)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:585)
         at weblogic.wtc.gwt.InboundEJBRequest.run(InboundEJBRequest.java:467)
         at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
         at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
    Any help or workaround? Is it possible to use tuxedo transport in a cluster configuration? Other problem we have seen is that the ALSB console only allows us to deploy the service in one local domain. How can I deploy the service in all the wtc servers?
    Thanks in advance
    Mauricio Palma

    Yes, BEA released a patch which solves partially the problem, now we can invoke the proxy service from tuxedo. There are some features missing (for example, we have to configure a separate proxy service in each node of the cluster, with different names, and then import every service from tuxedo, so we cannot do fault tolerance).
    I don't know if the patch is available, we had to create a support case with BEA.

  • How to forward message to two different queue using jms proxy service

    Hi all,
    In my project I need to listen to one jms queue then forward the messages to two different queue.
    Now I already made one proxy for listening to the queue then pass it to another queue using business service, It works.
    But how to forward the messages to two different queue in same flow process using one proxy and bs??
    or any other way?
    Really thanks in advance.
    Regards,
    Kahlil

    Hi,
    I have a MQ queue and i created a Proxy to listen to the queue , but i dont see any activity in OSB logs ..how do i knw if OSB proxy is polling that MQ ( mq is the transport protocol that i am using ) .
    Thanks
    Prarthana.

  • Which service type to use for Proxy Service

    I have a question regarding a Proxy service.
    I have a need for a local (transport local) Proxy service which is called by another proxy service.
    It is a synchronous service which has an XML incoming message and an XML outgoing message.
    I have the following questions:
    - Does it make a difference in performance when I choose a WSDL webservice or a Messaging service?
    - Which one would you choose and why?
    Thanx

    Does it make a difference in performance when I choose a WSDL webservice or a Messaging service?Hardly there would be any difference.
    Which one would you choose and why?I would choose XML type messaging type proxy because input and output are XML messages. I won't choose WSDL web-service because it should be used in case of SOAP packagaing only (in web-service context, to enable SOAP and WS support) to mock a web-service which has a WSDL (and a XSD) associated with it.
    Regards,
    Anuj

  • Fault handling through multiple proxy services

    I have a proxy service which calls another proxy service which then calls a business service. I really, really need the soap fault returned from the business service to get back to the initiating proxy service where this proxy can deal with it accordingly.
    Does anyone know how to do this?
    What I'm doing now:
    When the business service returns a soap fault, the proxy which called it receives a "BEA-382500" fault and I extract the soap fault from the ALSB $fault details:
    $fault/ctx:details/con:ReceivedFaultDetail This is all well and good but now I need to get this soap fault back to the first proxy service.
    According to ALSB documentation, if you reply with "failure", a 500 response code is returned to the calling process along with the contents of $body.
    I thought that I should be able to replace the $body with a soap fault and all would be well. That doesn't appear to work though. The calling proxy service receives the error as a "BEA-382502" (ALSB Service Callout action received an error response) error and the soap fault I replaced the $body with is returned in a CDATA section of the fault detail.
    I would think it would receive the soap fault the same as the proxy which received it from the business service.
    Am I doing something wrong? Has anyone been successful in something like this? Anyone got any tips that might point me in the right direction?
    Thanks for any help you can provide! :)
    Here's the actual fault that is caught in the initial proxy:
    <con:fault>
      <con:errorCode>BEA-382502</con:errorCode>
      <con:reason>ALSB Service Callout action received an error response</con:reason>
      <con:details>
        <con1:ErrorResponseDetail>
          <con1:detail>
            <![CDATA[<env:Fault xmlns:env="http://schemas.xmlsoap.org/soap/envelope">
              <faultactor/>
              <faultcode>soapenv:ERRORCODE1</faultcode>
              <faultstring>SOME MEAINGINGFUL ERROR MESSAGE</faultstring>
              <detail/>
            </env:Fault>]]>
          </con1:detail>
        </con1:ErrorResponseDetail>
      </con:details>
      <con:location>
        <con:node>Retreive CIM Accounts</con:node>
        <con:pipeline>Retreive CIM Accounts_request</con:pipeline>
        <con:stage>Get CIM Accounts</con:stage>
        <con:path>request-pipeline</con:path>
      </con:location>
    </con:fault>

    I agree with you completely. It should work. I just can't seem to get it to, though.
    Have you actually implemented something like this and had it function properly?
    I must admit, I'm taking a little different approach with building the contents of the body. It's probably more work than it needs to be. The end result should be the same as what you show below though.
    Here's the step's I'm taking:
    Assign this to a variable named "soapFault":
    <SOAP-ENV:Fault>
      <faultactor>{$fault/ctx:details/con:ReceivedFaultDetail/con:faultactor/text()}</faultactor>
      <faultcode>{$fault/ctx:details/con:ReceivedFaultDetail/con:faultcode/text()}</faultcode>
      <faultstring>{$fault/ctx:details/con:ReceivedFaultDetail/con:faultstring/text()}</faultstring>
      <detail>{$fault/ctx:details/con:ReceivedFaultDetail/con:detail/text()}</detail>
    </SOAP-ENV:Fault>Next, I replace the node contents of $body with the value of the soapFault variable.
    Finally, I reply with failure.
    The proxy service that gets this response recongnizes that an error occurs but the $fault variable (entire contents listed in my original post) has the soap fault I am returning stuffed into a CDATA section within the details instead of a ReceivedFaultDetail element as I would expect.
    Maybe I'm doing something wrong. If I am, I don't see what it could be. I've come to the conclusion that this just doesn't work. But, if you tell me you've actually got it working, I'll keep at it 'til I figure out where I screwed up.
    Thanks for your help!

  • Multiple proxy services Polling on same Table

    Hi All,
    I have 2 proxy services in OSB Polling on the same status column in orders table.Proxy1 polls on status 'N' ad Proxy 2 polls on status 'Z'.However I see that only one proxy service is polling the orders table.Even though there are records with status 'Z' in order table the Proxy2 process is not started.Kindly let me know how this can be resolved at the earliest.
    Thanks & Regards,
    Radha

    Hi All,
    In my case when the first polling process was running the 2nd polling process was not running.So I undeployed the 1st process and then the 2nd polling process started running.Now again i deployed process1 polling process and both the processes were running successfully.
    Thanks,
    Radha

  • Same Dynamic Filename used multiple times

    Hi all,
    In PI we would like to use the same dynamically created filename for multiple outputs of the same file in different locations.
    Is it possible to create the filename and save it in a Java container (for instance) that can be accessed by other mapping programs?
    Many thanks,
    Aldo

    >
    Aldo wrote:
    > Hi Sunil,
    >
    > I don't know if I'll be able to resolve my problem using these features......... but this for sure answers my question.  Thank you.!
    >
    > Best regards,
    >
    > Aldo
    Just to correct you here... Your requirement is to reuse the file name value in different mappings and NOT to reuse the udf code.
    The above blogs say's how to reuse the udf code in different mappings... So make sure what exactly you are looking for...
    UDF can only store the value at run time for a particular mapping... once execution is over the value will be lost.
    So as suggested by Sunil, you can store the file name into some table and then use the RFCLookup get it into your another mappings...

  • Consuming web service from ecc6.0:using webservice proxy -service call

    Hi,
    <u> On SYSTEM A</u>  
    AS POC we have generated web service from BAPI_FLIGHT_GETLIST from ECC6.0.
    0.we tested using web browser it was working fine.Then saved the WSDL to local pc
    <u>On SYSTEM B</u>
    1.I have created proxy using wsdl saved on local pc,
    2. Created RFC Destination Type "H" giving the web service path
    path : /sap/bc/srt/rfc/sap/ZBAPI_FLIGHT_GETLIST_WSD host & http port number.
    3. created Logical port using LPCONFIG adn provided the RFC destination.
    4. created service call from abap dynpro by using third option "web service proxy"
    then selected the proxy generated above.
    when i go to component controller context and see,
       exporting
          output
            FLIGHT_LIST
    Under FLIGHT_LIST i dont see the node Item then list of elements under that.
    How to use this in view as such i dont see output individual parameters??
    If i use function module and create service call
    then i could see properly like and could use it in view.
              CHANGING
                   FLIGHT_LIST
                        AIRLINEID
    Pointers will be suitable rewarded.
    Regards
    shekar chandra

    closed

  • Concurrency in urlconnection using multiple proxy server

    hi,
    I am working on a web application project and need to set up different proxy server for different organization. I know that System.getProperties() will make proxy server work in urlconnection. However, since users from different organization may access our website concurrently, I think System.getProperties() needs to be synchronized through whole setting-proxy-properties----making-urlconnection----removing-proxy-properties working flow. so it will affect scalability of our website,right? any better solutions?
    Thanks,
    Dean

    I just found a solution by subclassing sun package classes so that you can create url connection without affecting system.properties.
    URL url =
    new URL(null, urlSpec,
    new ConcurrentProxyHandler(proxyHost,proxyPort));
    //File: ConcurrentProxyHandler.java
    //override connection of sun.net.www.protocol.http.HttpURLConnection import java.io.PrintStream;
    import java.io.IOException;
    import java.net.URL;
    /** open an http input stream given a URL */
    public class ConcurrentProxyHttpURLConnection extends
    sun.net.www.protocol.http.HttpURLConnection {
    protected ConcurrentProxyHttpURLConnection(URL u,
    ConcurrentProxyHandler handler)
    throws IOException {
    super(u, handler);
    public void connect() throws IOException {
    if (connected) {
    return;
    try {
    http = new sun.net.www.http.HttpClient(url,
    ((ConcurrentProxyHandler)handler).getProxy(),
    ((ConcurrentProxyHandler)handler).getProxyPort());
    ps = (PrintStream)http.getOutputStream();
    } catch (IOException e) {
    throw e;
    // constructor to HTTP client calls openserver
    connected = true;
    //File: ConcurrentProxyHandler.java
    //override openConnection of sun.net.www.protocol.http.Handler and provide accessor for proxyHost
    //and proxyPort
    import java.io.IOException;
    import java.net.URL;
    public class ConcurrentProxyHandler extends sun.net.www.protocol.http.Handler {
    public ConcurrentProxyHandler (String proxy, int port) {
    super(proxy, port);
    protected java.net.URLConnection openConnection(URL u)
    throws IOException {
    return new ConcurrentProxyHttpURLConnection(u, this);
    protected String getProxy() {
    return proxy;
    protected int getProxyPort() {
    return proxyPort;

  • How to invoke a OSB Proxy Service from a Servlet??

    Hi!!
    I'm a begginer in OSB, and right now I have a OSB configuration in production mode. So, using the console test it's very easy to test (doh) my configuration. But now, I have to make a stress test and after read a lot of documentation I did'nt found the way to do that. So I'm trying to do it by using a Servlet, a doPost method in especific, but after a lot of time I can't invoke the proxy service.
    What is the right way to use a proxy service in production mode??
    How can I call it from my servlet??
    How can I send an xml (or any other object, file, text...) as a Request??
    Help please, thank you...
    Edited by: user12116998 on 18-mar-2010 12:40

    If you have your proxy service published as http/soap, then I recommend you to use SoapUI to test it. It can help you with stress test too.

  • Views on multiple ExtendProxy services in same cluster

    Hi,
    I would like to load-balance 2 sets of clients for the same cluster such that each client set is balanced separately. The motivation is that one set is quite small and the other is much larger so it can happen that the clients in the smaller set all end up connecting to proxies on one host, instead of proxies on different hosts.
    I can think of 3 ways fo doing this:
    1) Create a ExtendProxy service, with 2 sub options:
    a) is it possible to expose to have an ExtendProxy JVM expose multiple proxy services (ExtendProxyService1, ExtendProxyService2).
    b) Running 2 parallel sets of ExtendPorxy JVMs
    2) Moving the load balancing out fo the proxy service (to an F5 BigIp in my case) and setting up 2 pools withthe same members. That avoids touching the cluster at all.
    Any opinions?

    Am I to understand that you have two managed servers, and you have two admin servers, both managing the two managed servers?
    That doesn't make sense. You shouldn't be managing a managed server from more than one admin server. The admin server represents a single domain. You can't have a managed server that's in more than one domain.

Maybe you are looking for