Создание пользовательского монитора запланированных заданий ATG

В настоящее время я изучаю, как я мог бы в конечном итоге создать веб-приложение, которое могло бы отслеживать запланированные задания, которые выполняются на веб-сайте. Он основан на ATG, и я просматривал множество компонентов OOTB, и я думал, что достиг чего-то с этим, однако мне действительно не хватает знаний о ATG, так как я студент, который только действительно смотрел на это должным образом в течение 1/2 месяцев.

Моя текущая мысль состоит в том, чтобы подключить мой пользовательский код к performScheduledTask, расширив SingletonSchedulableService, однако все текущие запланированные задачи расширяют SingletonSchedulableService, и это не так. Не кажется ли вам хорошей идеей зайти в каждый (более 30) java-файлов и изменить их? Я действительно не уверен в этом.

Следующий код является грубым представлением того, что я хотел бы получить, используя уже существующую performScheduledTask, добавив в нее свой собственный код. Когда вызывается doScheduledTask, я отправляю сообщение о том, что оно начинается, а когда оно заканчивается, вижу, была ли ошибка или нет, и отправляю подходящее сообщение.

public void performScheduledTask(Scheduler scheduler, ScheduledJob job) {
    boolean gotLock = false;

    try {
        gotLock = acquireLock();

        if (gotLock) {
            if (isLoggingDebug())

            try {
                startTime= getJobTime();
                sendToStart(name, description, id, startTime);
                doScheduledTask(scheduler, job);

            } catch (Exception e){ 
                errorMsg= e.getMessage();
            }

            if (mErrorMessage == null) {
                endTime= getJobTime();
                String msg= "This job completed successfully";
                sendToSuccess(name, description, id, endTime, msg);
            } else {
                endtime = getJobTime();
                sendToFail(name, description, id, endtime, msg);
            }

        } else if (isLoggingDebug())
            logDebug("sleeping until next scheduled wakeup.");

    } finally {
        if (gotLock) 
            releaseLock();
    }

}

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


person justBecca    schedule 26.10.2015    source источник


Ответы (2)


Итак, вы рассматривали возможность использования dyn/admin для этой цели? Существует страница, к которой можно получить доступ http://<your-host-name:<port>/dyn/admin/nucleus/atg/dynamo/service/Scheduler и на которой есть много информации, которую вы ищете.

Кроме того, запланированные компоненты имеют встроенный монитор производительности, в котором реализованы методы startOperation и endOperation. Рекомендую вам взглянуть на их использование вместо того, чтобы подключать свой код к методу performScheduledTask(). Монитор производительности можно включить или отключить для свойства запланированного компонента.

Надеюсь это поможет.

person bated    schedule 19.11.2015
comment
Привет, спасибо за ваш ответ. Планировщик в dyn / admin — это то, как он выглядит в настоящее время, однако это не дает никаких указаний на то, не удалось ли выполнить задание или оно было выполнено успешно, что мое веб-приложение (надеюсь) решит. Я обязательно изучу операцию запуска и операцию завершения, я смотрел на нее ранее, но не думал, что это правильно, поэтому я вернусь к ней. Еще раз спасибо, что вернулись ко мне. - person justBecca; 19.11.2015
comment
Понял. Я бы порекомендовал вам подумать о реализации чего-то вроде JMX/SNMP в ваших запланированных компонентах. Это будет означать, что вы не будете создавать интерфейс в ATG, а скорее настроите любой инструмент, который ваша компания использует для мониторинга. - person bated; 19.11.2015
comment
Привет, вы имеете в виду добавление функциональности к каждой работе? В настоящее время у нас нет ничего, что отслеживало бы запланированные задания — мы просто узнали примерно через неделю, что что-то пошло не так, и мы не знаем, когда! - person justBecca; 20.11.2015
comment
ps извините, если мои вопросы глупы, я учусь на стажировку и не понимаю ее!! ха - person justBecca; 20.11.2015
comment
@RebeccaWilde, короткий ответ: да, вставьте функциональность в каждое задание или запланированный компонент (терминология ATG). Если вы внедрите JMX/SNMP, это программное обеспечение для мониторинга сможет прослушивать широковещательные передачи SNMP (сначала проконсультируйтесь с кем-нибудь из операционной группы!). Это, вероятно, потребует создания нового компонента ATG (класс java + файл свойств = компонент), который реализует функциональность JMX/SNMP. Затем вы можете изменить соответствующие запланированные компоненты, чтобы использовать новый вещатель SNMP для отправки информации о запланированных событиях. Я бы порекомендовал вам обсудить это с архитектором. Удачи! - person bated; 20.11.2015

Большинство сайтов Oracle Commerce будут использовать ту или иную форму мониторинга журналов для отслеживания и оповещения о проблемах, включая запланированные службы. Splunk — популярный инструмент.

Это может быть немного итеративный процесс выявления ошибок, важных для сайта, и настройки действий для них.

Если вы хотите остаться в рамках ATG, вы можете расширить систему ведения журналов, создав новый приемник LogEvent, который прослушивает сообщения от определенного отправителя, а затем выполняет некоторые действия, например отправку электронной почты.

Вот документация по структуре ведения журнала.

https://docs.oracle.com/cd/E41069_01/Platform.11-0/ATGPlatformProgGuide/html/s1102logevents01.html

Другим подходом может быть расширение каждого из запланированных классов обслуживания и установка атрибута $class службы для вашего нового класса. Таким образом, вы можете «перехватывать» вызовы PerformScheduledTask и добавлять свою логику, перехватывать исключения и т. д.

performScheduledTask(..){

  try{
    super.performScheduledTask()
  }catch(SomeException ex){
     //Do something with it
  }

}

Таким образом, вы не меняете код в существующих классах, и вы можете просто выбрать, какие службы вы «отслеживаете».

person MrPsion    schedule 25.05.2016