Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Отправка электронного сообщения пользователю при наступлении срока / 10 сообщений из 10, страница 1 из 1
10.12.2015, 17:39
    #39125175
Konstantin_d
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка электронного сообщения пользователю при наступлении срока
Добрый день!

Помогите советом или примером.

Есть web-приложение, которое запускается через TomCat. Пользователи используют web-приложение по мере необходимости. В web-приложение пользователи вносят некие мероприятия и устанавливают сроки исполнения их.
Мне нужно добавить в web-приложение функционал, который бы отправлял электронное сообщение на почтовый адрес пользователя при наступлении срока исполнения мероприятия.
Как отправить сообщение на почтовый адрес в сети более или мания описано. Но не отказался бы от рабочего примера.
Не понятно как контролировать момент отправки сообщения (например: проверять срок каждый пол дня), если приложения запускается по необходимости, а не крутится целый день. TomCat запущен всегда.

Не судите строго. Если что то не понятно, пишите, напишу подробней.
...
Рейтинг: 0 / 0
10.12.2015, 18:01
    #39125207
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка электронного сообщения пользователю при наступлении срока
Konstantin_dзапускается по необходимости, а не крутится целый день.
либо
- новое приложение и оно крутится целый день для проверки "Наступило"
либо
- есть пакеты в БД делающие то же самое
...
Рейтинг: 0 / 0
10.12.2015, 18:03
    #39125210
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка электронного сообщения пользователю при наступлении срока
Konstantin_d,

Ключевое слова Scheduler и Timer
Quartz Scheduler - то что хорошо интегрируется в JEE контейнер
cron - системный, не зависит от вашего сервера
Windows Task Scheduler - системный, не зависит от вашего сервера
ScheduledExecutorService - можно использовать, но возможны утечки при редеплое
java.util.Timer - тоже чреват косяками и вообще не удобен
EJB Timer Service - его нет в томкате, только отдельной либой ставить
Spring Scheduler - тоже всякое умеет, легко менять реализацию скедулера, нужен Spring

В идеале расписание же нужно персистить. Поэтому остаётся Quartz и системные скедулеры. И опять же и то и другое надо синхронизировать с записями в БД.

С другой стороны нафига нужна точность? Нафиг не нужна. Запускаем любой Job с переодичностью в N минут, делаем выборку мероприятий с фильтрацией по времени и по результату отправляем письма. С таким подходом можно любой из вышеописаных скедулеров прикрутить. Но в этом случае системные уже становятся совсем не удобными.

Выбирать вам.
...
Рейтинг: 0 / 0
10.12.2015, 23:09
    #39125411
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка электронного сообщения пользователю при наступлении срока
BlazkowiczScheduledExecutorService - можно использовать, но возможны утечки при редеплое.
это решаемо
...
Рейтинг: 0 / 0
12.12.2015, 15:52
    #39126406
Konstantin_d
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка электронного сообщения пользователю при наступлении срока
Спасибо за информацию. Буду разбираться.
...
Рейтинг: 0 / 0
21.12.2015, 17:26
    #39133549
Konstantin_d
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка электронного сообщения пользователю при наступлении срока
Решил использовать Quartz Scheduler. Посмотрел примеры, интегрировал в своё приложения планировщик.
Планировщик работает, только с ошибками при старте.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
15/12/21 16:45:31 log4j:ERROR Failed to excute sql
15/12/21 16:45:31 java.sql.SQLException: ORA-00917: missing comma
15/12/21 16:45:31 	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:137)
15/12/21 16:45:31 	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:304)
15/12/21 16:45:31 	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:271)
15/12/21 16:45:31 	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:625)
15/12/21 16:45:31 	at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:112)
15/12/21 16:45:31 	at oracle.jdbc.driver.T4CStatement.execute_for_rows(T4CStatement.java:560)
15/12/21 16:45:31 	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1153)
15/12/21 16:45:31 	at oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java:1578)
15/12/21 16:45:31 	at org.apache.log4j.jdbc.JDBCAppender.execute(JDBCAppender.java:178)
15/12/21 16:45:31 	at org.apache.log4j.jdbc.JDBCAppender.flushBuffer(JDBCAppender.java:250)
15/12/21 16:45:31 	at org.apache.log4j.jdbc.JDBCAppender.append(JDBCAppender.java:146)
15/12/21 16:45:31 	at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
15/12/21 16:45:31 	at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
15/12/21 16:45:31 	at org.apache.log4j.Category.callAppenders(Category.java:203)
15/12/21 16:45:31 	at org.apache.log4j.Category.forcedLog(Category.java:388)
15/12/21 16:45:31 	at org.apache.log4j.Category.log(Category.java:853)
15/12/21 16:45:31 	at org.apache.commons.logging.impl.Log4JLogger.info(Log4JLogger.java:152)
15/12/21 16:45:31 	at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1014)
15/12/21 16:45:31 	at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1152)
15/12/21 16:45:31 	at ebd.Session.AppListener.contextInitialized(AppListener.java:93)
15/12/21 16:45:31 	at com.evermind.server.http.HttpApplication.initDynamic(HttpApplication.java:1009)
15/12/21 16:45:31 	at com.evermind.server.http.HttpApplication.<init>(HttpApplication.java:549)
15/12/21 16:45:31 	at com.evermind.server.Application.getHttpApplication(Application.java:890)
15/12/21 16:45:31 	at com.evermind.server.http.HttpServer.getHttpApplication(HttpServer.java:707)
15/12/21 16:45:31 	at com.evermind.server.http.HttpSite.getApplication(HttpSite.java:438)
15/12/21 16:45:31 	at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:455)
15/12/21 16:45:31 	at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:285)
15/12/21 16:45:31 	at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:126)
15/12/21 16:45:31 	at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192)
15/12/21 16:45:31 	at java.lang.Thread.run(Thread.java:534)



У меня в приложении используется log4j который пишет в БД.
Получается Quartz Scheduler пытается с log4j работать? Как это отключить или настроить. Подскажите?
...
Рейтинг: 0 / 0
21.12.2015, 17:34
    #39133565
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка электронного сообщения пользователю при наступлении срока
Konstantin_dПолучается Quartz Scheduler пытается с log4j работать?
может это Планировщик запускает приложение, а приложение работает с логгером? ))
...
Рейтинг: 0 / 0
21.12.2015, 17:54
    #39133601
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка электронного сообщения пользователю при наступлении срока
Petro123Konstantin_dПолучается Quartz Scheduler пытается с log4j работать?
может это Планировщик запускает приложение, а приложение работает с логгером? ))по стектрейсу видно кто использует логгер
...
Рейтинг: 0 / 0
22.12.2015, 17:28
    #39134928
Konstantin_d
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка электронного сообщения пользователю при наступлении срока
При выполнении конструкции
Код: java
1.
Scheduler scheduler = new StdSchedulerFactory().getScheduler();

появляются данные ошибки. И в логах (те что я через log4j пиши в БД) есть информация от Quartz Scheduler.

Если не использовать Quartz Scheduler, ошибок нет. Как сделать, чтобы Quartz Scheduler не писал через используемый в моём приложении log4j?
...
Рейтинг: 0 / 0
22.12.2015, 17:37
    #39134946
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка электронного сообщения пользователю при наступлении срока
Konstantin_dКак сделать, чтобы Quartz Scheduler не писал через используемый в моём приложении log4j?
Можно просто Appender для него прописать отдельный и писать в файл, а не базу.
Странная вообще глобальная конфигурация, которая не работает.
Судя по стеку Quartz пишет в Commons Logging. Значит и его можно сконфигурять в нужный вам log.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Отправка электронного сообщения пользователю при наступлении срока / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]