«Основной цикл» в приложении Java на сервере JBoss - PullRequest
1 голос
/ 01 октября 2011

Я создаю сервер JBoss для развертывания Java-приложения, которое будет представлять собой REST-подобный сервлет, получающий данные из запросов и помещающий их в базу данных SQL.

Мой главный вопрос: можно ли настроитькласс на сервере JBoss, который не запускается на основе запросов, но больше похож на основной цикл.Т.е. просто цикл, который «спит», затем проверяет некоторую информацию и либо что-то делает, либо снова спит.

По сути, я пытаюсь записать группу данных в файл, как только этот файл заполняется доВ определенный момент, запишите все это сразу в базу данных, чтобы уменьшить накладные расходы на соединение.

Мое лучшее предположение, что я мог бы написать любой класс с циклом и запускать его так, как я хочу (до тех пор, покапоскольку моя техника "сна" была правильной, чтобы позволить сервлету на том же времени JBoss работать).

Однако я не знаю, как заставить этот основной цикл работать постоянно;Просто назвать это в конструкторе ??Единственный способ, которым я знаю, как в данный момент запускать вещи на сервере, - это настроить отображение в файле web.xml и активно делать запрос веб-страницы с сервера ... Есть ли лучший (читай проще) сервис, чемJBoss и java для чего-то подобного

Заранее спасибо, я довольно тяжело искал объяснение чего-то подобного, но, похоже, мне не хватает подходящего ключевого слова ...

Ответы [ 3 ]

3 голосов
/ 01 октября 2011

Имейте взгляд на @Startup и @Singleton бобов.

Короче говоря, вы можете написать что-то вроде этого:

@Startup @Singleton 
public class MainLoopBean {

   @PostConstruct   
   public void mainLoop() {   
   }

}

В идеале вы должны связать это с службой таймера . Когда определенное количество работы выполнено и вы хотите сделать паузу, просто запланируйте метод, который будет вызван позже, и вернитесь.

1 голос
/ 01 октября 2011

Почему вы вообще рассматриваете петли?Почему бы не настроить JMS-очередь и прослушиватель для нее, чтобы каждый раз, когда что-то происходило, вы могли ответить.Не нужно никаких циклов, никаких специальных хуков, ничего.

В качестве альтернативы, если вы действительно заинтересованы в выполнении чего-то более сложного, посмотрите на Java Connector Architecture, которая также предоставляет вам эти виды хуков.

1 голос
/ 01 октября 2011

Если издержки соединения действительно влияют на вашу производительность, вы можете изменить настройку пула соединений в JBoss. Это сделало бы приложение более простым, надежным и масштабируемым. Запись в один файл не масштабируется до нескольких параллельных соединений. Это также требует больше операций ввода-вывода, чем прямая запись в БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...