I know that messing with threads inside an EJB is a big no-no, but I would just like to ask for advice on how handle this case. My EJB is calling an external Web service which may sometimes return a “busy” status. When that happens, I would like to wait for a while and then resubmit the request using the same data as before.
What would be the best way to implement this?
In the EJB restrictions FAQ it specifically states that you
And putting a thread to sleep counts as “managing” it.
In your case, when the web service returns a “busy” status, you could schedule a job to retry sending the message at a later point in time, for instance by using the Quartz Scheduler. The execution would end there, and any further processing should be delegated to the job scheduler.