Anwendungsdaten bereinigen

Das Bereinigen von Anwendungsdaten beinhaltet auch die Entfernung von Daten aus der Datenbanktabelle "IEGEXECUTIONSTATE" und dem DS, wo es erforderlich ist. In diesem Abschnitt werden die manuellen und automatischen Bereinigungstasks aufgeführt, die von Scriptautoren zu berücksichtigen sind, sowie Empfehlungen gegeben, die bei Beachtung zur reibungslosen Bereinigung von Anwendungsdaten beitragen.

Um die Ausführung eines IEG-Scripts zu unterstützen, müssen Informationen zu einzelnen Scriptausführungen von der IEG-Engine verwaltet werden. So muss die IEG-Engine beispielsweise die aktuelle Seite für die Scriptausführung überwachen. Zusätzlich muss die IEG-Engine eine Liste der Seiten verwalten, die dem Benutzer zum Unterstützen der Navigation dargestellt wurden. Die Antworten auf Kontrollfragen werden im DS nicht persistent gespeichert; sie werden ebenfalls von der IEG-Engine überwacht. Alle Informationen zum Unterstützen der Ausführung eines IEG-Scripts werden in der Tabelle "IEGEXECUTIONSTATE" persistent gespeichert. Bei der Erstellung eines neuen "IEGScriptExecution"-Objekts über die API "IEGScriptExecutionFactory" wird ein entsprechender Eintrag in der Tabelle "IEGEXECUTIONSTATE" erstellt. Bei der Tabelle "IEGEXECUTIONSTATE" handelt es sich um eine 'interne' Tabelle, die nur für die Verwendung durch die IEG-Engine gedacht ist und nicht geändert oder erweitert werden sollte. Scriptautoren sollten nichts von den Inhalten dieser Tabelle abhängig machen oder auf ihnen aufbauen, da sie kurzfristigen Änderungen unterliegen können.

IEG kann nicht wissen, ab wann ein Eintrag in der Tabelle "IEGEXECUTIONSTATE" nicht mehr eforderlich ist. Deshalb bleiben die Einträge bestehen, bis sie explizit gelöscht werden. Um ein unnötiges Überladen der Tabelle "IEGEXECUTIONSTATE" zu vermeiden, sollte der Eintrag einer Scriptausführung, wenn sie beendet ist und nicht wieder aufgenommen oder erneut ausgeführt wird, über die Methode "removeScriptExecutionObject" der API "IEGScriptExecutionFactory" entfernt werden.

IEG kann nicht ableiten, welche Daten sich dazu verwenden lassen, eine bestimmte Scriptausführung logisch und eindeutig zu ermitteln, da dies je nach Scriptdefinition unterschiedlich sein kann. Der einzige Weg für IEG, eine Scriptausführung zu ermitteln, ist über die generierte ID, die der Scriptausführung bei ihrer anfänglichen Erstellung zugewiesen wird. Scriptautoren wird dringend empfohlen, einen Mechanismus zum Ermitteln von Scriptausführungen zu implementieren, indem eindeutige Daten mit den Scriptausführungs-IDs verknüpft werden. Es kann eine neue Tabelle erstellt werden, um die Beziehung zwischen den Daten, die die Ausführung identifizieren, und der Ausführungs-ID zu verwalten, so dass Scriptausführungen problemlos fortgesetzt werden können. Sobald sie nicht mehr erforderlich sind, können sie entfernt werden. Durch das Entfernen einer Scriptausführung werden keine der erfassten Daten entfernt, die im DS persistent gespeichert sind.

Ähnlich wie bei der Tabelle "IEGEXECUTIONSTATE" wissen die IEG-Engine und der DS nicht, ab wann die Daten, die während einer Scriptausführung erfasst und im DS persistent gespeichert werden, nicht mehr benötigt werden. Auch hier gilt, dass der DS möglicherweise unnötig mit Entitäten überladen wird, die nicht mehr erforderlich sind. Es ist so gedacht, dass die Entitäten im DS nicht für immer persistent gespeichert sind, sondern dass die erfassten Daten in Anwendungstabellen verschoben und anschließend aus dem DS entfernt werden. Mit dem Löschen einer Entität aus dem DS werden ihre untergeordneten Entitäten ebenfalls gelöscht. Nachdem die während einer Scriptausführung erfassten Daten in Anwendungstabellen verschoben und nicht mehr erforderlich sind, reicht es deshalb aus, die Stammentität für die Ausführung zu löschen.

Mit dem folgenden Beispielcodefragment wird das Löschen der Stammentität demonstriert:

Abbildung 1. Stammentität löschen
final Long applicationID = execution.getRootEntityID();
      final Entity rootEntity = datastore.readEntity(applicationID);
      rootEntity.delete();