TechSupport
Crownpeak employee
Crownpeak employee

Lesend angebundene Datenbanken

Es ist möglich, ein internes FirstSpirit Datenbankschema in mehreren Projekten zu nutzen.

Wie dies zu konfigurieren ist, wird ausführlich in dem FirstSpirit Blog Eintrag Connecting read-only Databases in a Multisite Scenario beschrieben.

Dieser Artikel geht auf die daraus resultierenden möglichen Probleme ein, die sich bei der Nutzung ergeben können.

Inhalte werden bei einer Veröffentlichung nicht berücksichtigt

Um dies zu verstehen ist es wichtig, dass man weiß, dass FirstSpirit bei einer Generierung immer den Zeitpunkt des Generierungsstarts berücksichtigt. Somit haben Änderungen am Projekt, die, während die Generierung ausgeführt wird, durchgeführt werden, keinerlei Auswirkungen auf die Generierung.

Weiterhin ist es möglich historische Generierungen durchzuführen (also von einem beliebigen Zeitpunkt in der Vergangenheit).

Um Beides zu gewährleisten setzt FirstSpirit den Startzeitpunkt einer Generierung immer auf den Zeitpunkt der letzten Änderung im Projekt, die vor dem definierten Zeitpunkt der Generierung durchgeführt wurde. Eine Änderung wiederum ist unter anderem jede Speicheroperation im Projekt, egal ob ein Datensatz geändert wird oder für einen Absatz ein Kommentar erfasst wird.

Bei lesend angebundenen Datenbanken werden die Änderungen an den Datensätzen aber in einem anderen Projekt durchgeführt. Solange in dem jeweiligen Projekt danach keine lokale Änderung durchgeführt wird, ist die Änderung an dem entsprechenden Datensatz (oder auch ein neuer Datensatz) für die entsprechende Generierung nicht gültig, auch wenn der entsprechende Datensatz als freigegeben im Projekt sichtbar ist.

Beispiel:

  • Redakteur A legt im Quellprojekt der Datenbank einen neuen Datensatz an
  • Redakteur B aktualisiert die Datenquellen Ansicht in einem Zielprojekt und referenziert daraus den neuen, noch nicht freigegeben Datensatz, speichert die Seite und gibt diese frei.
  • Redakteur A gibt den Datensatz nun frei.
  • Redakteur B aktualisiert erneut die Datenquellenansicht, sieht das der Datensatz nun freigegeben ist und startet eine Veröffentlichung.
  • Da der Zeitpunkt der letzten Änderung von Redakteur B vor der Freigabe des Datensatzes von Redakteur A liegt, wird der Datensatz in der Generierung nicht berücksichtigt werden.

Lösung:Sorgen Sie dafür, dass die Generierung einen Stand veröffentlicht, der “jetzt” gültig ist. Dazu gehen Sie folgendermaßen vor:

  • Öffnen Sie den ServerManager
  • Öffnen Sie die Projekteigenschaften
  • Wechseln Sie zur Auftragsverwaltung
  • bearbeiten Sie alle Aufträge, die das Projekt veröffentlichen [oder exakter, die Teile des Projektes mit den Datenbankinhalten aus dem Quellprojekt]
  • Fügen Sie vor der [ersten] Generierungsaktion eine Skriptaktion hinzu
  • Fügen Sie als Quelltext die folgenden Zeilen in das Skript ein:

context.getProject().createTag("Generation","needed for external database content",null);

context.setStartTime(new Date());

Die erste Zeile fügt dem Projekt einen Tag hinzu (mit dem Namen “Generation” und dem Kommentar "needed for external database content"). Dies ist eine Änderung, so dass Aufträge, die nach diesem Zeitpunkt starten, diesen Moment als letzte Ändeurng erkennen würden.

Leider ist der entsprechende Auftrag bereits gestartet, so das wir mit der zweiten Zeile FirstSpirit dazu bringen, den Startzeitpunkt dieses Auftrags neu zu berechnen (ausgehend von dem Zeitpunkt der Ausführung dieser zweiten Zeile, der einige Millisekunden nach dem Setzen des Tags liegt), so dass das Projekt nun auch kürzlich in dem Quellprojekt geänderte Datensätze berücksichtigt.

Datensätze werden im ContentCreator und über die Suche nicht gefunden

Der ContentCreator arbeitet suchzentriert und nutzt daher den Suchindex. Alle Elemente von FirstSpirit werden indiziert und in den Index aufgenommen. Sobald eine Änderung erfolgt, wird diese Änderung sofort neu indiziert und der Index aktualisiert, so dass die geänderten Informationen umgehend im Suchindex des entsprechenden Projektes zur Verfügung stehen.

Bei lesend angebundenen Datenbanken erfolgt die Änderung aber im Quellprojekt, so dass der Suchindex der Projekte, die die Datenbank lesend anbinden, die Änderungen nicht enthält, so dass diese weder gesucht noch im Content Creator genutzt werden können.

Lösung:

Es muss dafür gesorgt werden, dass jede Änderung an einem Datensatz im Quellprojekt dazu führt, dass der entsprechende Datensatz in allen Projekten, die die Datenbank lesend anbinden, neu indexiert wird. Dies kann entweder über einen Store Listener geschehen, der entsprechende Änderungen im Quellprojekt erkennt und dann die Indexierung in den anderen Projekten triggert, oder, wenn beispielweise nur freigegbeen Datensätez gefunden werden sollen, über den Freigabeworkflow, in dem ein entsprechendes Skript eingebunden wird.

Implementierungshinweis:

connection.adminService.projectStorage.rebuildSearchIndex(dataset);

Verlinkungen aus den Datensätzen bleiben erhalten bzw. werden nicht berücksichtigt

Auch dieses Problem ersteht dadurch, dass FirstSpirit beim Speichern interne Prozesse automatisch startet an der Stelle, an der die Änderung durchgeführt wird. Sobald eine Referenz gesetzt, geändert oder entfernt wird, so wird der Referenzgraph des entsprechenden Projektes aktualisiert.

Da dies nicht in den Projekten geschieht, die die Datenquelle lesend angebunden haben, muss dies manuell erfolgen. Hierbei kann die selbe Funktionalität verwendet werden wie bei der Aktualisierung des Suchindexes, wobei diesmal diese Funktionalität genutzt werden muss:

Implementierungshinweis (Verfügbar seit 5.2.309)

projRefAgent = context.requireSpecialist(ProjectReferencesAgent.TYPE);

projRefAgent.rebuildReferences(dataset);

Labels (1)