I think an example would help me understand this more.
-dain
On Aug 5, 2008, at 5:23 AM, Karan Malhi wrote:
Question:- What would be the use-case to call an asynchronous method
and
expect synchronous behavior?
On 8/5/08, David Blevins <[EMAIL PROTECTED]> wrote:
Had an interesting idea I think I might propose to the EJB 3.1 Expert
Group. Wanted to run it by here as I can't seem to think of a good
name for
it.
Essentially, many people who want async methods don't actually want
fire
and forget. We've already addressed this somewhat with the ability
to
return a container controlled java.util.concurrent.Future instance
to the
async method caller. It doesn't really address the parallelization
scenario
where they want to call several async methods and wait for them all
to
complete. Holding onto a handful of Future objects without the
benefit of
something like the NIO Selector API (which is still pretty
terrible) is just
not going to cut it.
The idea is to introduce something like a @Resynchronize annotation
that
could be applied to business methods on the bean class. A business
method
or callback with the @Resynchronize annotation would block until
all the all
the async methods it calls have completed. So for example:
@Resynchronize
public void goTeam() {
fooBean.red(); // async method
barBean.green(); // async method
bazBean.blue();
}
At the start of the goTeam() method the container would ready
itself to
track async calls. When the bean code calls the red() and green()
methods
the container will track those calls and when the goTeam() method
returns to
the container, the container will block the thread till both red()
and
green() complete. When both are completed, the container will return
control to the caller of goTeam().
Internally if we had something like a CountDownLatch that could
count up as
well as down, we'd be set. Any ideas there?
Also, not sure @ Resynchronize is the best annotation name.
-David
--
Karan Singh Malhi