Запись в отдельной теме для веб-приложения - PullRequest
1 голос
/ 08 марта 2009

Для одного из URL-адресов, по которому будут звонить мои клиенты, я хочу, чтобы он возвращался как можно скорее с минимальным перерывом в работе, поэтому даже если база данных работает медленно или медленно, запрос все равно возвращается довольно быстро.

Мне все еще нужно выполнить некоторую обработку отправленных данных, поэтому я думаю о том, чтобы иметь отдельную «очередь», которая хранит данные, а затем обрабатывает их почти в реальном времени, но в отдельном потоке.

Прежде чем я уйду и начну писать эту очередь, я хотел спросить, есть ли легко доступные классы / библиотеки для этого?

Это веб-приложение java, развернутое с помощью jboss.

Ответы [ 6 ]

9 голосов
/ 08 марта 2009

Создание собственных потоков в приложении J2EE настоятельно не рекомендуется и находится за пределами спецификации J2EE. Я не думаю, что вы найдете библиотеку J2EE, чтобы делать то, что вы хотите.

Одним из основных преимуществ J2EE является то, что сервер управляет всеми вашими потоками (и другими ресурсами) за вас. Если вы начинаете создавать свои собственные потоки, сервер не знает о них и не может следить за ними, поэтому вы открываете себя для потенциальных проблем утечки ресурсов среди других головных болей. Чтобы придумать фразу, вы не получаете собаку и не лаете сами.

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

2 голосов
/ 08 марта 2009

Альтернативой JMS будет сохранение запросов в базе данных, а затем их обработка вместе с планировщиком. Для этого вы можете использовать Кварц или Таймеры Java EE .

1 голос
/ 09 марта 2009

На самом деле вы можете создавать нужные потоки, используя commonj . Он обеспечивает легкий способ использования потоков и таймеров в контейнерах Java EE. Больше информации здесь , а также этот вопрос неоднократно поднимался.

Это позволяет подтвердить ограничения на управление ресурсами в Java EE и избежать более тяжелого решения JMS (хотя оно также будет работать).

0 голосов
/ 27 октября 2009

Реализация в конечном итоге превратилась в сообщение JMS и несколько управляемых сообщениями Bean-компонентов, обрабатывающих данные, которые отлично работали и масштабировали довольно хороший софар.

Я ценю всю помощь и комментарии, особенно commonj, а также предупреждения о создании темы вручную.

0 голосов
/ 09 марта 2009

Я с большим успехом использовал Doug Lea's PooledExecutor для решения подобных задач. В настоящее время существует также ExecutorService непосредственно в Java 5 и новее.

Были некоторые комментарии, что настоятельно не рекомендуется использовать ваши собственные темы в J2EE. Что ж, всякий раз, когда вы делаете себе что-нить, вы должны быть осторожны, и на самом деле это ничем не отличается. Я нахожу способ J2EE, позволяющий серверу позаботиться обо всем, немного беспокоящий, и мне не нравится, как он ограничивает возможности выбора дизайна.

Только мои 50 центов ...

0 голосов
/ 08 марта 2009

Разве это не идеальный сценарий, чтобы полагаться на Ajax? Ваша страница с длительной загрузкой возвращается немедленно и содержит ajax-запрос javascript для получения вашего длинного запроса на обработку. Пока запрос находится на рассмотрении, пользователь сталкивается с вращателем или другим способом сообщить ему, что запрос может занять некоторое время. как только он вернулся, ответ вставляется на вашу страницу с помощью JavaScript.

...