Ausführungsumgebung

Die Oracle Data Relationship Management-Engine ist eine Umgebung mit mehreren Threads und mehreren Computern, und Skripte können gleichzeitig in mehreren Threads und auf mehreren Computern ausgeführt werden. Sie können zwar Werte erstellen und diese im globalen Bereich speichern, sollten sich jedoch auf dieses Verhalten nicht verlassen, da dieser globale Wert nicht vorhanden ist, wenn Ihr Skript in einem anderen Thread ausgeführt wird. Ähnlich werden globale Werte in der Data Relationship Management-Engine nicht instanz- oder computerübergreifend aktualisiert. Data Relationship Management unterstützt mehrere Liveversionen. Wenn Sie einen Wert für einen Knoten berechnen und diesen Wert im globalen Bereich speichern, erstellen Sie deshalb möglicherweise falsche Werte, wenn ein anderes Skript auf die Eigenschaft für einen anderen Knoten zugreift.

Hinweis:

Aus demselben Grund, aus dem Sie keine Variablen im globalen Bereich speichern sollten, sollten Sie auch vermeiden, die integrierten Data Relationship Management-Objektprototypen zu ändern, da Sie nicht sicher sein können, dass Ihre Änderungen in allen Engine-Instanzen und -Threads ausgeführt werden.

Skripttimeouts festlegen

Um übermäßige Engine-Sperren zu verhindern, werden Skripte, deren Ausführung zu lange dauert, ohne einen Wert zurückzugeben, anhand einer Timeouteinstellung beendet. Das Skripttimeout kann für jede Eigenschaftsdefinition und Validierung festgelegt werden.

Das Timeout gilt pro Ausführungskontext. Wenn also ein Export die Skripteigenschaft von 100 Knoten exportiert und das Timeout für die Eigenschaft auf 30 Sekunden festgelegt ist, kann der Export bis zu 50 Minuten dauern, da es bei jedem Knoten 30 Sekunden dauern kann, bis die Eigenschaft ausgewertet wird. Wenn eine Skripteigenschaft jedoch eine andere Skripteigenschaft aufruft, wird der Timeoutwert dadurch nicht erhöht. Beispiel: Für Eigenschaft A gilt ein Timeout von 10 Sekunden, für Eigenschaft B gilt ein Timeout von 20 Sekunden. Eigenschaft A ruft Eigenschaft B auf, die eine zeitintensive Berechnung startet. Nach Ablauf von 10 Sekunden wird die Auswertung von Eigenschaft A beendet, da das ursprüngliche Timeout überschritten wurde.

Unendliche Schleifen verhindern

Ein Skript, das zu einer unendlichen Schleife führt (die auch als Stapelüberlauf bezeichnet wird), ist ein schwerwiegender Fehler, der zum unerwarteten Beenden eines Serverprozesses führen kann. Data Relationship Management versucht zwar, die Ausführung solcher Skripte zu verhindern, trotzdem müssen Sie beim Erstellen selbstverweisender oder rekursiver Skripte vorsichtig sein. Testen Sie neue Skripte immer in einer Entwicklungsumgebung, bevor Sie sie in der Produktionsumgebung bereitstellen.

Im Folgenden finden Sie ein vereinfachtes Beispiel eines Skriptes mit unendlichen Schleifen. Da das Skript einen Aufruf an sich selbst enthält, seine Ausführung jedoch nie beendet wird, wird die Engine, die die Funktion ausführt, schließlich aufgrund eines Mangels an Ressourcen beendet. Da das Skript die Data Relationship Management-Engine nie aufruft, besteht schließlich keine Möglichkeit, den Überlauf zu erkennen und das Skript zu stoppen.

function badFunc(a) { badFunc(a); }
badFunc("oops");

Überlegungen zur Performance

Um die optimale Performance zu erzielen, vermeiden Sie es, in einem Skript aus einer Formel abgeleitete Eigenschaften zu referenzieren und umgekehrt. Im Allgemeinen eignen sich Skripte aufgrund verschiedener Aspekte, wie etwa der Just-in-Time-Kompilierung für native Hardware, einschließlich 64-Bit-Prozessoren, besser als Formeln für die Optimierung der Performance. Außerdem werden Skripte vom JIT-Compiler im Hinblick auf tatsächliche Ausführungseigenschaften optimiert und werden im Lauf der Zeit schneller ausführt.