Programmiermodell der Enterprise ChangeSets

Die onion.net Enterprise ChangeSets stellen eine eigenständige Umgebung für eine länger andauernde Datenmanipulation dar. Sie ist ein wichtiger Teil des Redaktionsworkflows, in dem mehrere Redakteure einen beliebig komplexen Pflegeauftrag über einen beliebigen Zeitraum durchführen. Das Konzept ähnelt dem der Datenbanktransaktion, ergänzt es jedoch um die Langlebigkeit und die Zuarbeit durch beliebig viele Prozesse (oder Benutzer). In Enterprise ChangeSets lässt sich kein Konfliktzustand herstellen, bzw. speichern. Sie sind stets untereinander kombinierbar und können garantiert publiziert oder verworfen werden. Die Datenkonsistenz unterliegt dabei denselben Gesetzen, dem auch der Live-Datenbestand folgt.

Enterprise ChangeSets sind eine Kernfunktion des onion.net Information Servers, die über die Client API angesteuert wird. Das folgende Beispiel soll das Programmiermodell veranschaulichen:

using System;
using Onion.Client;

class Program
{
  private static void Main(string[] args)
  {
    using (var session = new OnionSession("ipc://onion.net/onion/server", "admin", "admin"))
    {
      IChangeSet cs = session.Repository.ChangeSets.Create("Neues ChangeSet");
      cs.Enter();

      try
      {
        RenameChildren(session.Repository.Root);

        // we leave the changes uncommitted to view them in the editor
        // cs.Commit();
      }
      catch (Exception)
      {
        cs.Discard();
       
        throw;
      }
    }
  }

  private static void RenameChildren(IDataObject item)
  {
    foreach (IDataObject child in item.Children)
    {
      child.Name += " renamed";

      RenameChildren(child);
    }
  }
}

Ziel dieses Programms ist es, alle Datenobjekt im Datenbestand rekursiv umzubenennen. Diese Operation soll jedoch nicht direkt an den produktiven Daten durchgeführt werden. In einem Fehlerfall (z. B. aufgrund fehlender Rechte oder eines Konflikts) wird das ChangeSet über die Methode IChangeSet.Discard verworfen. Zur Veranschaulichung ist im Beispiel der Befehl IChangeSet.Commit auskommentiert. Dies gestattet uns, den Zustand im onion.net Editor zu betrachten.

Entscheidend ist der Aufruf der Methode IChangeSet.Enter. Dieser Aufruf legt den Lese -und Schreibkontext der Verbindung auf das ChangeSet fest. Von diesem Zeitpunkt an wird jede Datenmodifikation automatisch in einem ChangeSet festgehalten und für weitere Lesezugriffe simuliert. Als Benutzer des onion.net Editors oder der Client API arbeiten Sie wie im produktiven Datenbestand.

Im onion.net Editor lassen sich alle Änderungen in der ChangeSet-Übersicht betrachten. Die blau markierten Objekte im Strukturbaum weisen auf eine Verändung hin.

Zur Information: Alle angeschlossenen Systeme können sich auf ein Enterprise ChangeSet einstellen und somit seine Funktion mit einem zukünftigen Datenbestand zu testen. Die onion.net Render Engine hat zudem die Möglichkeit, mehrere ChangeSets zur gleichen Zeit für ein Rendering einzubeziehen!