Frage

Wie kann ich einen Replikations-Ereignis-Listener implementieren?

Antwort, Auflösung

  1. Erstellen Sie eine Klasse, die EventHandler -Schnittstellen implementiert.
  2. Fügen Sie die folgenden SCR-Anmerkungen hinzu
     @scr.component metatype="false" immediate="true" @scr.service interface="org.osgi.service.event.EventHandler" @scr.property name="event.topics" valueRef="ReplicationAction.EVENT_TOPIC" 
    
  3. Implementieren Sie die public void handleEvent(Event event)-Methode.

Beispiel

In diesem einfachen Beispiel wird der Geometrixx-Anwendung ein Replikations-Ereignis-Listener hinzugefügt. Es protokolliert nur die Ereignisse, die es empfängt.

  1. Öffnen Sie CRXDE
  2. Fügen Sie die folgende Klassenimplementierung hinzu. Stellen Sie sicher, dass Sie es im richtigen Ordner unter /apps/geometrixx/src/impl/src/main/java basierend auf dem Paketnamen speichern.
    package com.day.cq.wcm.apps.geometrixx.impl; import org.osgi.service.event.Event; import com.day.cq.workflow.event.WorkflowEvent; import org.osgi.service.event.EventHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.day.cq.replication.ReplicationAction; /** * This is an example listener that listens for replication events and * logs a message. * * @scr.component metatype="false" immediate="true" * @scr.service interface="org.osgi.service.event.EventHandler" * @scr.property name="event.topics" valueRef="ReplicationAction.EVENT_TOPIC" */ public class ReplicationEventListener implements EventHandler { /** * default logger */ private static final Logger log = LoggerFactory.getLogger(ReplicationEventListener.class); public void handleEvent(Event event) { String n[] = event.getPropertyNames(); log.info(""); log.info("Event occurred: {}", event.getProperty(WorkflowEvent.EVENT_TYPE)); log.info("Event properties: "); for(String s : n) { log.info(s + " = " + event.getProperty(s)); } ReplicationAction action = ReplicationAction.fromEvent(event); if(action != null) { log.info("Replication action {} occured on {} ", action.getType().getName(), action.getPath()); } log.info(""); } } 
    
  3. Klicken Sie mit der rechten Maustaste auf die Datei com.day.cq.wcm.cq-wcm-geometrixx.bnd unter /apps/geometrixx/src/impl/src/main/java und wählen Sie Build->Build Bundle Dies sollte das geometrixx-Bundle in der CQ-Instanz erstellen und neu starten, mit der Ihr CRXDE verbunden ist.
    • Hinweis: Wenn Sie com.day.cq.wcm.cq-wcm-geometrixx.bnd nicht sehen, klicken Sie mit der rechten Maustaste auf pom.xml und wählen Sie Build->Generate .bnd file.
  4. Um festzustellen, ob Ihr neuer Ereignis-Auflister bereitgestellt wurde, klicken Sie in der Felix-Konsole auf die Registerkarte „Komponenten“ und vergewissern Sie sich, dass com.day.cq.wcm.apps.geometrixx.impl.ReplicationEventListener vorhanden ist.

Um Ihren Reproduktions-Auflister zu testen, aktivieren Sie eine Seite in CQ und prüfen Sie die „crx-quickstart/logs/error.log“-Protokolldatei in Ihrer CQ-Installation. Standardmäßig sollte die Protokollierung von Code, der in CQ bereitgestellt wird, dort vorhanden sein. Sie sollten Meldungen sehen, die folgendem Beispiel ähneln:

16.07.2010 13:01:32.525 *INFO* [Thread-5560] com.day.cq.wcm.apps.geometrixx.impl.ReplicationEventListener 16.07.2010 13:01:32.525 *INFO* [Thread-5560] com.day.cq.wcm.apps.geometrixx.impl.ReplicationEventListener Event occurred: null 16.07.2010 13:01:32.525 *INFO* [Thread-5560] com.day.cq.wcm.apps.geometrixx.impl.ReplicationEventListener Event properties: 16.07.2010 13:01:32.525 *INFO* [Thread-5560] com.day.cq.wcm.apps.geometrixx.impl.ReplicationEventListener event.topics = com/day/cq/replication 16.07.2010 13:01:32.525 *INFO* [Thread-5560] com.day.cq.wcm.apps.geometrixx.impl.ReplicationEventListener path = /content/geometrixx/en/news/webcasts 16.07.2010 13:01:32.525 *INFO* [Thread-5560] com.day.cq.wcm.apps.geometrixx.impl.ReplicationEventListener type = ACTIVATE 16.07.2010 13:01:32.526 *INFO* [Thread-5560] com.day.cq.wcm.apps.geometrixx.impl.ReplicationEventListener modificationDate = java.util.GregorianCalendar[time=1279310491837,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="America/Los_Angeles",offset=-28800000,dstSavings=3600000,useDaylight=true,transitions=185,lastRule=java.util.SimpleTimeZone[id=America/Los_Angeles,offset=-28800000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2010,MONTH=6,WEEK_OF_YEAR=29,WEEK_OF_MONTH=3,DAY_OF_MONTH=16,DAY_OF_YEAR=197,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=1,HOUR_OF_DAY=13,MINUTE=1,SECOND=31,MILLISECOND=837,ZONE_OFFSET=-28800000,DST_OFFSET=3600000] 16.07.2010 13:01:32.526 *INFO* [Thread-5560] com.day.cq.wcm.apps.geometrixx.impl.ReplicationEventListener event.distribute = 16.07.2010 13:01:32.526 *INFO* [Thread-5560] com.day.cq.wcm.apps.geometrixx.impl.ReplicationEventListener userId = admin 16.07.2010 13:01:32.526 *INFO* [Thread-5560] com.day.cq.wcm.apps.geometrixx.impl.ReplicationEventListener Replication action Activate occured on /content/geometrixx/en/news/webcasts 16.07.2010 13:01:32.526 *INFO* [Thread-5560] com.day.cq.wcm.apps.geometrixx.impl.ReplicationEventListener 

 

Gilt für

CQ5.3

 

Andere Verwandte Artikel:

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie