java - 激活页面时,sling 事件处理程序仅响应一次

标签 java event-handling aem sling

当某些 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”。现在,当我第二次或第三次激活页面时,事件处理程序不会使用react。我必须从 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 事件处理程序仅响应一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19282896/

相关文章:

javascript - 如何在按键时重新评估计算值?

java - 如何对副作用逻辑进行单元测试

adobe - 在 CQ5 中不激活页面的情况下启动页面激活工作流

AEM URL 重写

java - 在哪里可以下载 JNLP 1.2?

java - JSF2 枚举 h :selectOneMenu

Java从属性文件yaml中存储和读取字节数组

java - 将字符串文字拆分成多行

javascript - :onchange event causing loop thru method

java - 如何为Android/Java实现多个事件