Information Technology Reference
In-Depth Information
Symptom fieber=
new
Symptom(
"fieber"
,
true
);
Symptom gliederschmerz=
new
Symptom(
"gliederschmerz"
,
true
);
Reader source =
new
InputStreamReader(
Test.
class
.getResourceAsStream(
"test.drl")
);
PackageBuilder builder =
new
PackageBuilder();
builder.addPackageFromDrl( source );
if
(builder.hasErrors()){
System.
out
.println(builder.getErrors().toString());
}
org.drools.rule.Package pkg = builder.getPackage();
RuleBase ruleBase = RuleBaseFactory.
newRuleBase
();
ruleBase.addPackage( pkg );
StatefulSession session = ruleBase.newStatefulSession();
session.insert( fieber );
session.insert( gliederschmerz );
In PackageBuilder können beliebig viele Regel-Files eingelesen werden. Er fügt diese
dann mittels
getPackage()
-Methode zu einem einzigen Paket zusammen, welches der
RuleBase
übergeben wird.
Die Rulebase wird mit der
newRuleBase()
-Methode der
RuleBaseFactory
ins-
tanziiert. Dies startet einen neuen Rete-Algorithmus welcher die mit der
addPackage()
-
Methode hinzugefügten Pakete optimiert.
Das
WorkingMemory
ist der Dreh- und Angelpunkt der ganzen Applikation. In
ihm sind alle Relationen zwischen Daten und Regeln vorhanden. Mit dem Methoden-
aufruf
assertObject()
mit dem Message Objekt als Parameter, wird dieses dem
WorkingMemory
hinzugefügt und ist von nun an für die Regeln sicht- und änderbar.
Mit dem Methodenaufruf
fireAllRules()
wird erreicht, dass die Evaluierung der
registrierten Regeln beginnt.
Das Produktionsregelsystem ist in ein übergeordnetes Steuerungssystem eingebettet,
das die Verarbeitungsmethoden zyklisch abarbeitet. Die Struktur dieser Verarbeitungsme-
thoden samt Kontrollmechanismen folgt den „Test-Operate-Text-Exit“ - Methoden (kurz
TOTE-Methoden):
• Erst findet ein Zustandstest statt, der Soll-Zustand einer Entität wird festgestellt und
dem gewünschten Ist-Zustand der Entität gegenübergestellt. (
praeTest
).
• Besteht eine Differenz zwischen dem Soll-Zustand und dem Ist-Zustand, wird gehan-
delt, um sich vom Ist-Zustand dem Soll-Zustand anzunähern (
operate
).
• Woraufhin erneut ein Zustandstest erfolgt (
postTest
).
• Dessen Ergebnis kann dann entweder, sollte weiterhin eine Differenz bestehen, einen
weiteren Handlungsschritt auslösen,
• anderenfalls wird die Handlung beendet (
exit
).