@Startup
@Singleton
@AccessTimeout(value = 0)
public class MyEJB {
@Schedule(dayOfWeek = "*", hour = "*", minute = "*", second = "*/20", year = "*", persistent = false, info = "MyEjb Job.................")
    @AccessTimeout(value = 0)
    public void execute() {
        try {
            lgg.debug("starting...........");
            Thread.sleep(35000);
            lgg.debug("ending.............");
        } catch (InterruptedException e1) {
        }
}


我有以下代码。我想在20秒后停止(销毁)当前的EJB,并启动另一个Singltone EJB实例。如何实现呢?

最佳答案

这是不可能的。您不能安全地强制线程在JVM中停止,并且EJB中没有机制来中断线程。最好的办法是合作中断:在单例上调用另一个方法以通知它唤醒(即,将Thread.sleep更改为类似CountDownLatch的其他名称)。注意,您将需要更改默认的@Lock@ConcurrencyManagement以允许bean重入。

09-06 02:43