【问题标题】:Hit REST end point on startup - weblogic + ATG启动时点击 REST 端点 - weblogic + ATG
【发布时间】:2016-05-12 18:09:46
【问题描述】:

我有一个休息端点,它将启动将 XML 加载到内存的调度程序。每当我点击那个休息端点时,它就会将 XML 加载到内存中,并在准备好后返回 XML(需要 10 到 15 秒)。当再次访问同一个端点时,它将返回缓存的 XML。一切正常,但现在我必须手动点击端点才能启动调度程序。有没有办法在启动时通过简单的代码自动命中端点?或者有其他解决方案吗?

【问题讨论】:

  • 您是否在Initial.properties 中指定了调度程序?

标签: rest caching weblogic scheduler atg


【解决方案1】:

通常,Nucleus 中的组件在首次访问时被实例化,而不是在系统启动时。

在 ATG 中启动时完成任何操作的方法是创建您的组件,然后将其核心路径添加到 /Initial 组件中的初始服务列表中(或从许多其他 Initial 之一组件改变了它)

组件应该是全局范围的。因为 /Initial 在启动时被实例化,它引用的服务也将被实例化为依赖项。

如果您的组件是 POJO,则在组件启动时将调用无参数构造函数,然后将为每个属性调用 setX 方法,并在其属性文件中定义一个值。

如果你的组件是从通用服务扩展而来的,那么另外,beforeSetafterSet 方法将被调用,在调用 set 方法之前和之后,如果它们存在,最后将调用 doStartUp

这是 Nucleus 管理的组件基本生命周期的所有部分。

这为您提供了许多用于调用自定义代码的挂钩。

现在,在您的问题中,您询问如何在启动时调用 REST 端点。但是,我相信您真正想问的是如何确保在系统启动时执行特定的代码。 REST 端点是您今天从 Nucleus 外部手动触发它的方式。但这并不意味着如果要在启动时自动调用它就必须调用 REST 端点。

实现你想要的最简单的方法是

  • 定义一个扩展GenericService的类
  • 覆盖doStartUp 方法
  • 把你要执行的代码放在这个方法中,或者从这里调用另一个组件上的代码
  • 为类定义一个全局范围的组件
  • 将组件添加到 Initial 组件的 initialServices 属性中

重新启动服务器并检查您的代码是否在启动时被调用。放入一些调试语句,并在您的层中打开调试日志记录。

注意,您实际上可能还想考虑是否真的需要在系统启动时调用您的代码。初始服务中的任何内容都会增加服务器的启动时间。根据您的要求,最好在首次访问应用程序服务时执行此操作,而不是在服务器启动时执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-25
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多