Как обрабатывать данные из сервлета самостоятельно? - PullRequest
0 голосов
/ 03 марта 2012

Я разработал следующую программу / архитектуру:

A) Java-сервлет получает запросы POST, получает параметры из запросов POST и сохраняет их в общедоступном статическом LinkedList:

public static LinkedList incomingQueue = new LinkedList<myObjects>();

То есть для каждого запроса POST я делаю это:

incomingQueue.push(myObject);

Теперь я хочу периодически получать доступ к очереди и выполнять обработку объектов:

while(true){
doProcessing(incomingQueue);
wait(someTime);
}

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

Спасибо, что уделили время.

Ответы [ 3 ]

0 голосов
/ 03 марта 2012

Прежде всего очередь должна быть помещена в атрибуты контекста сервлета (см .: ServletContext.setAttribute(). Также доступ к этой очереди должен быть синхронизирован, рассмотрим ArrayBlockingQueue.

В простых сервлетах вы можете использовать ServletContextListener, запустив поток в contextInitialized() и прервав его в contextDestroyed.

Если вы используете , вы можете использовать @Scheduled аннотацию , в : TimerService или @Schedule .

Наконец, в стандартной Java есть класс Timer. И последнее, но не менее важное: взгляните на , это может быть лучшим выбором в вашей ситуации.

0 голосов
/ 03 марта 2012

Вам необходимо синхронизировать свои методы для одновременного доступа.

Очень сложным решением было бы реализовать его как производитель и потребитель. Здесь - это пример, в котором используется стек, 1 производитель и 3 потребителя.

Более подходящим решением было бы использование JMS .

0 голосов
/ 03 марта 2012

У вас есть несколько вариантов:

  1. Используйте библиотеку расписаний, например Кварц
  2. Если вы не хотите использовать отдельную библиотеку, вы должны добавить слушатель к вашему web.xml, который расширяет ServletContextListener и запускает отдельный поток на contextInitialized().

Также: обратите внимание на комментарий @BrianRoach. Вопрос о синхронизированном списке довольно важен.

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