![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
KostenkoSergey |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 290 Регистрация: 31.10.2005 Где: Kiev Репутация: 3 Всего: 8 |
При запросе с клиента дёргаю МДБ - который вызывает оракловую процедуру. Процедура выполняется долго.
Можно как то планировать время выполнения фрагмента кода в ЕЕ (например выполнить код вызова процедуры строго в 3 часа ночи) (без oracle jobs) Это сообщение отредактировал(а) KostenkoSergey - 20.9.2006, 11:43 |
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Можно. Вариант 1. Использовать класс java.util.Timer из стандартной библиотеки. Но он долвольно ограничен, хотя для этой задачи его возможностей вроде хватит. Вариант 2. Использовать библиотеку Quartz, которая позволяет задавать cron-like выражения для определения времен запуска. Вариант 3. В J2EE есть свой таймеры, подробности здесь - http://forum.vingrad.ru/index.php?showtopic=105100. |
|||
|
||||
sergakrem |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 28.7.2006 Где: Украина, г. Киев Репутация: нет Всего: нет |
Я вот только недавно решал такую же задачу - чудесно получилось с помощью java.util.Timer + поток на каждый запрос (но это уже особенности архитектуры приложения).
У меня есть singletone объект. (task pool) который доступен приложению, и в котором регистрруются задачи со временем их выполнения. Вот собственно и все. |
|||
|
||||
KostenkoSergey |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 290 Регистрация: 31.10.2005 Где: Kiev Репутация: 3 Всего: 8 |
спасибо - не доглядел - думаю java.util.Timer будет вполне достаточно.
|
|||
|
||||
chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 11 Всего: 77 |
Что не доглядел? Таймер стандартный? Перестартанёшь сервер - отсчёт свалится Это сообщение отредактировал(а) chief39 - 20.9.2006, 21:52 -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 7 Всего: 54 |
Использовать java.util.Timer на стороне сервера нельзя. По крайней мере, если считаете, что можете делать то, на что сервер не рассчитан - используйте JMX-таймер (пакет javax.management.timer). В этом случае можно хотя бы надеяться на его работоспособность после перезапуска сервера.
Это сообщение отредактировал(а) w1nd - 21.9.2006, 11:21 -------------------- ![]() ![]() |
|||
|
||||
sergakrem |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 28.7.2006 Где: Украина, г. Киев Репутация: нет Всего: нет |
chief39, чего отвалится?
![]() Можно узнаь о событии останова сервера, записать task-pool с его текущим состоянием (таски и время их выполения), а при последующем старте выполнить необходимые телодвижения по восстановлению состояния пула (и, если надо - выполнить/ли нет те задачи, которые просрочены) - собственно в моем случае оно так и происходит. Естественно, я не буду спорить про "стандартность" или там еще какие-то характеристики такого подхода, но - оно работает. |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 7 Всего: 54 |
Может в вашем случае оно и работает, но не факт, что будет работать у кого-то ещё. Как правило, необходимость перезапускать сервер возникает только тогда, когда с ним творится что-нибудь непотребное, а в этот момент зачастую сделать уже ничего нельзя. Нельзя быть уверенным даже в исполнении shutdown hook'ов. И речь идет не о "стандартности", а о применимости. Управление потоками в J2EE недопустимо, а попытки делать это могут привести как раз к необходимости регулярно перезапускать сервера ![]() -------------------- ![]() ![]() |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
а мы вовсю используем. Например, нам надо в 5 утра каждый день делать нечто. Перезапуск сервера не помеха, надо просто правильно выставить время первого срабатывания таймера. Легко вычисляется на основании системного времени в момент рестарта сервера. Сервер рестартует и таймеры заново устанавливаются. |
|||
|
||||
sergakrem |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 28.7.2006 Где: Украина, г. Киев Репутация: нет Всего: нет |
Ну дык и что? Кто мешает сохранять состояние task-pool в момент изменения списка заданий? И ничего страшного не произойдет даже при том, что сервер вывалится потом, когда
Sorry, опять же, не согласен - все зависит от грамотности реализации. Не вижу ничего "недопустимого" в этом. Управление потоками - нормальная практика на любой платформе. |
|||
|
||||
w1nd |
|
||||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 7 Всего: 54 |
Лично мне мешает необходимость реализации этого самого taskpool'а, тогда как таймеры со всей необходимой инфраструктурой в J2EE 1.4 уже есть ![]()
На любой, кроме J2EE. Внутри сервера приложений это ненормальная практика. Если вы не видите ничего недопустимого - почитайте спецификацию. Если вам лень читать, то я примерно обрисую пару ситуаций:
-------------------- ![]() ![]() |
||||
|
|||||
sergakrem |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 28.7.2006 Где: Украина, г. Киев Репутация: нет Всего: нет |
Вобщем ясно
![]() Это уже попахивает "религиозной войной" в подходах. ![]() А если серьезно - просто обратите внимание на "достаточность" данного метода. То, о чем я говорю - простое и эффективное решение в контексте не гугловского масштаба запросов клиентов. Собственно, по-моему в конкретном, данном, вопросе кластеры и распределение нагрузки ни причем (KostenkoSergey, если я ошибаюсь - поправьте меня, и сорри всем остальным). Реализация такого пула - это дело десяти минут, хеш-мапа и шести методов. Т.ч. - это нормальная практика. А JMX для таких вещей по-моему сильно "жирно" ![]() |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 7 Всего: 54 |
Я уж не знаю, какими доводами мне воспользоваться, так что повторюсь. Не имеет значения, собираетесь ли вы разворачивать кластер или нет, есть ли вам дело до живучести сервера - если вы пишете J2EE приложение, вы должны придерживаться некоторых правил, определенных спецификацией. Если вас не устраивают существующие правила - пишете (или собираете - благо готовых компонентов для этого навалом) собственный сервер. Вторая мысль - считаю недальновидным игнорирование имеющегося инструментария и написание своих аналогов. На работе я за это людей наказываю ![]() З. Ы. Про "жирность": почему вы так считаете? Это сообщение отредактировал(а) w1nd - 23.9.2006, 01:28 -------------------- ![]() ![]() |
|||
|
||||
Lerm |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 7.12.2004 Где: Москва, Россия Репутация: 2 Всего: 4 |
Тут еще много зависит от используемого Application Server-а. Скажем, на WebLogic-е есть такая вещь, как отложенная доставка сообщения - при его посылке мы указываем время, когда оно должно быть доставлено: http://e-docs.bea.com/wls/docs81/jms/implement.html#1235262 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |