Eran Medan Eran Medan - 11 months ago 55
Java Question

Where can I configure the thread pool behind the @Asynchronous calls in Java EE 6?

I recently learned that I can easily make any session bean method Asynchronous by simply adding the



public Future<String> processPayment(Order order) throws PaymentException {

I know that Java EE 7 added Concurrency Utilities, but in Java EE 6, where is the thread pool configuration of the
methods? is there a way to set a timeout? is it a fixed thread pool? a cached one? what is it's priority? Is it configurable somewhere in the container?

Answer Source

I think timeout could be achieved by invoking Future.cancel(boolean) from a method annotated @Timeout. Requires keeping a reference to the Future returned by the async method, Singleton-ejb can be used for this.

public class AsyncEjb {

    private SessionContext sessionContext;

    public Future<String> asyncMethod() {

        //Check if canceled by timer
        if(sessionContext.wasCancelCalled()) {


public class SingletonEjb {
    AsyncEjb asyncEjb;

    Future<String> theFuture;

    public void asyncMethod() {

        theFuture = asyncEjb.asyncMethod();

        //Create programatic timer
        long duration = 6000;
        Timer timer =
        timerService.createSingleActionTimer(duration, new TimerConfig());


    //Method invoked when timer runs out
    public void timeout(Timer timer) {

Edit (new below):

In glassfish you may configure the ejb-pool by seting below attributes in the admin console

  • Initial and Minimum Pool Size
  • Maximum Pool Size
  • Pool Resize Quantity
  • Pool Idle Timeout

see Tuning the EJB Pool