gpt4 book ai didi

java - 激活页面时,sling eventhandler 仅 react 一次

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:50:38 24 4
gpt4 key购买 nike

当某些 cq5 页面被激活时,我使用以下代码记录一些信息。

@Component
@Service
@Property(name="event.topics",value= {ReplicationAction.EVENT_TOPIC})
public class ExampleEventHandler implements EventHandler {
Logger log = LoggerFactory.getLogger(this.getClass());
public void handleEvent(Event event) {
ReplicationAction action = ReplicationAction.fromEvent(event);

if(action.getType().equals(ReplicationActionType.ACTIVATE)){

log.info("test Event handler")
}
}
}

现在,当我激活页面时,此处理程序会使用react并记录字符串“test Event handler”。现在,当我第二次或第三次激活页面时,事件处理程序没有反应。我必须从 Felix 控制台重新启动 Service ExampleEventHandler,以便它再次使用react(一次)。

如何配置事件处理程序(或 ReplicationAction),以便 ExampleEventHandler 每次都使用react,当页面被激活而无需每次都重新启动服务 ExampleEventHandler?

最佳答案

我已经在我的 CQ5 实例中安装了您的组件,并且每次都运行良好。但是,如果您在事件处理程序中执行一些复杂、耗时的操作(而不是简单地记录事件),它可能会被 Apache Felix Event Admin 禁止。 .默认情况下,如果您的 handleEvent() 运行时间超过 5 秒,就会发生这种情况。

在这种情况下,您应该使用 JobUtil.processJob() 方法将事件传递给 JobProcessor:

@Component
@Service(value = EventHandler.class)
@Property(name = EventConstants.EVENT_TOPIC, value = { ReplicationAction.EVENT_TOPIC })
public class Test implements EventHandler, JobProcessor {

private static final Logger LOG = LoggerFactory.getLogger(Test.class);

@Override
public void handleEvent(Event event) {
ReplicationAction action = ReplicationAction.fromEvent(event);
if (action.getType().equals(ReplicationActionType.ACTIVATE)) {
JobUtil.processJob(event, this);
}
}

@Override
public boolean process(Event job) {
LOG.info("Do some complex logic here");
return true;
}
}

关于java - 激活页面时,sling eventhandler 仅 react 一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19282896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com