2015-05-14 6 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) { 
     } 
} 

У меня есть следующий код. Я хочу остановить (уничтожить) текущий EJB, работающий через 20 секунд, и запустить другой экземпляр Singltone EJB. Как это сделать?Jboss 7 Destroy Singleton EJB

ответ

1

Это невозможно. Вы не можете безопасно заставить поток останавливаться в JVM, и в EJB нет механизма для прерывания потока. Лучшее, что вы можете сделать, это совместное прерывание: вызовите другой метод на синглтоне, чтобы уведомить его о пробуждении (т. Е. Измените Thread.sleep на что-то еще, например CountDownLatch). Обратите внимание, что вам нужно будет изменить значение по умолчанию @Lock или @ConcurrencyManagement, чтобы позволить bean-компоненту быть реентерабельным.