2010-09-28 12 views
9

Ich lerne mich gerade Drools Expert/Flow sowie GWT. Ich möchte Drools Flow als Event/Command Bus und Business Rule Engine verwenden, um eine lose Kopplung zwischen verschiedenen Teilen der Anwendung zu erreichen.Best Practices für die Verwendung von Drools Expert/Flow in einer Webanwendung

Bis jetzt habe ich sowohl Expert als auch Flow von meinen Testfällen aus arbeiten lassen, aber es fällt mir schwer herauszufinden, wie man Flows am besten in einem Webcontainer implementiert.

Sollte ich alle Gerüst in eine Stateless Session EJB setzen und jede Anfrage alles von Grund auf einrichten und dann die Flows/Regeln ausführen? Das scheint für mich eine Verschwendung von Ressourcen zu sein. Kann ich stattdessen eine einzelne Wissenssitzung speichern und diese Sitzungen zwischen Webanfragen teilen und gleichzeitig darauf zugreifen? Würde dieses Szenario skalieren und wäre es threadsicher (meine Vermutung ist nein)? Ist das Sammeln von Wissenssitzungen eine gute Idee?

Was ich eigentlich fragen möchte, ob es Best Practices für die oben genannten gibt? Die Dokumentation und Beispiele, obwohl ansonsten ziemlich gut, sind in diesen speziellen Punkten nicht klar.

Ich habe etwas über Drools Grid gelesen, nicht sicher, ob das mein Problem lösen würde und das scheint in der Entwicklung zu sein. Wenn meine Fragen unklar sind, sagen Sie es bitte.

BR Magnus

Antwort

3

Ein Knowledge ist Thread-sicher und schweres Gewicht (es ist nicht billig zu erstellen), so dass Sie werde wahrscheinlich wollen, dass halten in einem Anwendungsbereich.

Im Moment neigen die meisten dazu, eine zustandslose Architektur zu verwenden und für jede Webanforderung eine statelessKnowlegdeSession (Thread unsicher und billig zu erstellen) zu erstellen, zum Beispiel in einer Stateless Session Bean (oder einer Naht/CDI Bean oder einer Spring Bean)). Wenn Sie jedoch die Macht von Stateful EJB's haben, kann es lohnend sein, eine StafefulKnowlegdeSession zu verwenden, um alle Anfragen in derselben Konversation zu bearbeiten.

Ich bin nicht sicher, ob StatefulKnowlegdeSession Thread-sicher ist (glaube nicht, so), so habe ich ein Problem aufgetreten: https://issues.jboss.org/browse/JBRULES-2842

+0

Unfortunaly mit geifert Fluss bedeutet implizit, dass ich eine StatefulKnowledgeSession verwenden, sonst doesn Flow‘ t arbeiten. Ich habe das ausprobiert und von dem, woran ich mich erinnere, habe ich eine Laufzeitausnahme bekommen. Der einzige Hinweis, den ich selbst finden kann, besteht darin, dass alle Daten über die Sitzung zwischen Anfragen beibehalten werden. Ich denke, es läuft auf Nutzungsmuster des Werkzeugs. Vielleicht fehlt mir etwas Grundlegendes in meiner Anwendung von Drools. Die Beispiele, die ich gefunden habe, scheinen mehr auf Desktop-Anwendungen (Swing) und eine fortwährend laufende Sitzung ausgerichtet zu sein. – Magnus