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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> J2EE и отложенное выполнение, выполнить код в определённое время 
:(
    Опции темы
KostenkoSergey
Дата 20.9.2006, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



При запросе с клиента дёргаю МДБ - который вызывает оракловую процедуру. Процедура выполняется долго.

Можно как то планировать время выполнения фрагмента кода в ЕЕ (например выполнить код вызова процедуры строго в 3 часа ночи) (без oracle jobs)



Это сообщение отредактировал(а) KostenkoSergey - 20.9.2006, 11:43
PM ICQ   Вверх
tux
Дата 20.9.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Цитата(KostenkoSergey @  20.9.2006,  16:39 Найти цитируемый пост)
Можно как то планировать время выполнения фрагмента кода в ЕЕ

Можно. 
Вариант 1. Использовать класс java.util.Timer из стандартной библиотеки. Но он долвольно ограничен, хотя для этой задачи его возможностей вроде хватит. 
Вариант 2. Использовать библиотеку Quartz, которая позволяет задавать cron-like выражения для определения времен запуска. 
Вариант 3. В J2EE есть свой таймеры, подробности здесь - http://forum.vingrad.ru/index.php?showtopic=105100.
PM MAIL Skype GTalk Jabber YIM   Вверх
sergakrem
Дата 20.9.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 28.7.2006
Где: Украина, г. Киев

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



Я вот только недавно решал такую же задачу - чудесно получилось с помощью java.util.Timer + поток на каждый запрос (но это уже особенности архитектуры приложения). 

У меня есть singletone объект. (task pool) который доступен приложению, и  в котором регистрруются задачи со временем их выполнения. Вот собственно и все.
PM MAIL ICQ   Вверх
KostenkoSergey
Дата 20.9.2006, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



спасибо -  не доглядел - думаю java.util.Timer будет вполне достаточно.
PM ICQ   Вверх
chief39
Дата 20.9.2006, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 11
Всего: 77



Цитата(KostenkoSergey @  20.9.2006,  19:01 Найти цитируемый пост)
спасибо -  не доглядел 

Что не доглядел? Таймер стандартный?

Перестартанёшь сервер - отсчёт свалится

Это сообщение отредактировал(а) chief39 - 20.9.2006, 21:52


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
w1nd
Дата 21.9.2006, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


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

Репутация: 7
Всего: 54



Использовать java.util.Timer на стороне сервера нельзя. По крайней мере, если считаете, что можете делать то, на что сервер не рассчитан - используйте JMX-таймер (пакет javax.management.timer). В этом случае можно хотя бы надеяться на его работоспособность после перезапуска сервера.

Это сообщение отредактировал(а) w1nd - 21.9.2006, 11:21


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
sergakrem
Дата 21.9.2006, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 28.7.2006
Где: Украина, г. Киев

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



chief39, чего отвалится? smile Если грамотоно сделать - не отвалится.

Можно узнаь о событии останова сервера, записать task-pool с его текущим состоянием (таски и время их выполения), а при последующем старте выполнить необходимые телодвижения по восстановлению состояния пула (и, если надо - выполнить/ли нет те задачи, которые просрочены) - собственно в моем случае оно так и происходит.

Естественно, я не буду спорить про "стандартность" или там еще какие-то характеристики такого подхода, но - оно работает.
PM MAIL ICQ   Вверх
w1nd
Дата 21.9.2006, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


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

Репутация: 7
Всего: 54



Цитата(sergakrem @ 21.9.2006,  17:48)
chief39, чего отвалится? smile Если грамотоно сделать - не отвалится.

Можно узнаь о событии останова сервера, <...>

Естественно, я не буду спорить про "стандартность" или там еще какие-то характеристики такого подхода, но - оно работает.

Может в вашем случае оно и работает, но не факт, что будет работать у кого-то ещё.

Как правило, необходимость перезапускать сервер возникает только тогда, когда с ним творится что-нибудь непотребное, а в этот момент зачастую сделать уже ничего нельзя. Нельзя быть уверенным даже в исполнении shutdown hook'ов.

И речь идет не о "стандартности", а о применимости. Управление потоками в J2EE недопустимо, а попытки делать это могут привести как раз к необходимости регулярно перезапускать сервера smile Кстати, в кластере J2SE-шный таймер не будет работать никогда.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
COVD
Дата 21.9.2006, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Использовать java.util.Timer на стороне сервера нельзя


а мы вовсю используем. Например, нам надо в 5 утра каждый день делать нечто. Перезапуск сервера не помеха, надо просто правильно выставить время первого срабатывания таймера. Легко вычисляется на основании системного времени  в момент рестарта сервера. Сервер рестартует и таймеры заново устанавливаются.
PM MAIL   Вверх
sergakrem
Дата 21.9.2006, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 28.7.2006
Где: Украина, г. Киев

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



Цитата(w1nd @  21.9.2006,  21:40 Найти цитируемый пост)
Как правило, необходимость перезапускать сервер возникает только тогда, когда с ним творится что-нибудь непотребное, а в этот момент зачастую сделать уже ничего нельзя. Нельзя быть уверенным даже в исполнении shutdown hook'ов.


Ну дык и что? Кто мешает сохранять состояние task-pool в момент изменения списка заданий? И ничего страшного не произойдет даже при том, что сервер вывалится потом, когда 
Цитата(w1nd @  21.9.2006,  21:40 Найти цитируемый пост)
сделать уже ничего нельзя



Цитата(w1nd @  21.9.2006,  21:40 Найти цитируемый пост)
Управление потоками в J2EE недопустимо, а попытки делать это могут привести как раз к необходимости регулярно перезапускать сервера


Sorry, опять же, не согласен - все зависит от грамотности реализации. Не вижу ничего "недопустимого" в этом. Управление потоками - нормальная практика на любой платформе.

PM MAIL ICQ   Вверх
w1nd
Дата 22.9.2006, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


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

Репутация: 7
Всего: 54



Цитата(sergakrem @ 21.9.2006,  23:28)
Ну дык и что? Кто мешает сохранять состояние task-pool в момент изменения списка заданий?

Лично мне мешает необходимость реализации этого самого taskpool'а, тогда как таймеры со всей необходимой инфраструктурой в J2EE 1.4 уже есть smile


Цитата(sergakrem @ 21.9.2006,  23:28)
Sorry, опять же, не согласен - все зависит от грамотности реализации. Не вижу ничего "недопустимого" в этом. Управление потоками - нормальная практика на любой платформе.

На любой, кроме J2EE. Внутри сервера приложений это ненормальная практика. Если вы не видите ничего недопустимого -  почитайте спецификацию.

Если вам лень читать, то я примерно обрисую пару ситуаций:
  • На сервере выполняется N приложений, одно из них вдруг решает управлять всеми остальными. Комментарии, как говорится, излишни. 
  • Сервер постоянно производит мониторинг своих внутренних подсистем, на основании результатов которого делает выводы о загруженности и либо сигнализирует админу, либо перекидывает запросы на другие узлы кластера, либо отказывает в обслуживании вновь подключившимся клиентам. В случае с вышеупомянутым "самостоятельным" приложением сервер никогда не узнает о том, что его ресурсы исчерпаны.



--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
sergakrem
Дата 22.9.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 28.7.2006
Где: Украина, г. Киев

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



Вобщем ясно  smile 

Это уже попахивает "религиозной войной" в подходах.  smile Шучу.

А если серьезно - просто обратите внимание на "достаточность" данного метода. То, о чем я говорю - простое и эффективное решение в контексте не гугловского масштаба запросов клиентов. Собственно, по-моему в конкретном, данном, вопросе кластеры и распределение нагрузки ни причем (KostenkoSergey, если я ошибаюсь - поправьте меня, и сорри всем остальным).

Реализация такого пула - это дело десяти минут, хеш-мапа и шести методов. Т.ч. - это нормальная практика.

А JMX для таких вещей по-моему сильно "жирно"  smile 

PM MAIL ICQ   Вверх
w1nd
Дата 23.9.2006, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


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

Репутация: 7
Всего: 54



Цитата(sergakrem @ 22.9.2006,  16:21)
Вобщем ясно  smile 

Это уже попахивает "религиозной войной" в подходах.  smile Шучу.

А если серьезно - просто обратите внимание на "достаточность" данного метода. То, о чем я говорю - простое и эффективное решение в контексте не гугловского масштаба запросов клиентов. Собственно, по-моему в конкретном, данном, вопросе кластеры и распределение нагрузки ни причем (KostenkoSergey, если я ошибаюсь - поправьте меня, и сорри всем остальным).

Реализация такого пула - это дело десяти минут, хеш-мапа и шести методов. Т.ч. - это нормальная практика.

А JMX для таких вещей по-моему сильно "жирно"  smile

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

Вторая мысль - считаю недальновидным игнорирование имеющегося инструментария и написание своих аналогов. На работе я за это людей наказываю smile 

З. Ы. Про "жирность": почему вы так считаете?

Это сообщение отредактировал(а) w1nd - 23.9.2006, 01:28


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Lerm
Дата 26.9.2006, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 7.12.2004
Где: Москва, Россия

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



Цитата(KostenkoSergey @ 20.9.2006,  11:39)
При запросе с клиента дёргаю МДБ - который вызывает оракловую процедуру. Процедура выполняется долго.

Можно как то планировать время выполнения фрагмента кода в ЕЕ (например выполнить код вызова процедуры строго в 3 часа ночи) (без oracle jobs)

Тут еще много зависит от используемого Application Server-а. Скажем, на WebLogic-е есть такая вещь, как отложенная доставка сообщения - при его посылке мы указываем время, когда оно должно быть доставлено: http://e-docs.bea.com/wls/docs81/jms/implement.html#1235262
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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