Standard-Engine (Engine std)
In der Standard-Engine werden Funktionen zum dateiorientierten Dokumentenmanagement implementiert. Das sind insbesondere Funktionen zum Speichern und Laden von Dokumenten, zur Archivierung und zur Realisierung des Dokumentenaustausches zwischen mehreren Servern.
Der Standard-Engine unterliegt die Verwaltung des Work-, Cache- und Archivbereichs des Applikationsservers.
3. Interne Jobs
Die internen Jobs werden im Allgemeinen nur von der Standard-DMS-Engine selbst verwendet.
6. Capture- und Processing-Messages (CP)
6.1. Mechanismus
Der Content- und Processing-Mechanismus (CP) realisiert die asynchrone Übergabe von Aufträgen
zwischen dem enaio®-Server und externen Service-Instanzen — typischerweise dem Volltext-Indexer,
dem Rendition-Cache und dem Page-Count-Service. Die Aufträge werden serverseitig in der Tabelle
oscpmqueue gehalten und von den Service-Instanzen per
Pull-Verfahren abgeholt und nach Verarbeitung wieder quittiert.
Jeder Auftrag (CP-Message) ist über eine MessageGUID identifiziert und einer logischen
Queue (Spalte queuename) zugeordnet. Eine Service-Instanz identifiziert sich gegenüber dem
Server über einen ServiceName (Instanz-ID) und holt Aufträge gezielt aus einer oder mehreren
benannten Queues ab.
6.2. Lebenszyklus einer Nachricht
-
Erzeugen — Aufträge werden serverseitig in
oscpmqueueeingefügt — entweder explizit überstd.CreateCPMessagesoder durch interne Trigger (z. B. nach Indexdatenänderung).lock_servicebleibt zunächstNULL; die Nachricht ist damit unreserviert. -
Abholen — Eine Service-Instanz ruft std.GetNextCPMessage zyklisch auf. Der Server reserviert ggf. eine Nachricht für diese Instanz und liefert
MessageGUID,ObjectID,ObjectTypeundQueueNamezurück. Eine leere Antwort (MessageGUIDleer, Rückgabewert dennoch0) ist regulär — sie signalisiert lediglich, dass in den abgefragten Queues aktuell keine freie Nachricht vorliegt. -
Verarbeiten — Die Service-Instanz arbeitet den Auftrag ab. Typische Folge-Jobs sind std.GetCPObjectInfo für die Objektmetadaten und std.GetCPObjectIdxFulltext für den extrahierten Volltext eines Objekts.
-
Quittieren — Nach Abschluss meldet die Service-Instanz das Ergebnis über std.DispatchCPMessage mit
Reasonzurück. Der Server entfernt die Nachricht aus der Queue oder hält sie zur erneuten Verarbeitung bereit, je nach Begründung. OhneDispatch-Aufruf bleibt die Nachricht mit gesetztemlock_servicereserviert liegen. -
Reset — Bricht eine Service-Instanz ab oder startet sie neu, kann sie mit std.ResetServiceCPMessages sämtliche von ihr gehaltenen Reservierungen freigeben — die Aufträge stehen damit wieder anderen Instanzen zur Abholung zur Verfügung.
Zusätzlich meldet der Rendition-Service über std.CPRenditionChanged eine geänderte Rendition zurück an den Server, was wiederum neue Volltext-Messages erzeugen kann.
6.3. Auswahl- und Sperrverhalten
Aus den unreservierten Nachrichten der angefragten Queue wählt der Server diejenige mit dem
jüngsten Eintrag (MAX(created)) — also die neueste Nachricht zuerst.
Die Reservierung erfolgt über optimistisches Locking: lock_service und eine zufällig
erzeugte checkguid werden nur gesetzt, wenn die Nachricht im Moment des Updates noch
unreserviert ist. Anschliessend prüft der Server die zurückgelesene checkguid gegen den
eigenen Wert. Stimmen sie nicht überein — etwa weil eine andere Service-Instanz
zeitgleich reserviert hat — gilt der Pickup als verloren, und die Service-Instanz erhält eine
leere Antwort.
6.4. Zusammenführen redundanter Nachrichten
Beim erfolgreichen Abholen einer Nachricht löscht der Server alle weiteren noch
unreservierten Nachrichten für dasselbe (osid, queuename)-Paar. Mehrfach in kurzer Zeit für
dasselbe Objekt ausgelöste Aufträge werden so automatisch zu einer einzigen Verarbeitung
zusammengeführt; die Service-Instanz arbeitet stets auf dem aktuellsten Stand.
6.5. Bekannte Queues
| Queue | Typischer Konsument | Aufgabe |
|---|---|---|
|
Volltext-Indexer |
Objekt für die Volltext-Indexierung anmelden. |
|
Volltext-Indexer |
Volltext-Dokument indexieren (Inhalt aus dem Volltext-Cache lesen und in den Index aufnehmen). |
|
Volltext-Indexer |
Filter-/Vorverarbeitungsschritt vor der Indexierung. |
|
Volltext-Indexer |
Standort-/Container-Indexierung (typisch für Ordnerobjekte). |
|
Volltext-Indexer |
Index-Eintrag für ein gelöschtes Objekt entfernen. |
|
Rendition-Cache |
Rendition (z. B. PDF-/Text-Extraktion) für ein Dokument erzeugen. |
|
Rendition-Cache |
Rendition-Cache zurücksetzen und neu aufbauen. |
|
Page-Count-Service |
Seitenanzahl eines Dokuments ermitteln und im Index hinterlegen. |
| Eine Service-Instanz kann mehrere Queues gleichzeitig bedienen; die Zuordnung „Queue → Konsument" oben spiegelt die typische Konfiguration wider und wird vom Server nicht erzwungen. |
7. Nicht dokumentierte Endpunkte
Folgende Jobs werden vom enaio®-Server in der std-Engine bereitgestellt, sind in dieser Dokumentation aber derzeit nicht beschrieben:
- Capture- und Processing-Messages (CP)
-
std.GetCPMessageStatistics,std.GetCPObjectFulltext,std.ProcessPageCountCPMessages,std.ResetCPMessage,std.ResetSelectiveCPMessages - Work-Verzeichnis
-
std.CopyInWork,std.DeleteInWork - Archivierung und Status
-
std.SetArchivableFlag,std.StoreInArchive - Volltext
-
std.DeleteFulltext - Sonstige Datei- und Dokumentverwaltung
-
std.CalcDocumentMimeType,std.ConfigMedienExt,std.CopyRemark,std.DirectTransformObject,std.GetDocSize,std.GetDocumentRetentions,std.GetDocumentsForAxachash,std.GetMediumSizes,std.GetMigrationObjectInfo,std.GetNextInteger,std.GetVarcInformation