吊索事件听力代码不起作用

时间:2013-05-03 16:51:13

标签: event-handling osgi apache-felix cq5 sling

我想对Sling Eventing有实用的知识,所以我试着编写代码。我写了一个代码,但我的吊索事件不起作用。我可以看到我的软件包在osgi felix控制台中处于活动状态,但它不是在监听事件。

任何建议。

2 个答案:

答案 0 :(得分:0)

package com.adobe.training.core;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.event.jobs.JobProcessor;
import org.apache.sling.jcr.resource.JcrResourceResolverFactory;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.day.cq.replication.ReplicationAction;
import com.day.cq.replication.ReplicationActionType;
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.PageManager;

@SuppressWarnings("deprecation")
@Service(value = EventHandler.class)
@Component(immediate = true)
@Property(name = "event.topics", value = ReplicationAction.EVENT_TOPIC)
public class ReplicationLogger implements EventHandler, JobProcessor {
    private static final Logger LOGGER = LoggerFactory.getLogger(ReplicationLogger.class);
    @Reference
    private JcrResourceResolverFactory jcrResourceResolverFactory;
    @Override
    public void handleEvent(Event event) {
        LOGGER.info("********handling event");
        process (event);
    }
    @Override
    public boolean process(Event event) {
        LOGGER.info("********processing job");
        ReplicationAction action = ReplicationAction.fromEvent(event);
        ResourceResolver resourceResolver = null;
        if (action.getType().equals(ReplicationActionType.ACTIVATE)) {
            try {
                resourceResolver = jcrResourceResolverFactory.getAdministrativeResourceResolver(null);
                final PageManager pm = resourceResolver.adaptTo(PageManager.class);
                final Page page = pm.getContainingPage(action.getPath());
                if(page != null) {
                    LOGGER.info("********activation of page {}", page.getTitle());
                }
            }
            catch (LoginException e) {
                e.printStackTrace();
            }
            finally {
                if(resourceResolver != null && resourceResolver.isLive()) {
                    resourceResolver.close();
                }
            }
        }
        return true;
    }
}

答案 1 :(得分:0)

我猜你没有bundle activate()方法。我们使用“@Activate”注释来表示它。

import org.apache.felix.scr.annotations.Activate
...
    @Activate
    void activate(ComponentContext context) {...}