forum.bitel.ru http://forum.bitel.ru/ |
|
Событие - параметр изменен http://forum.bitel.ru/viewtopic.php?f=49&t=12695 |
Страница 1 из 1 |
Автор: | Dog [ 27 окт 2017, 22:28 ] |
Заголовок сообщения: | Событие - параметр изменен |
Использую обработку изменения параметра: Код: // После изменения if (event instanceof ParamChangedEvent) { ParamChangedEvent changedEvent = (ParamChangedEvent) event; con = Setup.getSetup().getDBConnectionFromPool(); processDao = new ProcessDAO(con); processTypeDao = new ProcessTypeDAO(con); processPrf = new Preferences((processTypeDao.getProcessType(processDao.getProcess(changedEvent.getObjectId()).getTypeId()).getProperties().getConfig())); /* * Постобработка времени работы */ if(changedEvent.getParameter().getId() == PARAM_WORKDATETIME){ handleWorkDateTimeAfter(changedEvent); } /* * Обрабатываем изменеине параметров для Гугл календаря */ if((Arrays.asList(GOOGLE_PARAMS_ID)).contains(changedEvent.getParameter().getId())){ handleGoogleParams(changedEvent); } } handleGoogleParams(changedEvent) выглядит вот так: Код: /** * Обработка параметров в гугл календаре * * @param changedEvent * @throws BGException */ private void handleGoogleParams(ParamChangedEvent changedEvent) throws BGException { String calendarId = processPrf.get("google.cal:calendarId", ""); if(!Utils.isEmptyString(calendarId)){ try { this.con.commit(); } catch (SQLException e) { log.error(e.getMessage(), e); } GoogleHandler googleHandler = new GoogleHandler(processDao.getProcess(changedEvent.getObjectId()), this.con, processPrf); googleHandler.processCalendar(); } } суть в том, что GoogleHandler видит старые значения параметров, но ведь перед запуском ParamChangedEvent в БД уже измененное значение или еще нет?? |
Автор: | Dog [ 28 окт 2017, 03:48 ] |
Заголовок сообщения: | Re: Событие - параметр изменен |
собственно проверка показывает, что в этот момент параметр в БД еще не менялся: Код: String query = "SELECT value FROM param_datetime WHERE id = '12337' AND param_id = '10'";
try { PreparedStatement ps = con.prepareStatement(query); ResultSet rs = ps.executeQuery(); while (rs.next()){ log.info("INDB:" + rs.getTime("value")); log.info("INEVENT:" + changedEvent.getValue() + " PRC:" + changedEvent.getObjectId() + " PAR:" + changedEvent.getParameter().getId()); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } 10-28/00:46:54 INFO [EventProcessor-pool-1-thread-1159] ParameterListener - INDB:14:00:00 10-28/00:46:54 INFO [EventProcessor-pool-1-thread-1159] ParameterListener - INEVENT:Fri Oct 27 07:00:00 MSK 2017 PRC:12337 PAR:10 |
Автор: | Администратор [ 29 окт 2017, 02:02 ] |
Заголовок сообщения: | Re: Событие - параметр изменен |
Оно новое в той же транзакции, а вы получаете новое соединение к БД из пула. А почему не получить его из события по getValue()? Либо получайте соединение из СonnectionSet, передаваемого в функцию обработчика. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |