2015-05-14 61 views
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實例。如何實現這一目標?Jboss 7銷燬Singleton EJB

回答

1

這是不可能的。您無法安全地強制線程停止在JVM中,並且EJB中沒有任何機制來中斷線程。你可以做的最好的是協作中斷:調用單例中的另一個方法來通知它喚醒(也就是說,將Thread.sleep更改爲像CountDownLatch之類的其他方法)。請注意,您需要更改默認的@Lock@ConcurrencyManagement以允許該bean是可重入的。