Entscheidungsbäume und rule engines (Drools)

In der Anwendung, ich bin jetzt arbeiten, ich muss in regelmäßigen Abständen überprüfen die Förderfähigkeit von Zehntausenden von Objekten, die irgendeine Art von service. Die Entscheidung Diagramm selbst ist in der folgenden form, nur viel größer: Entscheidungsbäume und rule engines (Drools)

In jedem der end-Knoten (Kreise), ich muss eine Aktion ausführen (eines Objekts ändern, Feld, log-Informationen etc.). Ich habe versucht mit Spucke Expert framework, aber in diesem Fall würde ich schreiben müssen, eine lange Regel für jeden Pfad in dem Diagramm, was zu einem end-Knoten. Drools Flow nicht zu sein scheinen gebaut für einen solchen Anwendungsfall entweder ich nehme einen Gegenstand und dann, je nach den Entscheidungen auf dem Weg, dass ich am Ende in einem der Endknoten; und dann wieder für ein anderes Objekt. Oder ist es? Könnten Sie mir einige Beispiele/links zu solchen Lösungen?

UPDATE:

Drools Flow-Aufrufe könnten wie folgt Aussehen:

//load up the knowledge base
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
Map<String, Object> params = new HashMap<String, Object>();

for(int i = 0; i < 10000; i++) {

    Application app = somehowGetAppById(i);

    //insert app into working memory
    FactHandle appHandle = ksession.insert(app);

    //app variable for action nodes
    params.put("app", app);

    //start a new process instance
    ProcessInstance instance = ksession.startProcess("com.sample.ruleflow", params);
    while(true) {
        if(instance.getState() == instance.STATE_COMPLETED) {
            break;
        }
    }

  //remove object from working memory
    ksession.retract(appHandle);
}

Ist: würde ich nehmen, der ein Application-Objekt, einen neuen Prozess starten, wenn der Prozess beendet ist (das Letzte, action-Knoten ändern Sie die Anwendung irgendwie), würde ich entfernen Sie das Objekt aus dem Arbeitsspeicher aus und wiederholen Sie den Vorgang für ein neues App-Objekt. Was denkst du über diese Lösung?

LÖSUNG:

Ich habe es schließlich mit Drools Flow, und es arbeitet ziemlich gut. Meine Entscheidung ist nicht so einfach, wie Drools Expert fragt nach und je nachdem, wo in der Entscheidungsstruktur der Prozess ist, den es braucht, um zu laden, Listen von Objekten aus der Datenbank, transformieren Sie, Entscheidungen zu treffen, melden Sie alles, etc. Ich benutze ein Prozess-Objekt, das übergeben wird, um den Prozess als parameter und speichert alle meine globalen Variablen (für den Prozess) und ein paar convenience-Methoden, die wiederholt an verschiedenen stellen in der Struktur (wie das schreiben von Java-code in die Script Task Knoten ist nicht sehr bequem selbst). Ich habe auch am Ende mit Hilfe von Java, um Entscheidungen zu treffen (und nicht mvel oder Regeln) - es ist schneller-und ich würde sagen, leichter zu kontrollieren. Alle Objekte, die ich mit als Parameter übergeben werden und als normale Java-Variablen im code.

InformationsquelleAutor John Manak | 2011-02-03
Schreibe einen Kommentar