views:

305

answers:

2

I have an enterprise application with around 2k concurrent users every day. These users handle customer calls so application speed is of vital importance.

When a user is wrapping up a call they commit all the information they captured. This commit can take anywhere from 10-45 seconds.

I am looking into ways to take the delay away from the user.

We have a web front end running in I.E. the backend is heavy java running on a single EJB.

I wanted to make this commit process asynchronous in that once the user submits the request they don't have to wait for the commit to finish before going on to the next customer. This is what is currently implemented.

Originally I was thinking of just spawning another thread to handle the commit but that's a no no with EJB's.

Other options I can think of would be using JMS or SIB,

What would the best solution be? Is there another alternative I am missing?

+5  A: 

There are actually two alternatives for cases like that.

  • The first one will be to use JMS. It has the advantage that the server provides all required infrastructure and you haven't to implement much yourself.
  • Another way will be to register the request in a database and have a scheduled event to process all of them.

What you select depends on your requirements. If you need to serve the requests as soon as they arrive, then you need to go with JMS. In both cases you need to persist the outcome of the request in a database and design a web service at the top of it. The front end could use this (through pollling) to present the result to the user.

kgiannakakis
A: 

Would have liked to leave a comment, but don't have the ability.

Another possibility:

Wrap the heavy EJB's in a queue mechanism, and expose a different bean with the same API so your client-facing communications talk to the new bean and are quick. They accept the request, add the job to the queue and return to the client immediately. You don't need to change the heavy EJB's or the client communications, just put a mediator in the way, and add a layer of wrapping.

Kylar