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/