2013-06-18 3 views
0

Как достичь while (true) как поведение с сервером приложений?
Если мне нужно изменить мои постоянные данные через каждые несколько секунд, и с каждым циклом, процедуры A, B, C следует назвать:Хотя поведение (true) в сервере приложений

public class Runner 
{  
    List values; 

    public void repeat() 
    { 
     while (true) 
     { 
      changeSomeDataA(); 
      changeSomeDataB(); 
      changeSomeDataC(); 
     } 
    } 
} 
+1

Уточнитните изменения, данные, время и цикл. – weltraumpirat

+0

Вы хотите что-то, что будет работать в фоновом режиме, спать и просыпаться все это время? Вы хотите что-то, что планируется запустить, скажем, каждые несколько минут/часов? –

+0

, возможно, создайте синглтон, похожий на компонентный компонент, и начните с приложения, используя атрибут hager. для синхронизации просто используйте java sleep() – sotix

ответ

1

Использовать аннотацию @Schedule для обслуживания таймера EJB. как

@Schedule(second="*/3", minute="*", hour="*") 
    public void automaticChangeOnTimer() { 
     changeSomeDataA(); 
     changeSomeDataB(); 
     changeSomeDataC(); 
     logger.info("Automatic called the method"); 
    } 

Для получения дополнительной информации смотрите на следующей ссылке:

http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html

-1

С информацией, предоставленной одним из решений является запустить поток, который спит сказать 5s перед повторным вызовом методов, например:

// init (e.g. with servlet init()) 
Runner r = new Runner(); 
Thread t = new Thread(r); 
t.start(); 

// and later (e.g. with servlet destroy()) 
r.stopRunning(); 
t.interrupt(); 
t.join(); 

И ваш Runner вам просто нужно обновить немного, так что вы можете запустить его в потоке.

public class Runner implements Runnable 
{  
    List values; 
    boolean running = true; 

    public void run() 
    { 
     while (running) 
     { 
      changeSomeDataA(); 
      changeSomeDataB(); 
      changeSomeDataC(); 

      try { 
       Thread.sleep(5000); 
      } catch(InterruptedException e) { 
       // we do not really need to react here, do we? 
      } 
     } 
    } 
} 

Обратите внимание, что вам нужно сохранить ссылку на полоз и тему в объект (например, ваш Servlet экземпляр), который не случайно мусора. Конечно, пожалуйста, закажите красиво.

+2

ОП задает это в контексте сервера Java EE. Вы должны знать, что нерестовые неуправляемые потоки на протяжении всего срока службы Java EE-сервера - очень плохая практика. Вместо этого вы должны использовать объекты, поддерживаемые Java EE, например, API EJB. – BalusC

0

Спецификация Java EE предоставляет возможность создания EJB Timer, которые полезны для выполнения бизнес-логики в определенный период времени.

В каждой версии EJB (2.1, 3.0, 3.1) были внесены изменения в форму, которую этот компонент может быть реализован, поэтому вы должны искать код примера в соответствии со своим вариантом Java.