Did you try a semaphore waiting all tasks are done? It likely also needs a
boolean to prevent new submissions before starting waiting for completion.

Side note: @Schedule sounds not bad for your use case ;)

Le lun. 29 oct. 2018 20:55, ChrisOwens <ch...@chris-owens.com> a écrit :

> This is with TomEE plus 7.0.5
>
> I'm getting /Bean ... has been undeployed/ exception on shutdown, which is
> preventing orderly cleanup.  The issue appears to be that a POJO
> implementing Runnable is scheduled for periodic execution; that POJO was
> created with a reference to a @Stateless bean; and the @Stateless bean is
> undeployed before the POJO completes execution.
>
> "Supervisor" is a @Singleton. Supervisor injects, via @Resource, a
> ManagedScheduledExecutorService. I don't do any configuration on this
> service; I just accept what the container gives me.
>
> "Processor" is a @Stateless bean that does all sorts of work including
> entity management, transactions, etc.
>
> Supervisor obtains an instance of Processor via @Inject.
>
> "Runner" is a POJO that implements Runnable. One of its constructor method
> accepts an instance of Processor. (as an aside, The run method of Runner
> checks for Thread.currentThread().isInterrupted and returns immediately if
> true. It also catches InterruptedException (which might be thrown by some
> of
> the blocking methods it invokes), and calls
> Thread.currentThread().interrupt() and returns.)
>
> To get the work done on a regular basis, Supervisor creates an instance of
> Runner, passing Processor as an argument to its constructor, and then uses
> the ManagedScheduledExecutorService to run with fixed delay.  Supervisor
> keeps a list of all the Runner tasks it has created.
>
> Supervisor has a stop() method that performs task.cancel(true) on every
> Runner task it has created. I have tried, alternatively, annotating the
> stop
> method with @PreDestroy, or explicitly invoking it from a
> ServletContextListener.
>
> At shutdown, it looks like Processor is being undeployed before the tasks
> in
> Supervisor are canceled. It appears that the container doesn't know that
> Processor needs to be kept deployed while the Runner tasks are still
> active.
>
> This happens before the Supervisor's stop() method is invoked:
>
>
> I'm having a hard time reducing this to a test case I can provide.
>
>
>
>
>
> --
> Sent from:
> http://tomee-openejb.979440.n4.nabble.com/TomEE-Dev-f982480.html
>

Reply via email to