【问题标题】:Creating a custom Scheduled Job monitor ATG创建自定义计划作业监视器 ATG
【发布时间】:2015-10-26 12:24:53
【问题描述】:

我目前正在研究如何最终创建一个能够监控在网站上运行的计划作业的 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();
    }

}

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

【问题讨论】:

    标签: java scheduled-tasks atg oracle-commerce


    【解决方案1】:

    那么您是否考虑过为此目的使用dyn/admin?有一个页面可以访问http://<your-host-name:<port>/dyn/admin/nucleus/atg/dynamo/service/Scheduler,里面有很多你正在寻找的信息。

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

    希望这会有所帮助。

    【讨论】:

    • 您好,感谢您的回答。 dyn/admin 中的调度程序是它当前的查看方式,但是这并不能说明作业是否失败或是否成功运行,这是我的 Web 应用程序将(希望)解决的问题。我肯定会研究开始操作和结束操作,我之前看过但认为它不正确,所以我会回到它。再次感谢您回复我。
    • 明白。我建议你考虑在你的计划组件中实现类似 JMX/SNMP 的东西。这意味着您不会在 ATG 中创建界面,而是配置您公司用于监控的任何工具。
    • 您好,您的意思是为每个作业添加功能吗?我们目前没有任何监控计划的作业 - 我们只是在大约一周后发现某些事情失败了,我们不知道什么时候!
    • ps 对不起,如果我的问题很愚蠢,我是一个超出她深度的安置学生!哈哈
    • @RebeccaWilde 简短的回答是肯定的,在每个“作业”或计划组件(ATG 术语)中插入功能。如果您实施 JMX/SNMP,此监控软件将能够侦听 SNMP 广播(首先与运营团队中的某个人核实!)。这可能涉及创建一个新的 ATG 组件(java 类 + 属性文件 = 组件),它实现了 JMX/SNMP 功能。然后,您将更改相应的计划组件以使用新的 SNMP 广播器发送计划的事件信息。我建议你与建筑师讨论这个问题。祝你好运!
    【解决方案2】:

    大多数 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
      }
    
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-05-27
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 2021-12-05
      相关资源
      最近更新 更多