【问题标题】:Changes to OSGi bundle not active until AEM restarted在 AEM 重新启动之前,对 OSGi 捆绑包的更改不活动
【发布时间】:2016-11-26 06:52:42
【问题描述】:

我有一个在 AEM / Apache Felix 内的 OSGi 包中运行的吊索 Servlet(和各种其他组件)。

例如:

@SlingServlet(
        label = "XXXX - SSO Post Servlet",
        metatype = true,
        methods = {"POST"},
        name = "XXXX.core.components.SlingPostServlet",
        paths = {"/services/SSOPost"}
)
public class SlingPostServlet extends SlingAllMethodsServlet {
  //etc

我的组件按预期工作,maven 能够很好地构建、捆绑和部署整个项目。

我的问题是,在我重新启动整个 AEM 实例之前,我的组件更新不会被激活。我已经尝试过刷新 OSGi 包、重新启动包以及尽可能多的可能的 UI 操作来实现此效果,但没有运气。

有什么想法吗?我希望它是一个我不知道的简单配置问题/按钮。

谢谢。

【问题讨论】:

  • 你在安装更新包的时候看到/system/sling/installer/jcr/pauseInstallation这个路径下的节点了吗?
  • @SharathMadappa 不,安装前后该路径下根本没有节点。
  • 构建更新后的代码后,打开JcrInstaller的配置并保存(目的是让JcrInstaller的activate方法触发)。这是否与重新启动实例 w.r.t 更新组件具有相同的效果?
  • 您如何将捆绑包部署到实例?通过 Maven 插件还是手动?您的组件是否也有与之关联的任何 OSGI 属性?通常属性绑定到特定版本的 jar 并且可能需要通过配置管理器取消绑定以实际反映更改。
  • 我们需要更多信息,什么版本的 AEM?你能在一个新的干净项目中复制这种行为吗?你能在一个新的干净实例中复制它吗?你必须开始一个消除过程来缩小问题的范围。

标签: maven osgi aem apache-felix


【解决方案1】:

尝试先删除旧 jar,然后部署新 jar。大多数时候这对我有用,但并非总是如此。

【讨论】:

    【解决方案2】:

    捆绑包已启动,但事件可能未激活。它应该在实际使用服务时被激活。我们可以使用@Component(immediate=true)注解在bundle启动时激活组件

    【讨论】:

    • 我真的希望这是正确的,但还不是完全正确... (immediate=true) 属性对于 \@SlingServlet 注释无效,并且类不能是 \@据我所知,SlingServlet 和一个 \@Component 同时存在。
    猜你喜欢
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 2019-02-05
    • 2020-07-20
    • 1970-01-01
    相关资源
    最近更新 更多