Vor- und Nachteile von Java Rules Engines [geschlossen]

108

Was sind die Vor- und Nachteile der Übernahme der Java-Regel-Engines JESS und Drools ? Gibt es noch andere Spieler?

Ich verstehe, dass Drools Open Source ist und JESS nicht, aber wie vergleichen sie sich in anderen Bereichen wie Benutzerfreundlichkeit, Leistung und Integrationsgrad mit Ihrem Code?

Brabster
quelle

Antworten:

128

Was sind die Vor- und Nachteile der Übernahme der Java-Regel-Engines JESS und Drools?

Verwenden Sie eine Regelengine, wenn Sie die Geschäftsregeln von der Anwendungslogik trennen müssen. Der Artikel Benötigt Ihr Projekt eine Regelengine? Hat ein gutes Beispiel:

Ein typisches Storefront-System kann beispielsweise Code zur Berechnung eines Rabatts enthalten:

if (product.quantity > 100 && product.quantity < 500) {
  product.discount = 2;
} else if (product.quantity >= 500 && product.quantity < 2000) {
  product.discount = 5;
} else if (product.quantity >= 2000) {
  product.discount = 10;
}

Eine Regelengine ersetzt die oben genannten durch Code, der folgendermaßen aussieht:

ruleEngine.applyRules(product);

Es liegt an Ihnen zu entscheiden, ob es eine gute Sache ist, eine Regeladministrationskonsole in die Hände von nicht-technischen Personen zu legen oder nicht :)

Weitere Details finden Sie unter Soll ich eine Rules Engine verwenden? , Warum eine Regel-Engine verwenden? , Einige Richtlinien für die Entscheidung , ob Sie mit A Rules Engine und auf Google .

Gibt es noch andere Spieler?

Andere Spieler sind JRules, Corticon (JRules ist die bekannteste IMO - was nicht die beste bedeutet).

Wie vergleichen sie sich in anderen Bereichen wie Benutzerfreundlichkeit, Leistung und Integrationsgrad Ihres Codes?

Ich kann es dir nicht genau sagen, ich habe nur ein wenig (positive) Erfahrung mit Drools. Sie erhalten jedoch Feedback von Blog-Posts wie JBoss Drools vs ILog JRules - eine anekdotische Geschichte (lesen Sie sie unbedingt ) oder Arbeiten mit Drools aus der Perspektive von JRules . Ich bin sicher, dass Sie mehr davon bei Google finden können (aber ich würde Drools ausprobieren).

Pascal Thivent
quelle
1
Ihre Antwort sieht gut aus. Könnten Sie mir bitte sagen, wo ich Sabber verwenden soll und wo zu Jess? Grundsätzlich erwarte ich die Antwort eher verwandten Unterschied. s / w sabbern und Jess.
Tony
7
Wow, @Pascal, dieses Beispiel für Produktmenge / Rabatt ist eine echte WTF. Angenommen, die Menge beträgt 5.000. Die erste IF wird als wahr ausgewertet, die ELSE-IFs werden niemals ausgewertet. Das Einfügen dieser Art von Geschäftslogik in eine Regelengine hilft nichts, obwohl es möglicherweise schwieriger ist, den Fehler zu finden.
DOK
Zu seiner Verteidigung stammte dieses Beispiel aus diesem ersten Artikel. Ich
Jeb
6
Nur ein gutes Beispiel für die Gefahren, wenn die Kontrolle von Regeln in nichttechnische Hände gelegt wird.
Pace
1
Warum eine Regel-Engine verwenden? ist der beste unter den aufgeführten Links
Aravind Yarram
16

Wir evaluieren jetzt Regeln für die Verwendung mit unserem Anwendungsserver. Wir sind auf OpenRules gestoßen , das einfach in Java zu integrieren ist und, wie unsere Tests gezeigt haben, schnell genug ist. Der Hauptvorteil von OpenRules gegenüber den anderen ist die Art und Weise, wie die Regeln geändert und behandelt werden. Dies alles geschieht in Excel-Tabellen, was für Nicht-Programmierer der einfachste Weg ist. Alle Beteiligten, auch die nicht-technischen Leute, haben alles perfekt verstanden :-)

Wir haben auch Sabber integriert, aber die Regeln sind viel komplizierter zu verstehen, da es sich um einen programmatischeren Ansatz handelt. Deshalb werden wir uns höchstwahrscheinlich an OpenRules halten.

Dominik Sandjaja
quelle
19
Drools unterstützt auch Regeln, die in Excel und über eine Weboberfläche bearbeitet wurden.
Retronym
7

Wir hatten eine ähnliche Frage bei uns, wir haben endlich Drools aufgegriffen, man sollte Drools verwenden, wenn man folgendes hat:

  • Geschäftslogik, von der Sie glauben, dass sie aufgrund verschiedener Szenarien mit mehreren if-Bedingungen überfüllt ist
  • Sie werden eine wachsende Nachfrage nach einer Erhöhung der Komplexität haben
  • Die Änderungen der Geschäftslogik wären häufig (1 - 2 Mal pro Jahr wären ebenfalls häufig).
  • Ihr Server verfügt über genügend Arbeitsspeicher, da er ein speicherhungriges Tool ist und Leistung zu Speicherkosten bietet

Weitere Informationen finden Sie unter der folgenden URL

Sachin Thapa
quelle
3

Fügen Sie einfach hinzu, dass viele Leute nach etwas suchen, das der Verwaltung ähnelt, ob bestimmte Bedingungen erfüllt sind, um bestimmte Funktionen in einer Anwendung zu aktivieren oder zu deaktivieren.

Ich hatte es satt, überall das gleiche Muster immer wieder neu zu implementieren, und beschloss, ein OSS-Projekt namens Roolie http://sourceforge.net/projects/roolie/ zu erstellen.

Ich habe es nur mavenisiert und da seit 2010, als es veröffentlicht wurde, keine Fehler gemeldet wurden, habe ich es auf Version 1.0 aktualisiert, ohne dass andere Änderungen vorgenommen wurden als die, die erforderlich sind, um es in Maven Central zu hosten (was ich gerade mache) ).

Grundsätzlich ist JSR-94 für die meisten Dinge ein Overkill, und es gibt eine enorme Lernkurve und einen Overhead, die mit den aktuellen Angeboten einhergehen. Das ist in Ordnung, wenn Sie das wollen. Wenn Sie jedoch nur einfache, in Java geschriebene Regeln mit XML verketten möchten, um Ihre Statustests aufrechtzuerhalten, ist Roolie eine sehr schnelle Möglichkeit, dies zu tun. Keine Abhängigkeiten und keine Lernkurve.

RK
quelle
2
Roolie gibt an, dass das MIT für SourceForge lizenziert ist, der Code meldet jedoch LGPLv3. Dies bedeutet im Wesentlichen, dass es zweifelhaft ist, es in jedem kommerziellen Produkt (und auch in einigen Open Source-Produkten) zu verwenden. Siehe nmav.gnutls.org/2013/03/the-perils-of-lgplv3.html .
Ingyhere
2

Als wir eine Regelengine brauchten, entschieden wir uns, unsere eigene zu rollen, da die verfügbaren für unsere einfachen Aufgaben viel zu kompliziert waren. Wenn Sie auch nur aus der Ferne Erfahrung mit dem Parsen von Ausdrücken haben, die Benutzer möglicherweise eingeben, ist dies nicht sehr schwierig. In unserem Fall wird der größte Teil der Spezifikation von einer XSD verarbeitet und nur einige der Felder werden weiter analysiert.

Verwirrtheit
quelle
6
Regel-Engines verwenden gut etablierte Algorithmen (wie die Vorwärtsverkettung und den Rete-Algorithmus), um auf nicht triviale Probleme zu skalieren. Wenn Sie lediglich Ausdrücke auswerten, kann eine vorhandene Bibliothek wie MVEL hilfreich sein.
Jevon