webMethods

webMethods

Join this online group to communicate across IBM product users and experts by sharing advice and best practices with peers and staying up to date regarding product enhancements.

 View Only
Expand all | Collapse all

Throwing an Error To Exit REPEAT

  • 1.  Throwing an Error To Exit REPEAT

    Posted Wed October 02, 2002 04:25 PM

    Would it be bad design to purposefully throw an error within a repeat to force an exit?

    I am trying to simulate a Java WHILE loop within Developer without using Java services and thought that having a REPEAT ON SUCCESS would achieve that goal. When the condition is met, the error is thrown and the REPEAT is exited.

    Thanks for your input.


    #Flow-and-Java-services
    #webMethods
    #Integration-Server-and-ESB


  • 2.  RE: Throwing an Error To Exit REPEAT

    Posted Wed October 02, 2002 04:32 PM

    Of course, I could just use EXIT and signal FAILURE – the simple approach!


    #webMethods
    #Integration-Server-and-ESB
    #Flow-and-Java-services


  • 3.  RE: Throwing an Error To Exit REPEAT

    Posted Wed October 02, 2002 04:35 PM

    What I usually do is this:

    Label the repeat step 
    Check the condition and if it is met: 
    Use a Exit flow step and in the from box type in the label I gave the repeat step. 
    

    This has worked very good for me. See if it’s what you are looking for.


    #Flow-and-Java-services
    #Integration-Server-and-ESB
    #webMethods


  • 4.  RE: Throwing an Error To Exit REPEAT

    Posted Wed October 02, 2002 04:38 PM

    One note to add to my preview post, my way assumes you want to continue with your flow process and not exit the service completely


    #Flow-and-Java-services
    #webMethods
    #Integration-Server-and-ESB


  • 5.  RE: Throwing an Error To Exit REPEAT

    Posted Wed October 02, 2002 05:05 PM

    Sometimes you do have to throw and error instead of using the Exit from loop/parent step.

    If your exit point is enclosed in a try-catch sequence pattern and you use the Exit from loop in the try section the getLastError step in the catch section does not give the details of the error message. If you throw and Exception instead it will show up in the catch section. This is useful for a error trapping wrapper.


    #webMethods
    #Flow-and-Java-services
    #Integration-Server-and-ESB


  • 6.  RE: Throwing an Error To Exit REPEAT

    Posted Thu October 03, 2002 12:19 AM

    In fact, I also have quite similar problem…

    we enumerate simple try catch blocks using sequences in flow services… If I want to throw an error in a child flow, so that the parent catches it and do error processing, I have to use “EXIT with signal FAILURE” option. This way the parent flow catches the child exception, and generates logging/email etc.

    The only PROBLEM being any flow exits with signal FAILURE generates an email as if it was a service exception. The email goes to the person specified in watt.server.serviceMail, which is what I don’t want.

    any way to circumvent it ?? A way, by which I can still exit from child flow as if an exception was thrown, and if such is caught in parent flow, doesn’t generate those annoying emails!!

    Regards,
    Saurabh.


    #webMethods
    #Flow-and-Java-services
    #Integration-Server-and-ESB


  • 7.  RE: Throwing an Error To Exit REPEAT

    Posted Thu October 03, 2002 03:30 PM

    Saurabh,

    If you dont want your service to fail but want the parent to be notified of the error you will have to use some kind of error message string. This can have both expected and unexpected error messages trapped and passed to the parent flow.

    I use a java service called throwError which just throws a ServiceException constructed from an error message string. In the following code snippet an expected error from step 1.1.5 will be caught in the 1.2 SEQUENCE block and any unexpected errors in the 1.1 SEQUENCE block would also be caught in the 1.2 SEQUENCE block. This situation is ideal candidate for a throwError kind of service. If I use an EXIT from $parent with failure step at 1.1.5.1 control does go to 1.2 but getLastError does not retrieve the error message.

    1. SEQUENCE (Exit on Success)
      1.1 SEQUENCE (Exit on Failure)
      1.1.1 Your flow steps here
      1.1.2 …
      1.1.3 …
      1.1.4…
      1.1.5 BRANCH (check for error condition)
      1.1.5.1 throwError
      1.1.6 More flow steps
      1.1.7 …
      1.1.8 …
      1.2 SEQUENCE
      1.2.1 getLastError
      1.2.2 Assign lastError/error to a message string
      1.2.3 Exit with success

    #webMethods
    #Integration-Server-and-ESB
    #Flow-and-Java-services


  • 8.  RE: Throwing an Error To Exit REPEAT

    Posted Fri October 04, 2002 08:42 PM

    Thanks Rupinder, but this is not what I was aiming to solve.

    Let me explain my problem more clearly !!

    Lets assume there are 3 flow services : Parent1 invokes Child1, which in turn invokes Child2.

    Here is the brief structure of how these flow services look likes :

    Parent1

    Flow Overview

        1    SEQUENCE  
    1.1    MAIN: SEQUENCE  
    1.11    INVOKE WriteToNohup  
    1.12    INVOKE Child1  
    1.13    INVOKE WriteToNohup  
    1.2    SEQUENCE  
    1.21    INVOKE getLastError  
    1.22    INVOKE doErrorLogging  
    1.23    EXIT '$flow'  
    

    Child1

    Flow Overview

        1    SEQUENCE  
    1.1    MAIN: SEQUENCE  
    1.11    INVOKE WriteToNohup  
    1.12    INVOKE Child2  
    1.13    INVOKE WriteToNohup  
    1.2    SEQUENCE  
    1.21    INVOKE getLastError  
    1.22    INVOKE WriteToNohup  
    1.23    EXIT '$flow'  
    

    Child2

    Flow Overview

        1    SEQUENCE  
    1.1    MAIN: SEQUENCE  
    1.11    INVOKE WriteToNohup  
    1.12    INVOKE throwNullPointerException  
    1.2    SEQUENCE  
    1.21    INVOKE WriteToNohup  
    1.22    EXIT '$flow'  
    

    If I dont do a Exit “$flow” with Signal Failure, Child1 will never know if Child2 failed or not !!

    And, if I use Exit “$flow” with Signal Failure, it will generate extra set of emails even though I do errorHandling in Parent1.

    Hence, the search of a better solution error handling framework continues !!

    Hope I am more clear this time in explaining.

    Any suggestions or solutions are welcome !!

    Regards,
    Saurabh.


    #Flow-and-Java-services
    #webMethods
    #Integration-Server-and-ESB


  • 9.  RE: Throwing an Error To Exit REPEAT

    Posted Fri October 04, 2002 09:01 PM

    Why dont you use return status variables instead of Exit with failure. For example in Child1 and Child2 you can replace the Exit steps with a MAP that just assigns the lastError/error to an errorMessage variable. In the next step exit from flow with success.

    In the calling service just call the child and then check for the errorMessage variable. If it exists you know that there was a failure and you can take any actions. And you avoided an error email being generated as you did not exit with a failure.

    So Child1 and Child2 will look like this :

    Child1

    Flow Overview

    1 SEQUENCE
    1.1 MAIN: SEQUENCE
    1.11 INVOKE WriteToNohup
    1.12 INVOKE Child2
    1.13 BRANCH
    1.13.1 %errorMessage% != $null: throwError
    1.14 INVOKE WriteToNohup
    1.2 SEQUENCE
    1.21 INVOKE getLastError
    1.22 INVOKE WriteToNohup
    1.23 MAP lastError/error to errorMessage and exit with success

    Child2

    Flow Overview

    1 SEQUENCE
    1.1 MAIN: SEQUENCE
    1.11 INVOKE WriteToNohup
    1.12 INVOKE throwNullPointerException
    1.2 SEQUENCE
    1.21 INVOKE getLastError
    1.21 INVOKE WriteToNohup
    1.22 MAP lastError/error to errorMessage and exit with success


    #Flow-and-Java-services
    #Integration-Server-and-ESB
    #webMethods


  • 10.  RE: Throwing an Error To Exit REPEAT

    Posted Fri October 04, 2002 10:26 PM

    Thanks for the quick response.

    Yes, you are right, and I dont want it that way !!

    I mean if child1 say invokes child2;3;4;5 , then I have to do branch after each invokes to the childs. Which I think is lot of overhead for resources/developer.

    I guess, I am looking for a another way to throw an error in a flow service apart from “exit $flow with signal Failure” (which generates those extra emails)

    The only problem to overcome is that webMethods doesnt allow java services to throw Exceptions. (apart from Server.throwError way which is no useful to catch or nest exceptions in our scenerio)

    Hence, I guess, I am still looking for a better error Handling framework.

    Regards,
    Saurabh.


    #webMethods
    #Flow-and-Java-services
    #Integration-Server-and-ESB