Jboss 7销毁Singleton EJB

时间:2015-05-14 07:56:15

标签: java jboss7.x scheduling ejb-3.1

@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实例。如何实现?

1 个答案:

答案 0 :(得分:1)

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