2013-04-17 3 views
2

Существует приложение Java EE, в котором у нас есть партии заданий для обработки. Обработка включает вызов внешней службы с ограничением, так что мы можем одновременно отправлять только N количество запросов. Это узкое место должно быть реализовано в нашей прикладной логике, и мне интересно, как мы можем достичь этого наилучшим образом. К счастью, кластеризация не является обязательным требованием, поэтому мы можем ограничить проблему одним экземпляром сервера.Ограничить одновременное использование ресурсов в приложении Java EE

  • Моя первая идея состоит в том, использует ExecutorService подкрепленная ThreadPool с N рабочей темы, так что ThreadPool объект будет выступать в качестве регулятора. Конечно, это не решение для ЭЭ.

  • Моя вторая идея будет каким-то образом настройки такой ThreadPool в контейнер и использовать это, но я не нашел каких-либо функции, как этого до сих пор.

  • Третья идея заключается в использовании объекта Semaphore(N) в @Singleton EJB.

  • Четвертая идея заключается в создании ограниченного пула сессионных bean-компонентов без состояния без учета состояния и предоставления доступа к ограниченному ресурсу в них. Как количество боба управляется контейнером, использование ресурсов будет быть ограниченно, а

(Для уточнения: общее решение будет лучшим, но известно, что мы бежим на Glassfish 3.1.1 и, возможно, позже на JBoss 6.x)

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

+0

Другие идеи по-прежнему приветствуются :-) – jabal

ответ

1

Почему бы вам не использовать Works? Посмотрите here для обзора того, как использовать Works в JBoss и Weblogic. Я не знаю о Glasshfish, я оставлю исследование вам сейчас;)
Словом, Works - это потоки, совместимые с EE.

+0

Спасибо, ТБХ никогда не слышал об этом. Начал расследование .. :-) – jabal

+0

Как я вижу, [JSR-237 http://www.jcp.org/en/jsr/detail?id=237] снят и [JSR-236 http://www.jcp. org/en/jsr/detail? id = 236] был включен в финализацию только вчера. :-) – jabal

+0

Я вижу, не знал, что «JCA WorkManager API подходит только для использования в адаптерах ресурсов». Поэтому я до сих пор использую какое-то обходное решение. : -О – Carlo

Смежные вопросы