OSB retry BS conditionally

Hello

Here is my requirement

I have a JMS queue on which a PS will be done listening to some transformations of logging and a call to the business service that happens.

Thus in case of error, that I need to start again the BS so 1st attempt I managed to configure automatic using retry feature of BS (Retry Count, interval)

But 2nd try again in case the XML response in the end system has an error code then try again is a problem for me.

Any suggestions on this. The classification of messages and restore messages must also arrive in the queue JMS for which I used the unity of command and request proxy transactions and the intervention.

Please help with this requirement try again 2.

Queue JMS-> proxy JMS Service - BusinessService - EndSystem

(Ordering,                                                                      1. Retry in case of end system error (error response)

Failed Message                                                              2. Retry in case of a response that contains the error code / / / desc

should return to

Queue)

Ideally, the system should return the status code of transportation error (e.g. in the case of HTTP 500 status code) when you return a load XML containing the error, in which case if you selected Application errors try again to true in business, it will retry automatically for application errors as well.

But this is not possible, then only this:

Add a new local proxy between Proxy of JMS and business service. Thus, your flow becomes: queue JMS--> JMSProxy-->--> BusinessService LocalProxy

1. retry error (error response) endpoint = this will be supported if you set some properties to try again to business

2. retry in case of a response that contains the error code / / / desc = to achieve, in the local proxy, check the response of business, if the response contains the error code, and then do a response with failure if not a response successfully. In the JMS proxy, in the communication action that you use to call the LocalProxy, add routing options, then set Retry Count and interval stimulus. So if an XML containing an error state was received by local proxy of the business service, then proxy local will respond with failure and the JMS proxy will retry again by calling the local proxy.

Tags: Fusion Middleware

Similar Questions

  • problems of expresion xPath in OSB (ALSB)

    Hello

    I m working on a Proxy of OSB with a conditional branch, but I have a problem, in search of a few examples in the web on xPath, it is assumed that this xPath expression:

    * changes/iniciarCambio / / companiaTipo *.

    with this XML:

    * < iniciarCambio > *.
    * < cambios > *.
    * < ListaDeCambios > *.
    * <!-1 or more repetitions: - > *.
    * < Cambio > *.
    * < campoNombre > Cambio1 < / campoNombre > *.
    * < before valorAnterior > < / valorAnterior > *.
    * < después valorNuevo > < / valorNuevo > *.
    * < / Cambio > *.
    * < / ListaDeCambios > *.
    * < companiaId > 32 < / companiaId > *.
    * < companiaNombre > MMRedes < / companiaNombre > *.
    * < companiaTipo > service < / companiaTipo > *.
    * < / cambios > *.
    * < / iniciarCambio > *.

    Should return:

    Servicio

    But we run this in the Test tool and it returns this:

    * < companiaTipo > service < / companiaTipo > *.

    Some body has struggled with these questions? is there a way to do this on the xPath of OSB? or am I missing something?

    Tanx a lot in advance!

    Kind regards

    Gerardo J

    Try to set the following in the properties of conditional branch:

    XPath: ./iniciarCambio/cambios/companiaTipo/text)
    In Variable: body

    This should be the answer. If you excluded the the end of the XPath text() it returns the XML node:

    Servicio

    The addition of the piece of text() ensures you return the text in the node.

    Hope that helps.

    Chris

  • SOA BPEL 11g (11.1.1.3.0) - using retries encapsulated in the fault policy file

    Hello

    We use oracle SOA suite 11 g (11.1.1.3.0)

    I try to configure misconduct policy-file so that first it try 20 times every 20 seconds, then reties 20 times every 10 minutes, then try again 23 times per hour, then try again 24 times every 6 hours and if the fault persists, call an action of java to send an email and then go to human intervention. However, it seems that only the first retry is executed. The rest, those who are ignored and the action after the first attempt failed is the Action of Java. The fault policy is the following:

    <? XML version = "1.0" encoding = "UTF-8"? >
    < faultPolicies xmlns = "http://schemas.oracle.com/bpel/faultpolicy" >
    < faultPolicy version = '0.0.1' id = 'TransferResponsibilityRequestProcessFaults '.
    xmlns:env = "http://schemas.xmlsoap.org/soap/envelope/".
    xmlns: XS = "http://www.w3.org/2001/XMLSchema".
    xmlns = "http://schemas.oracle.com/bpel/faultpolicy."
    xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" >
    < condition >
    < faultName xmlns:freeze = "http://rom/cosmote/bpel/webservice/util" name = "gel: BpelWSFault" >
    < condition >
    < Ref action = "ora-human-intervention" / >
    < / condition >
    < / faultName >
    < faultName xmlns:retry = "http://rom/cosmote/bpel/webservice" name = "retry: PendingRequestsFault" >
    < condition >
    < Ref action = "ora - try again - 20 sec" / >
    < / condition >
    < / faultName >
    < / conditions >
    < action >
    < Code action = "ora - retry - 20s" >
    < retry >
    < retryCount > 10 < / retryCount >
    < retryInterval > 20 < / retryInterval >
    < retryFailureAction ref = "ora - try again - 10 min" / >
    < / re >
    < / action >
    < Code action = "ora - try again - 10 min" >
    < retry >
    < retryCount > 10 < / retryCount >
    < > 600 retryInterval < / retryInterval >
    < retryFailureAction ref = "ora - try again - 1 hour" / >
    < / re >
    < / action >
    < Code action = "ora - try again - 1 hour" >
    < retry >
    < > 23 retryCount < / retryCount >
    < > 3600 retryInterval < / retryInterval >
    < retryFailureAction ref = "ora - try again - 6 hour" / >
    < / re >
    < / action >
    < Code action = "ora - try again - 6 hour" >
    < retry >
    < retryCount > 24 < / retryCount >
    < > 21600 retryInterval < / retryInterval >
    < retryFailureAction ref = "ora-java" / >
    < / re >
    < / action >
    < Code action = 'ora-java' >
    < className = "gr.cosmote.bpel.util.JavaActionInCaseOfRetryFails" javaAction
    defaultAction = "ora-human-intervention" >
    < value returnValue = 'RETURNED' ref = 'ora-human-intervention' / >
    < / javaAction >
    < / action >
    < Code action = 'ora-human-intervention' >
    < humanIntervention / >
    < / action >
    < / actions >
    < / faultPolicy >
    < / faultPolicies >

    Is a new attempt with various intervals aren't made using the tag < exponentialBackoff / >?

    Thanks for any response.

    I had a request similar, though not as elaborate as yours. After that I failed to figure it out myself I filed a SR. Basically, you cannot restart a block to try again after the first run to avoid an infinite loop.

    If you need send the e-mail message after the time 23, why not just try again until the 23rd hour and send an email?

  • Conditional branching in OSB

    Hello

    I wan to use conditional branching in OSB for a WSDL WS. I am not able to use branching workers because the method names and the names of request message are different.

    I want to make conditional connections from operations or the request messages.

    For example, if the operation name and request messages are as below,

    Add, addRequest
    less, minusRequest

    What should give to the "Selected path' and 'variable' in the condtions?

    Thank you.

    Can paste you the Message section please, when you set the part of the request and response.
    The part should be based element and type based for operational connection not working.

    I did a test and its work properly, find the WSDL file, I used below:

    
    
      
        
          
          
            
              
              
            
          
         
    
          
            
              
              
            
          
         
        
      
    
      
        
      
       
        
      
      
        
      
    
        
        
      
    
      
    
        
          
          
        
    
        
          
          
        
      
    
      
        
        
          
          
            
          
          
            
          
        
    
        
          
          
            
          
          
            
          
        
      
    
      
        Test
        
          
        
      
    
    
  • A conditional branch Oracle OSB: check if the input message contains a string

    I get an XML message with 4 different message structures. I'm trying to read the message and then apply specific actions according to the type of message. So let's say that I get a 'get' conform to the"Schema" and 'MessageB' meets 'plan B '.

    In my proxy that reads the message, so I added in a conditional branch. In the branch, I select:

    Variable: body

    Selected XPath: fn:contains(.,_'MessageA>')

    The foregoing is not validated. Then I noticed that there may be that one condition of branch so it would not work. As I want to do something like:

    If fn:contains($body,_'MessageA>') then do Action

    if FN: Contains($Body, 'MessageB>') then do Action B

    Then I wanted to confirm if an IF statement inside a stadium is the only way to go or is it possible to make this conditional branching?

    Hi nrayan,.

    You can use fn:boolean to check if the node exists, for example fn:boolean($body/MessageA), it returns true if get is not a $body node, and false if...

    Kind regards

    Rui Lopes

  • Concern for Rollback transaction OSB (11.1.1.7)

    Hi all.

    I'm working on a usecase where service OSB dequeue the message AQAdapter (XA datasource) and routes to business (BPEL way).

    My problem is, whenever there is a BPEL downwards, the transaction get rollback in queue and try again for some many times.

    Then, I activated "Same transaction for answer" property on proxy and Manager of additional error at the level of the road with error recovery (or response I tried with failure).

    I am able to roll back the transaction and do try again when ever anything BPEL down, but the real problem is, it's a very new attempt BPEL is launched, even if the bpel is up and running, it's yet another attempt (able to see the BPEL instances).

    He only restores when it comes to active 'Same operation for the response', if I do not clear so there is no retry.

    I tried options like

    • adjustment of Qos in routing to only once.
    • respond successfully in the pipeline of response (when BPEL is upward).
    • allowing the transaction required so even operation for the answer.

    nothing has really changed anything

    Can someone help?

    (I know that there are similar posts on this topic in this forum, each of them tried, but they did not work)

    Thank you

    NReddy

    Problem has been resolved, could be useful to someone

    The solution is:

    • Enabled the transaction required on the proxy service property.
    • Published in BS the request pipeline
    • Used exactly once Options QoS routing
    • Add error handler with error recovery on the level of the stage (which is to be published in it)

    (even if I tried to trigger the error on the pipeline to answer, is not even trigger errors.) So, basically, he won't have to answer pipeline)

  • Errors in OSB with Eclipse

    Hello

    I use Eclipse for builte OSB process.

    In the Proxy service, I have 3 settings - each in a different 'assignment '.

    How do I create an error handling in the scene ?

    I want to check if the variable which suppose to be assignd to the setting - is not null.

    I saw that it is ... in condition, but how can I write the condition inside?

    Thanks in advance

    Elad

    Error Handing.jpg

  • Messages of Rollback in OSB


    Hi all

    Can someone suggest me the best way to move the messages from the queue JMS of error of queue JMS main OSB. I move messages from a main queue to the queue of the error call BS on failure. I want to restore their new main line after awhile.

    Thanks in advance.

    PK.

    Why go back you to the queue of the error? Use the limit of restitution and substitute delivery delay to retry messages. Otherwise if you want to move the messages from the queue to the main queue error write a PS who listens to the error queue and publishes the message in the main queue using BS.

  • startWeblogic in XXgcThreads takes precedence over OSB startManagedWeblogic

    Hi all

    I put the java options in the script for Admin configuration below startWeblogic. and also XXgcThreads in the startManagedWeblogic example script. but startWeblogic script configaration takes precedence over the configuration of startManagedWeblogic.

    My requirement is to define values of reference for Admin Server and managed server, but any value I put Admin Server taken by managed server as well. Please note that the admin and managed are on the same machine I, e have the same IP address.

    the management server located on another machine takes its value of configaration startManagedWeblogic. but the problem is only with the manageserver located on the same machine as the administration server.

    Thank you

    PR

    Hello

    When you set a property, you can specify a condition that verify the name of the server before they ask.

    In this way, you'll be able to set properties for a specific server only.

    Sample:

    @REM debug OSB

    If '% SERVER_NAME % 'is' osb_server')

    set JAVA_OPTIONS =-Xdebug - Xnoagent - Xrunjdwp: transport = dt_socket, address = 4000, server = y, suspend = n % JAVA_OPTIONS %

    )

    @REM debugging SOA

    If '% SERVER_NAME % 'is' soa_server')

    set JAVA_OPTIONS =-Xdebug - Xnoagent - Xrunjdwp: transport = dt_socket, address = 4010, server = y, suspend = n % JAVA_OPTIONS %

    )

    Kind regards

    Mathieu

  • Console of the OSB is throw the exception when I click Project Explorer

    Hello

    OSB Console, if I click on Explorer iam get the exception below.

    Exception console:*.
    Message, the server encountered an unexpected condition which prevented him from meeting the demand. *

    The same exception arises again when I click on the messages button as well.

    Thank you
    Vijay

    In my case one user was missing, he added and he solved the problem, now we are able to navigate without any problems.

    Thank you
    Vijay

  • OSB: How to send multiple requests to a proxy service.

    Hello

    I got a new requirement, I e, my power of Attorney must accept multiple applications of the source system and treat them sequentially. How to proceed in the proxy?

    Thanks in advance.

    As I am new to conditional branches,

    http://docs.Oracle.com/CD/E23943_01/admin.1111/e15867/proxy_messageflow.htm---article 21: 5

    http://docs.Oracle.com/CD/E17904_01/doc.1111/e15867/modelingmessageflow.htm#i1061669

    can u pls tell me how to do a loop for each incoming request?

    Use for each action
    http://abhinavgupta3.blogspot.in/2013/01/for-each-loop-in-OSB.html

    It could be useful!

    Kind regards
    Afonso Gupta

  • Problem resolution JNDI Factory Connection in OSB

    Hello

    I am facing a problem with the installation of JMS on my area of OSB. I have a cluster on my local Windows computer domain and another domain on Linux server.
    In both environments, the area is clustered with an admin and two servers managed running on the same machine.
    I created following artifacts in these two environments weblogic console:
    1. remove the stores - targeted for each managed server
    2 JMS Servers - targeted for each managed server
    3 JMS Module
    4 Connection Factory - targeted to the cluster
    5 distributed queue JMS - targeted a subdeployment that targets the JMS servers within the cluster

    In Windows, environment, Setup works very well and I am able to post messages on the queue (using a business service).
    In Linux environment however I am facing questions all by posting the message in the JMS queue (using a business service).
    I get the following error:
    [JMSPool:169803]JNDI lookup of the JMS connection factory TestCF failed: weblogic.jndi.internal.AdminModeAccessException: Unable to resolve 'TestCF'. Resolved ''; remaining name ''     
    I already checked according to:
    1. the folders are created in the correct location in both environments for persistent file stores.
    2. the JMS servers appear in working condition
    3. I am able to see the factory of connections and the queue in the JNDI tree for each server that is managed in the field

    The end point of service business is like this:
    jms://mymanagedhost:8001,mymanagedhost:9001/TestCF/TestQueue
    I also tried with the URI according to business service:
    jms:///TestCF/TestQueue
    One of the differences between environments (apart from the BONES of course) are Windows env I use Sun JDK while under Linux I use jRockit.

    No idea what could be causing the problem?

    This can occur because of an incompatibility of Weblogic and OSB versions as well. Make sure that you use a compatible version.
    Try also to stop all servers, cleaning of the tmp, cache and JMS store .dat files, then restarting.
    If this also does not work, then you can try to recreate the area, maybe something is damaged.

  • OSB Assign action

    Hello:

    I created a service in OSB, who has two business service and a proxy service.

    A business service use JCA binding that gets value of database and other business services publishes data to a queue.

    In my proxy service message stream, I use these two Business Service using the legend of service.

    Firstly the Service company with JCA binding is called and out of it will be like

    < get: SampleCollection xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:soap - env = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:get = "http://xmlns.oracle.com/pcbpel/adapter/db/top/Get_Sample" >
    < get: example >
    < get: type > test < / get: type >
    < get: status > success < / status of: >
    [email protected] < get: mailto > < / get: mailto >
    [email protected] < get: cc > < / get: cc >
    [email protected] < get: bcc > < / get: IAB >
    < / get: example >
    < / get: SampleCollection >

    And I assigned to a variable called DBOutput in ServiceCallout.

    Now to my second business service, some entry must be made by the release of my first business service, so I will try to use the below expression to obtain the values for the DBOutput variable and assign to a variable called TestingDBVariable

    $DBOutput / *: SampleCollection / *:Sample/*:mailto/text()

    But after testing the proxyservice, the 'TestingDBVariable' variable is not reflected, am I missing something here?

    OSB: 11.1.1.4

    Kind regards
    RK

    You should study it at two levels:
    1. check if your business service is indeed correctly the "mailto" field. To check this check that business directly from sbconsole. If the business service is not returning the mailto value then it may be because the table metadata changed after you have created the DB of JCA adapter. Try again to create and update of business service.
    2. If your business is indeed the "mailto" field there is a problem with the mapping of the field when filling out application for the second business service. Try $DBOutput / / *: mailto / text () once instead of XPath as a whole. Depending on how you have set the output of the first BS to the variable, one of the following conditions should be right Xpath:
    $DBOutput / *: SampleCollection / *:Sample/*:mailto/text()
    or
    $DBOutput / *: Sample / *:mailto/text()

  • OSB: Change of the SAML Assertions

    Hello

    I looked up the configuration that changes the default time to live headers SAML generated in OSB.

    I found that to change the name of the SAML sender, it is made by the oracle/wss10_saml20_token_client_policy in Enterprise Manager by changing the following:

    Property set: standard-security-properties
    Name: saml.issuer.name
    Value: www.oracle.com (change)

    I thought that there is also a set of properties that change SAML TTL. Found this document but no mention on the configuration of TTL

    http://docs.Oracle.com/CD/E28271_01/Web.1111/b32511/assertion_schema.htm#CHDEBGGF

    Pass, has concluded that it can be configured in the Mapping SAML Credential Provider. Ironically, I checked the WLS console and there was just no SAML Credential Provider mapping not created in the weblogic server as shown below.

    http://docs.Oracle.com/CD/E12840_01/WLS/docs103/secmanage/providers.html#SAML_cred

    I suspect it is configured elsewhere, but I could not find. Could someone please throw some lights?

    Here is the SAML sample header that I generated. The part that I would change is part TTL (NotOnOrAfter). Currently set by default at 5 minutes.

    < soapenv:Header >
    < soapenv:mustUnderstand wsse: Security = "1" xmlns:wsse = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" >
    < saml:Assertion Version = "2.0" ID = "SAML-Kr4iE8Cl6zzQKsiEjF64Hg22" IssueInstant = "2012-06 - 07 T 12: 01:02Z ' SAML =" urn: oasis: names: tc: SAML:2.0:assertion ">" "
    < saml:Issuer > www.oracle.com < / saml:Issuer >
    < saml:Subject >
    < saml:NameID Format = "urn: oasis: names: tc: SAML:1.1:nameid - format: unspecified" > CBA < / saml:NameID >
    < saml:SubjectConfirmation method = "urn: oasis: names: tc: SAML:2.0:cm:sender - vouches" / >
    < / saml:Subject >
    < saml:Conditions = NotBefore "" 2012-06 - 07 T 12: 01:02Z ' NotOnOrAfter = "2012-06 - 07 T 12: 06:02Z" / > "
    < saml:AuthnStatement AuthnInstant = "2012-06 - 07 T 12: 01:02Z" >
    < saml:AuthnContext >
    < saml:AuthnContextClassRef >
    urn: oasis: names: tc: SAML:2.0:ac:classes:Password
    < / saml:AuthnContextClassRef >
    < / saml:AuthnContext >
    < / saml:AuthnStatement >
    < / saml:Assertion >
    < / wsse: Security >
    < / soapenv:Header >

    Thank you.

    I think that he is setting "agent.expire.time".

    Look here:
    http://docs.Oracle.com/CD/E14571_01/Web.1111/b32511/managing.htm#BABHIFDD

    Published by: AigarsP on June 8, 2012 02:01

  • Restoring Messages in OSB

    I have a usecase as below-

    JMS. Q1 (nonxa)-[proxy service - post to a jms. Q2 (xa) - triggers an error]

    A proxy service receives the request from the queue of non - xa (Q1),
    then the proxy service to publish this message to another queue (Q2) through the active XA business service (I use the factory connections such as XA)
    then I get an error in the message stream.

    What I need is, I want to restore the message that I published "Q2" as soon as I get an error in mail flow.

    Can someone please help me to know if this is possible by the use of the range option, etc... ?

    Concerning
    Sesha

    Configure these:
    1 check the Transaction option even for the answer in the configuration of the Proxy Service.
    2 use QoS as exactly once in postback action which calls the business JMS service.
    3. using the factory of XA connections for connection between service and target queue JMS businsss
    4 ensure that the error System Error Handler. To achieve this, you need to make sure that the flow does not any action after the action on error to raise meet, you have set up in the stream of messages.

    Once you set up as above:
    1 message is deleted from the source queue as soon as Proxy OSB retrieves the message (since this is not enabled for XA)
    2 message will be published to the queue JMS target but not valid until the message flow is completed. It cannot restore in case there is an error after the action to publish.
    3. If the function of a condition a recovery error action is executed (or another error occurs in the stream) message will be restored from the target queue where the error reached the system-level error handler. This message will not present in the source queue and the target queue.

Maybe you are looking for