Issue Details (XML | Word | Printable)

Key: JAVAEETUTORIAL-154
Type: Improvement Improvement
Status: Resolved Resolved
Resolution: Fixed
Priority: Minor Minor
Assignee: Ian Evans
Reporter: swiss-chris
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
javaeetutorial

unecessary "while(!mailStatus.isDone())"

Created: 15/Feb/13 05:31 PM   Updated: 19/Feb/13 08:48 PM   Resolved: 19/Feb/13 08:48 PM
Component/s: examples
Affects Version/s: 6.0.8
Fix Version/s: 7.0.0

Time Tracking:
Original Estimate: 5 minutes
Original Estimate - 5 minutes
Remaining Estimate: 5 minutes
Remaining Estimate - 5 minutes
Time Spent: Not Specified
Time Spent - Not Specified

Tags:
Participants: Ian Evans and swiss-chris


 Description  « Hide

In the async EJB example (doc: http://docs.oracle.com/javaee/6/tutorial/doc/gkiez.html) the async.web.MailerManagedBean's send() method contains the following code:

while (!mailStatus.isDone()) {       // line x+1
    this.setStatus("Processing..."); // line x+2
}                                    // line x+3

This seems problematic to me on various levels.

  1. We are unnecessarily setting the status to "Processing..." numerous times.
  2. We are unnecessarily occupying the processor until mailStatus.isDone().
  3. Immediately after this code, we call mailStatus.get(), which has the same effect as the while-loop (here too we wait for mailStatus.isDone())


My proposal would be to delete the first and last line from the three lines of code pasted above, leaving only the middle line (which never produces any visible result, by the way):

this.setStatus("Processing..."); // line x+2

---------

Furthermore, in my local code I reworked the example a bit,

  • using @ManagedBean @SessionScoped instead of @Named @RequestScoped.
  • making Future<String> mailStatus a class member instead of a local variable.
  • removing the try-catch block containing this.setStatus(mailStatus.get() out of the send() method and into the getStatus() method, protected by an additional if (mailStatus.isDone()) check.
  • changing the response value of the send() method from "response" to "response?faces-redirect=true"

This allows me to actually see the "Processing..." status in the browser as well as to refresh the page manually until the status changes. Personally, I find this gives me more of a feeling for the asynchronous nature of the code underneath, rather than experiencing a simple long-running synchronous response in the browser.



Sort Order: Ascending order - Click to sort in descending order
Ian Evans made changes - 18/Feb/13 09:07 PM
Field Original Value New Value
Assignee Ian Evans [ ievans ]
Ian Evans made changes - 18/Feb/13 09:07 PM
Status Open [ 1 ] In Progress [ 3 ]
Ian Evans made changes - 19/Feb/13 08:48 PM
Status In Progress [ 3 ] Resolved [ 5 ]
Fix Version/s 7.0.0 [ 15607 ]
Resolution Fixed [ 1 ]