0

我目前正在研究如何最终创建一个能够监控在网站上运行的计划作业的 Web 应用程序。它是基于ATG的,我一直在研究很多 OOTB 组件,我认为我已经取得了一些进展,但是我真的缺乏 ATG 知识,因为我是一名实习生,只在 1 年内真正看过它/2个月。

我目前的想法是通过扩展SingletonSchedulableService将我的自定义代码挂钩到performScheduledTask但是所有当前计划的任务都在扩展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();
    }

}

我现在有点迷茫,因为我从来没有完全独自完成过一个网络应用程序,更不用说将它连接到这些预定的作业中,所以非常感谢任何帮助。如果您需要任何额外的信息,请告诉我。

4

2 回答 2

1

那么您是否考虑dyn/admin过用于此目的?有一个可以访问的页面,http://<your-host-name:<port>/dyn/admin/nucleus/atg/dynamo/service/Scheduler其中包含您正在寻找的大量信息。

此外,计划的组件具有内置的性能监视器,用于实现方法startOperationendOperation. 建议您考虑使用这些,而不是将您的代码挂钩到performScheduledTask()方法中。可以为计划组件上的属性启用/禁用性能监视器。

希望这可以帮助。

于 2015-11-19T15:08:38.737 回答
0

大多数 Oracle Commerce 站点将使用某种形式的日志监控来监控问题并发出警报,包括计划服务。Splunk 是一种流行的工具。

在识别对站点很重要的错误并为它们设置操作时,这可能是一个迭代过程。

如果您想留在 ATG 框架内,您可以扩展日志系统,创建一个新的 LogEvent 接收器,该接收器侦听来自特定 Originator 的消息,然后执行一些操作,例如发送电子邮件。

这是有关日志记录框架的文档。

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
  }

}

这样您就不会更改每个现有类中的任何代码,您只需选择您正在“监控”的服务

于 2016-05-25T12:28:20.223 回答