2012-04-05 19 views
0

In meinem Java-Pojo XOM-Modell habe ich eine statische Variable sagen count.Ich führe 5 Regeln und es erhöht die Anzahl der Variablen um eins. Am Ende der Ausführung habe ich den Wert count = 5.mit statischen Deklaration in Ilog jrules java xom Modell

Jetzt, wenn ich eine nicht statische Variable count und seinen Wert für jede Regelausführung inkrementieren, wird die Variable 5 mal initialisiert und es ist nicht statisch.

Mit anderen Worten, werden 5 Instanzen meiner Java XOM Modellklasse erstellt, wenn das Objekt nicht als statisch deklariert ist?

Antwort

0

Nicht sicher, dass ich Ihre Frage verstanden habe.
Ich habe Sie eine Regel, die besagt:
"dann myObj.count MyObj.count + 1 setzen;" dann werden Sie so viele Zählvariablen wie myObj-Objekt haben.
Wenn Sie also in den Arbeitsspeicher ONE myObj einfügen, dann haben Sie am Ende und während der Ausführung nur EINEN myObj.
Jede Regel wird so oft ausgelöst, wie Sie "Matching" im Arbeitsspeicher haben.
Wenn Sie also 5 myObj in der Engine übergeben, haben Sie 5 myObj.count, die jeweils einen Endwert von '5' haben.

Wenn Sie statische verwenden, wird es das gleiche sein.
Außer, wenn Sie den Motor in einem Stateful-Modus verwenden (was eigentlich ziemlich selten ist).
Das BRMS soll ein Decision Service sein und damit eine Entscheidung über die übergebenen Parameter (und natürlich die Regeln) treffen.
Ich sage nicht, dass Sie es nicht in einem Stateful-Modus verwenden können, aber diese Verwendung ist selten.
Wenn Sie dies tun, dann ist ja die vorherige Antwort korrekt und Sie werden mit einem unendlich steigenden Wert enden. Bei jedem Lauf um fünf erhöht.

BTW: ich dies nie versucht, weil es eine ganze Reihe von Attributen ist die Anzahl der Regeln zu erhalten, die nicht und Zeit der Ausführung gebrannt oder und so weiter ...

Um es zusammenzufassen, haben Sie, was Sie haben in das Arbeitsgedächtnis. Das heißt, wenn Sie eine Instanz eines Objekts haben, erzeugt die Engine zur Laufzeit nie mehr Instanzen. Das würde aufgrund des RETEPlus-Algorithmus zu Wahnsinn (::) führen. (die auch nicht häufig verwendet wird)
Die einzige Möglichkeit, mehr Instanzen von Objekten zu erstellen, besteht darin, es selbst zu tun, direkt über die Regeln. Zum Beispiel: Fügen Sie den Meldungen des Berichts eine Nachricht "Hallo Welt" hinzu. "
Ich hoffe, es hilft

0

Statische Variablen sind lediglich Klassenvariablen. Daher wird es bei Regelaufrufen "bestehen bleiben". Mit anderen Worten: Wenn Sie es das nächste Mal ausführen, ist der Zählerstand 10. Wenn Sie nicht statisch verwenden, wird er einmal für jeden Regelaufruf initialisiert, NICHT einmal für jede Regel. Kurz gesagt, NEIN.