How would you solve the following Synch Async scenario?

Hi,
I have the following use case and would like to know thoughts from the community on how to solve it -
There is a web based portal sending a create order request to ESB and the ESB does some message processing and passes it to a CRM to complete the order processing and generate a order id to be sent back to the portal user.
Non Functional Requirements -
1) Reliability
2) Performance in terms of response time to the user.
Issues -
1) The web service exposed by CRM takes a long time to process the request and it is not acceptable that the Portal end user waits for that long to get the Order ID back..
2) If we make a SOAP/HTTP call from Portal --> ESB and then another SOAP/HTTP call from ESB ---> CRM then the reliability is compromised.
Solution -
The solution that we are proposing is as follows -
1) Make a SOAP/HTTP call from Portal to ESB and then put the message in a JMS Queue which will persist it. This will provide reliability and QOS.
2) Generate a random unique number (which will act as the order id for the user) inside the ESB and send it back to the user immediately after persisting the message in the queue. Also persist this interim order id in a database.
3) Pick the message from the queue using MDB or Proxy service (specific to Oracle Service Bus because that is what we have as an ESB) and send the message to CRM.
4) CRM takes its own time to process the request from MDB and sends the response (actual OrderID in CRM) which is then persisted corresponding to the row in step#2. Thus for future search by the user we can use this mapping to get the actual order details from CRM.
I do not see this as a scenario which is unique or unusual, where an Asynch request needs to made to look as synch to the user. But the solution we are proposing seems to be crude to me and with loopholes (like how to handle scenarios where CRM returns an error etc.) which would require lot of effort to be fixed.
Questions -
1) What is your opinion about the solution and suggestions about a better/cleaner way to implement it?
2) Is there any standard approach to solve such kind of issue without creating so much of complexity (where we have to write code to keep the mapping and take care of all other issues)?
3) Is there any pattern that can help solve this problem?
4) Have you ever faced this issue and how did you solve it?
Regards
Ananya

Hi Ananya,
If its not required to give Order ID to Portal user immediately, you can update Portal with Order ID in async manner.
What I propose is,
1. Let Portal call in Async manner, thread is released. (JMS can be used as well to improve reliability.)
2. CRM takes the request and responds with order id or an error, calls webservice of AIA.
3. AIA's WS then update Portal with Order ID or error in proper format.
Thanks,
Manish

Similar Messages

  • How would you capture the stdout of Runtime.getRuntime().exec())?

    How would you capture the stdout of Runtime.getRuntime().exec())?
    Say you wanted to execute PKZIP25.exe from java using Runtime.getRuntime().exec(). How would you capture the output of PKZIP25 (the console IO) in a file so you could check the results?
    Thanks
    Bill Blalock

    Thanks.
    Could you explain a little more?
    The program I am calling seems to be executing, as far as Java is concerned, but nothing happens. I imagine I have made mistakes in calling it but can't see the output to the console.
    Should I use Runtime.getRuntime().exec() or Runtime.exec() for something like this?
    I appreciate the help!
    Bill B.

  • How would you change the state to the base state?

    How would you change the state to the base state? Its not
    letting me do something like:
    currentState='<Base State>';

    Sorry about the vagueness of that last reply :)
    What I have done now in my code is this:
    viewstack1.addChildAt(loginCanvas,0);
    toggle.selectedIndex = 0;
    However nothing happens at this line of code:
    toggle.selectedIndex = 0;
    but this works:
    toggle.selectedIndex = 1; or ...
    toggle.selectedIndex = 2;
    toggle.selectedIndex = 3;
    toggle.selectedIndex = 4;
    toggle.selectedIndex = 5;
    toggle.selectedIndex = 6;
    The strange thing is that if I have a button on the screen:
    <mx:Button x="10" y="3" label="Button"
    click="toggle.selectedIndex =0"/>
    and the user clicks it the toggle.selectedIndex = 0; works.
    I'm stumped, any ideas?

  • I recently switched from an iPhone to an Android phone. I cannot receive text messages because Apple will not "release" my number from iMessage. I see others have had the same issue. How did you solve the problem, if you did?

    I recently switched from an iPhone to an Android phone. I cannot receive text messages because Apple will not "release" my number from iMessage. I see others have had the same issue. How did you solve the problem, if you did?

    This tech note addresses your problem: iOS: Deactivating iMessage

  • How would you rate the iTouch as a gaming device?

    On a scale of 1-10, how would you rate the iTouch as a gaming device?

    7, if the game is well designed for iPod touch is very good!
    let the last three pionts be left to the iPad

  • How would you change the default template?

    How would you change the default template?

    Hi,
    what do you mean by changing the default template? Do you want to change the standard BEx web template for all web applications? This can and should be done with transaction SPRO, there you can change it to your own (maybe by copying the standard template and fitting it to your needs).
    With regards,
    Daniel

  • How would you describe the function of 'Camera roll'?

    How would you describe the function of 'Camera roll'?

    ITs the folder that stores pictures taken with the camera or downloaded from the web.   Or stored from Apps running on the iPad.
    Basically any picture or image created on the iPad will reside in there.

  • How would you optimize the dimensions?

    How would you optimize the dimensions?

    HI Vsu,
    The basic way of optmizing the Dimensions would be to have similar kind of objects into that dimensions. For example having the Customer related infoobjects into the customer dimension will obviously help in optimized data retrieval performance.
    There could be some scenarious where U can optimize the Dimension by dividing the Dimension Data into Line Item Dimension. By this way U would divide the load of data onto the Dimension and the cube, hence again optimizing the performance.
    Hope this helps U. U can be graceful by assinging points.
    Regards,
    Syed.

  • How would you determine the total ram used by applets?

    hi guys;
    I have 2 applets.
    One applet runs in a browswer. - in the microsoft jvm.
    Another applet on another browser (or another page) - in the sun plugin.
    How would you guys determine the total RAM (not just heap memory) used by these applets.
    my strategy would be to open up the browser. and look at the memory next to that internet explorer process. Then I would open up another browser with applet and see total memory taken. Then I would subtract to determine the difference.
    Does this sound correct?
    Each applet has multiple jar files associated with it.
    Stev

    What you really should do is test your applet on a bunch of machines, like a 32 meg ram win 98, 64 meg ram win NT, and a 256 meg ram win 2000, and then give them a performance report under the different configurations. That's really what they're after (probably)

  • How would you find the pitch period of a sound signal?

    Hi
    I have a few questions and i would like if somebody could help me even with the smallest comment on this.
    How would someone be successfully estimate the pitch period (fundamental frequency) of a 5 second sound file?How would you successfully distinguish the voiced from the unvoiced parts and how would you make sure you dont mix voiced/unvoiced sections? Finally how can you find the exact points where the pitch is at its peak throughout the signal?
    Any help/comment/suggesion would be much appreciated

    Hello Madgreek,
    After some thought I think I may have come up with an algorithm for what we have discussed. Basically, you are interested in knowing the time intervals over which you can observe any given frequency in your signal. As you had suggested, you can examine small windows of your signal and perform FFTs on each of the small windows to determine what frequency content is contained in that window. By examining all of the windows, you will see when particular frequencies are prevalent in the original signal. You'd want to use the smallest allowable window to give you the most resolution, but one that is large enough to cover an entire period of the lowest frequency (so that you don't miss this frequency).
    I have attached an example program that performs this operation. The example performs this analysis on an array that represents audio data. I am basically performing multiple FFTs (for each window) and stacking these FFTs in time to form a 3D plot. By examining the 3D plot, I can then see when in time my frequencies of interest are at their peaks. Rather than graphing these plots, you may work out a different algorithm for programmatically determining and logging these peaks and times. I hope this is what you were looking for!
    Attachments:
    Time Variable FFT.vi ‏250 KB

  • How Do You Solve the Xcode 6.1.1, Playground's "unable to find suitable target device"?

    Hi. I've reset Xcode 6.1.1 (I'm on Yosemite 10.10.2), have restarted the iMac (late 2009), have plugged in via USB the iPhone 5 (runs 8.1.3), resetted even the SMC and PRAM but I still get the Playground error: "unable to find suitable target device".
    I checked the Xcode's Preferences - Downloads, on the Components pane or window it says iOS 7.1 Simulator which you could download but when I try to download it, it's just a blank progress bar, even if left for hours, it's not downloading at all. Yet when I press update and install in Preferences - Downloads, it checks it but says there's not update (if there's no update why is iOS 7.1 Simulator an option to be downloaded in the Components window?).
    How do you solve this. Do I need to reset XCode at a more deeper level? Could this be a bug in 6.1.1 update?
    Thank you in advance. God bless, Rev. 21:4

    Hi. I've reset Xcode 6.1.1 (I'm on Yosemite 10.10.2), have restarted the iMac (late 2009), have plugged in via USB the iPhone 5 (runs 8.1.3), resetted even the SMC and PRAM but I still get the Playground error: "unable to find suitable target device".
    I checked the Xcode's Preferences - Downloads, on the Components pane or window it says iOS 7.1 Simulator which you could download but when I try to download it, it's just a blank progress bar, even if left for hours, it's not downloading at all. Yet when I press update and install in Preferences - Downloads, it checks it but says there's not update (if there's no update why is iOS 7.1 Simulator an option to be downloaded in the Components window?).
    How do you solve this. Do I need to reset XCode at a more deeper level? Could this be a bug in 6.1.1 update?
    Thank you in advance. God bless, Rev. 21:4

  • How do i solve the following problem. By starting up the message appears: could not found CoreFoundation.dll. Windows error 7

    By starting up the following message appaers: could not found CoreFoundation.dll.
    Windows Error 7
    How can I solve this problem?

    With Windows Explorer, navigate to your C:\Program Files\Common Files\Apple\Apple Application Support folder.
    Copy the SQLite3.dll that you should find there, navigate to the nearby Mobile Device Support folder, and Paste it in there also.
    Restart the programme all should be well
    In case that your OS is (64 bit)
    1. Open windows explorer, go to location C:\Program Files (x86)\Common Files\Apple\Apple Application Support
    2. Copy file "SQLite3.dll"
    3. Now paste it in the folder  C:\Program Files (x86)\Common Files\Apple\Mobile Device Support
    4. Restart the programme, it should not display that message, it should be clear.
    Good Luck

  • How would i do the following in struts

    If the user is not logged in I want to forward him to the logon page and once he is logged in to send him back to the page that he was on. How would I do this in some sort of action?
    Thank you all for your time

    anyone

  • How do I solve the following message from Code Blocks on a OS X (10.10.2): "Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo." ?. It appears when I try to compile any code.

    Whenever I try to compile any code the following messagem appears: "greeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo."
    I'm using CodeBlocks v. 13.12. Its file (codeblocks-2.app) is inside the App folder.

    I suggest you ask whomever makes CodeBlocks.
    They would be the most knowledgeable.

  • How do I solve the following Itunes error -42404 I have tried uninstalling as well as repair and re installing, I keep getting the same problem, Help please

    Please help I am un able to get my I Tunes back on my Windows 7 -64 after a Virus clean out, How can I solve a problem with the followin ITunes error of -42404 I have tried the usual uninstall and reinstal, as well as the  repair all at no success, do any of you have any solution Ideas that have solved this in the past? Please Help, Thank you...

    For general advice see Troubleshooting issues with iTunes for Windows updates.
    The steps in the second box are a guide to removing everything related to iTunes and then rebuilding it which is often a good starting point unless the symptoms indicate a more specific approach. Review the other boxes and the list of support documents further down page in case one of them applies.
    Your library should be unaffected by these steps but there is backup and recovery advice elsewhere in the user tip.
    If you've already tried a complete uninstall and reinstall try opening iTunes in safe mode (hold down CTRL+SHIFT as you start iTunes) then going to Edit > Preferences > Store and turning off Show iTunes in the Cloud purchases. You may find iTunes will now start normally.
    tt2

Maybe you are looking for