Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Timeout на выполнение метода(EJB) 
:(
    Опции темы
alexadr
Дата 15.8.2008, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 25.9.2006

Репутация: нет
Всего: 4



Всем добрый день.

Есть следующая задача:
В процессе работы приложения дергается некий метод у некоего класса:
Код

someobject.someMethodDo();


Данный метод может выполнятся сколь угодно долго. Мне необходимо, чтобы через некий таймаут приложение продолжило свою работу, даже если данный метод еще выполняется. Т.е. грубо говоря задача вызвать этот метод асинхронно с неким таймаутом.
Сразу скажу, что вариант с дополнительным тредом уже есть. Это первое что пришло в голову. Также есть еще довольно тяжеловесное решение(связано с jms). 
Хотел узнать, если ли еще варианты. А самое главное, - есть ли возможность указать таймаут на выполнение метода в EJB. Сам это дело гуглил, но к сожалению нашел только таймаут на транзакцию для EJB, что не совсем то...
PM MAIL   Вверх
gEndelf
Дата 18.8.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 7.7.2005
Где: the world

Репутация: 1
Всего: 3



как на счет использования Quartz ? или иже подобных шедулеров ?

Quartz


PM MAIL WWW   Вверх
alexadr
Дата 18.8.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 25.9.2006

Репутация: нет
Всего: 4



Это как вариант, но он по большому счету ничем не отличается от использования доп треда, т.к. внутри все равно поднимется дом тред, который будет выполнять некую Job. 
Конечно, плюс данного варианта в том что это уже более менее протестенная библиотека и с ней проблем быть не должно, я имею в виду кварц. 
PM MAIL   Вверх
alexadr
Дата 19.8.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 25.9.2006

Репутация: нет
Всего: 4



Да, в общем вывод в результате поисков/размышлений я сделал такие:
1. Единственный корректный способ реализации всего ентого, это использование JMS
2. Реализовывать енто с помощью доп потока в принципе возможно, только при этом необходимо писать(использовать) некий фреймворк, который бы мэнеджил эти доп треды и не давал бы расти их колличеству и чтоб это кол-во доп тредов могло быть сконфигурено, при этом по идее надо уменьшить в конфигурации j2ee сервера макс количество тредов как минимум на кол-во доп. тредов.
PM MAIL   Вверх
COVD
Дата 19.8.2008, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



для ваших целей достаточно применения new Thread , wait (long timeout) и notify. 
Однако чтобы вручную не программировать контроль количества создаваемых потоков проще воспользоваться пакетом java.util.concurrent - там разные варианты Executors , в том числе пулы с фиксированным количеством потоков. 
Чтобы вручную не программировать wait - notify можно применить submit, который возвращает java.util.concurrent.Future.  У него есть метод public V get(long timeout, TimeUnit unit)  , который блокируется и возвращает результат только после выполнения задачи или исключение по истечению таймаута.   

http://java.sun.com/docs/books/tutorial/es...cy/exinter.html

Это сообщение отредактировал(а) COVD - 19.8.2008, 21:18
PM MAIL   Вверх
alexadr
Дата 20.8.2008, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 25.9.2006

Репутация: нет
Всего: 4



Цитата(COVD @  19.8.2008,  21:02 Найти цитируемый пост)
для ваших целей достаточно применения new Thread , wait (long timeout) и notify.

Вот уж этого точно не достаточно, - этот подход уронит сервер на первой же пиковой нагрузке.

А вот
Цитата(COVD @  19.8.2008,  21:02 Найти цитируемый пост)
пулы с фиксированным количеством потоков. 

это хороший вариант, только в этом случае  приедтся настроить оптимальное макс кол-во тредов в пуле и при этом уменьшить макс кол-во тредов контейнера.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0846 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.