@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重入。