Enterprise Java Development@TOPIC@

Chapter 126. Asynchronous Methods Example

126.1. Synchronous Example
126.1.1. Synchronous Example: Client
126.1.2. Synchronous Example: Worker
126.1.3. Synchronous Example: Results
126.2.
126.2.1. Asynchronous Example: Client
126.2.2. Asynchronous Example: Worker
126.2.3. Asynchronous Example: Results
126.3. Asynchronous Example Summary
import java.util.concurrent.ExecutionException;

import java.util.concurrent.Future;
/**

 * Perform action async from this caller
 */
@Override
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public void workAsync(int count, long delay) {
    DateFormat df = new SimpleDateFormat("HH:mm:ss.SSS");
    
    List<Future<Date>> results = new ArrayList<Future<Date>>();
      //issue requests
    long startTime = System.currentTimeMillis();
    for (int i=0; i<count; i++) {
        logger.info("{} issuing async request, delay={}", df.format(new Date()), delay);
        Future<Date> date = actions.doWorkAsync(delay);
        results.add(date);
        logger.info("async waitTime={} msecs", System.currentTimeMillis()-startTime);
    }
      //process results
    for (Future<Date> f: results) {
        logger.info("{} getting async response", df.format(new Date()));
        try {
            Date date = f.get();
        } catch (ExecutionException | InterruptedException ex) {
            logger.error("unexpected error on future.get()", ex);
            throw new EJBException("unexpected error during future.get():"+ex);
        }
        logger.info("{} got async response", df.format(new Date()));
    }
    long asyncTime = System.currentTimeMillis() - startTime;
    logger.info("workAsync time={} msecs", asyncTime);
}    
08:08:15,861 [Client] (default task-1) sellTopic=ActiveMQTopic[asyncMarket-topic1]

08:08:15,861 [Client] (default task-1) 08:08:15.861 issuing async request, delay=3000
08:08:15,863 [Client] (default task-1) async waitTime=2 msecs
08:08:15,863 [Client] (default task-1) 08:08:15.863 issuing async request, delay=3000
08:08:15,864 [Client] (default task-1) async waitTime=3 msecs
08:08:15,864 [Client] (default task-1) 08:08:15.864 issuing async request, delay=3000
08:08:15,864 [Client] (default task-1) async waitTime=3 msecs
08:08:15,864 [Client] (default task-1) 08:08:15.864 getting async response
08:08:15,865 [Worker] (EJB default - 8) async method 224 starting 3000 delay at 08:08:15.865
08:08:15,865 [Worker] (EJB default - 6) async method 222 starting 3000 delay at 08:08:15.865
08:08:15,865 [Worker] (EJB default - 7) async method 223 starting 3000 delay at 08:08:15.865
08:08:18,870 [Worker] (EJB default - 7) async method 223 completed 3000 delay at 08:08:18.870
08:08:18,870 [Worker] (EJB default - 8) async method 224 completed 3000 delay at 08:08:18.870
08:08:18,870 [Worker] (EJB default - 6) async method 222 completed 3000 delay at 08:08:18.870
08:08:18,873 [Client] (default task-1) 08:08:18.873 got async response
08:08:18,873 [Client] (default task-1) 08:08:18.873 getting async response
08:08:18,873 [Client] (default task-1) 08:08:18.873 got async response
08:08:18,873 [Client] (default task-1) 08:08:18.873 getting async response
08:08:18,873 [Client] (default task-1) 08:08:18.873 got async response
08:08:18,873 [Client] (default task-1) workAsync time=3012 msecs