在启动时点击REST终点 - weblogic + ATG

时间:2016-05-12 18:09:46

标签: rest caching weblogic scheduler atg

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

如果您的组件是从通用服务扩展的,那么另外,将调用setXbeforeSet方法,在调用set方法之前和之后,如果它们存在,最后{{1}将被调用。

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

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

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

实现目标的最简单方法是

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

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

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