views:

78

answers:

1

How can I return a java.util.concurrent.Future object with a Receipt object and only use the @javax.ejb.Asynchronous annotation?

And do I need any extra configuration to let Spring handle ejb annotations?

I don't want to write any concurrency logic myself.

Here's my attempt that doesn't work:

@Asynchronous
public Future<Receipt> execute(Job job) {
    Receipt receipt = timeConsumingWork(job);
    return receipt;
}
+4  A: 

As long as your configuration is correct, all you need to do is to return a new AsyncResult object with the receipt as input parameter.

@Asynchronous
public Future<Receipt> execute(Job job) {
    Receipt receipt = timeConsumingWork(job);
    return new AsyncResult<Receipt>(receipt);
}

Spring handles both @Async and @Asynchronous with the <task:annotation-driven /> element.

Espen