@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中没有任何机制可以中断线程。您能做的最好的方法是合作中断:调用Singleton上的另一种方法以通知其醒来(也就是说,将螺纹。sleep更改为诸如CountDownLatch之类的其他东西)。请注意,您需要更改默认的@Lock
或@ConcurrencyManagement
才能重新进入BEAN。