Wie verwende ich die Rückwärtsreplikation und was muss ich tun, um sicherzustellen, dass sie funktioniert?

Out-of-the box, only cq:Page Knoten sind rückwärts repliziert. Bei allen anderen Knoten müssen die beiden letzten Methoden als projektspezifische Implementierung verwendet werden.

Es gibt drei Möglichkeiten:

  • Verwenden Sie den SlingPostServlet (erstellen Sie also keine benutzerdefinierten Post-Servlets oder POST.jsp, um die eingehenden Anforderungen zu verarbeiten), damit er implizit ein zugehöriges PageEvent auslöst. Legen Sie anschließend den Eigenschaftsnamen „cq:distribute“ fest und bestimmen Sie den Wert der Knoten, die Sie rückwärts replizieren möchten, als „true“.
    • Zum Implementieren dieser Lösung ist es nicht erforderlich, Code zu schreiben. Sie können die Formkomponente verwenden, um alle erforderlichen ausgeblendeten Felder festzulegen.
  • Verwenden Sie Ihren eigenen Code, der auf das Repository zugreift, ändern Sie die Eigenschaften „cq:lastModified“, „cq:lastModifiedBy“ und „cq:distribute“.
    • Bereitgestellte Daten können gesteuert werden, interner Code schreibt die Daten.
    • Um diese Lösung zu implementieren, müssen Sie den Code für Ihr Projekt schreiben.
  • Verwenden Sie Ihren eigenen Code, der die Replikations-Methode vom Replikations-Service aufruft, wobei Optionen zur Verwendung des Distributions-Modus bestehen.
    • Die Replikation wird über Ihren Code gesteuert.
    • Schreiben Sie zum Implementieren dieser Lösung den für Ihr Projekt spezifischen Code.

Verwenden Sie Ihren eigenen Code, um eineRückwärtsreplikationslösung zu implementieren.

  • Fügen Sie den folgenden Code hinzu, um das Ereignis auszulösen, das mit der Seite verknüpft ist, die Sie rückwärtsreplizieren möchten (das Beispiel unten wurde einer Stichprobe aus PostDataServlet.java entnommen):
... // set the page to hide in the navigation Node pageContainer = newCommentPage.getContentResource().adaptTo(Node.class); pageContainer.setProperty("cq:lastModified", Calendar.getInstance()); pageContainer.setProperty("cq:lastModifiedBy", session.getUserID()); pageContainer.setProperty("cq:distribute", true); ... session.save(); ...

 

Anbei befindet sich ein Beispiel, das eine Komponente verwendetum die Form und den vorherigen Beitrag darstellt. Für jeden Beitrag erstellt sie eine Unterseite, die einen Paragrafen mit Text enthält. Dadurch stellen Sie sicher, dass Sie jeden Beitrag separat verwalten können (und Sie vermeiden Konflikte mit Beiträgen, die von anderen Veröffentlichungs-Instanzen generiert werden könnten). Der Speicherort wird im Komponentendialogfeld als Parameter definiert (das heißt /content/usergenerated/comments/form1, den Sie über einen Ordner im Site-Administrator erstellen können).

Auf der Autoreninstanz können Sie ein Workflow-Model definieren, das starten soll, wenn eine Seite unter ihrer Kommentar-Seite erstellt wird.

Stellen Sie sicher, dass Sie den Wert cq:distribute in Ihrem Workflow bereinigen, wenn Sie den Inhalt des Autors reaktivieren, um ihn zu veröffentlichen, andernfalls wird er in Endlosschleife geschaltet!

Stellen Sie auf der Veröffentlichungs-Instanz sicher, dass der Benutzer über ausreichende Rechte zum Erstellen von Inhalten verfügt. Wenn Sie mit anonymem Zugriff testen, ändern Sie die Rechte für den angegebenen jcr-Pfad entsprechend mit dem CRX-Explorer.

Hinweis zur Replikation

Damit die Replikation korrekt funktioniert, speichern Sie die Daten unter Berücksichtigung folgender Regeln:
(1) Der Knotentyp des replizierten (Stamm-) Knotens muss nt:hierarchyNode
erweitern. (2) Alle direkt untergeordneten Knoten, auf die nt:hierarchyNodes nicht zutrifft, müssen vereinigt werden.
(3) Die Teilbäume aller Knoten aus (2), außer der Knotentypen, müssen vereinigt werden.

Adobe empfiehlt, dass Sie das cq:Page (/jcr:content) als Container für Ihre Daten verwenden, da Sie es dann einfach verwalten und mit der Benutzeroberfläche verwenden können (siteadmin usw.). Sie können die Seite mithilfe des PageManager API erstellen.

Logs auf der Veröffentlichungsinstanz zeigen ausgehende Rückwärtsreplikation

07.04.2010 11:58:04.398 *INFO* [ReplicateOnModification Processor] class com.day.cq.replication.impl.queue.Queue.outbox Replication request queued for outbox at /content/usergenerated/comments/form1/c1270634282059-715. 07.04.2010 11:58:04.474 *INFO* [ReplicateOnModification Processor] com.day.cq.replication.impl.ReplicatorImpl Processed replication: setup 1ms, pre 275ms, build 41ms, queued 1ms, status 76ms, total 394ms 07.04.2010 11:58:04.474 *INFO* [ReplicateOnModification Processor] com.day.cq.wcm.core.impl.event.ReplicateOnModification Auto-Replicated ACTIVATE of /content/usergenerated/comments/form1/c1270634282059-715

Autor-Logs zeigen eingehende Rückwärtsreplikation an

07.04.2010 12:09:22.360 *INFO* [Reverse Replication Processor] com.day.cq.replication.Agent.publish_reverse Sending GET request to http://localhost:4503/bin/receive?sling:authRequestLogin=1 07.04.2010 12:09:22.384 *INFO* [Reverse Replication Processor] com.day.cq.replication.impl.AgentManagerImpl Created new repository content at /var/replication/data/publish_reverse/eed89cd3-a832-4833-bec7-7fa4e474c359 07.04.2010 12:09:22.385 *INFO* [Reverse Replication Processor] com.day.cq.replication.Agent.publish_reverse sent. Resonse: 200 OK 07.04.2010 12:09:22.385 *INFO* [Reverse Replication Processor] com.day.cq.replication.Agent.publish_reverse ------------------------------------------------ 07.04.2010 12:09:22.385 *INFO* [Reverse Replication Processor] com.day.cq.replication.Agent.publish_reverse Sending message to localhost:4503 07.04.2010 12:09:22.385 *INFO* [Reverse Replication Processor] com.day.cq.replication.Agent.publish_reverse >> GET /bin/receive HTTP/1.0 07.04.2010 12:09:22.385 *INFO* [Reverse Replication Processor] com.day.cq.replication.Agent.publish_reverse >> Action: {action} 07.04.2010 12:09:22.385 *INFO* [Reverse Replication Processor] com.day.cq.replication.Agent.publish_reverse >> Path: {path} 07.04.2010 12:09:22.385 *INFO* [Reverse Replication Processor] com.day.cq.replication.Agent.publish_reverse >> Handle: {path} 07.04.2010 12:09:22.385 *INFO* [Reverse Replication Processor] com.day.cq.replication.Agent.publish_reverse -- 07.04.2010 12:09:22.385 *INFO* [Reverse Replication Processor] com.day.cq.replication.Agent.publish_reverse << HTTP/1.1 200 OK 07.04.2010 12:09:22.385 *INFO* [Reverse Replication Processor] com.day.cq.replication.Agent.publish_reverse << Connection: Keep-Alive 07.04.2010 12:09:22.385 *INFO* [Reverse Replication Processor] com.day.cq.replication.Agent.publish_reverse << Server: Day-Servlet-Engine/4.1.8 07.04.2010 12:09:22.385 *INFO* [Reverse Replication Processor] com.day.cq.replication.Agent.publish_reverse << Content-Type: application/octet-stream 07.04.2010 12:09:22.385 *INFO* [Reverse Replication Processor] com.day.cq.replication.Agent.publish_reverse << Content-Length: 1486 07.04.2010 12:09:22.385 *INFO* [Reverse Replication Processor] com.day.cq.replication.Agent.publish_reverse << Date: Wed, 07 Apr 2010 10:09:22 GMT 07.04.2010 12:09:22.385 *INFO* [Reverse Replication Processor] com.day.cq.replication.Agent.publish_reverse Message sent. 07.04.2010 12:09:22.385 *INFO* [Reverse Replication Processor] com.day.cq.replication.Agent.publish_reverse ------------------------------------------------ 07.04.2010 12:09:22.385 *INFO* [Reverse Replication Processor] com.day.cq.replication.Agent.publish_reverse Reverse replication successful. 07.04.2010 12:09:22.460 *INFO* [Reverse Replication Processor] com.day.cq.replication.content.durbo.DurboImporter imported content in 68ms for durbo request on path: /content/usergenerated/comments/form1/c1270634936890-882

Herunterladen

 

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