I recently learned that I can easily make any session bean method Asynchronous by simply adding the @Asynchronous
annotation.
E.g.
@Asynchronous
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 @Asyncronous
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?
To obtain an instance of AsyncContext , call the startAsync() method on the request object of your service method; for example: public void doGet(HttpServletRequest req, HttpServletResponse resp) { ...
Annotate a business method with javax. ejb. Asynchronous to mark that method as an asynchronous method, or apply @Asynchronous at the class level to mark all the business methods of the session bean as asynchronous methods.
Session beans can implement asynchronous methods, business methods where control is returned to the client by the enterprise bean container before the method is invoked on the session bean instance.
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.
@Stateless
public class AsyncEjb {
@Resource
private SessionContext sessionContext;
@Asynchronous
public Future<String> asyncMethod() {
...
//Check if canceled by timer
if(sessionContext.wasCancelCalled()) {
...
}
...
}
}
@Singleton
public class SingletonEjb {
@EJB
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
@Timeout
public void timeout(Timer timer) {
theFuture.cancel(true);
}
}
Edit (new below):
In glassfish you may configure the ejb-pool by seting below attributes in the admin console
see Tuning the EJB Pool
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With