# Drools

Drools ist ein Geschäftsregel-Managementsystem und ermöglicht die Entwicklung und den Einsatz von auf Geschäftsregeln basierenden Anwendungen. Für die softwarebasierte Abwicklung einer Aufgabe in Unternehmen ermöglicht es, komplexe Entscheidungslogik von der Anwendungslogik zu trennen und die Geschäftsregeln unabhängig von der zugrunde liegenden Anwendung zu verwalten und anzupassen.
Drools ist eine freie Software bzw. Software-Lösung und in der Programmiersprache Java geschrieben. Das System stellt eine Grundausstattung einer Business-Rule-Engine (BRE), eine Webanwendung (Drools Workbench) und ein Eclipse-IDE-Plugin für die Entwicklung zur Verfügung. Die Software wird in Expertensystemen eingesetzt. Drools ist ein regelbasiertes System und kann selbst auf unterschiedliche Ereignisse reagieren.

## Softwarestandard

Das Business-Rule-Management-System verwendet den JSR-94-Standard (Java Specification Request 94) für die Erstellung, Wartung und Einhaltung von Geschäftsprozessen innerhalb von Organisationen. Dieser Standard definiert eine einfache Programmierschnittstelle, um eine Rule-Engine mit einer Java-Plattform zu verknüpfen.

## Projekt

Drools wird durch die JBoss-Community veröffentlicht. Es gibt eine Community-Version und eine Variante als Unternehmenssoftware. Zweck des Projektes ist es, eine umfassende Plattform für das Business-Rules-Management zur Verfügung zu stellen, um Unternehmensressourcen und komplexer Ereignisverarbeitung (CEP, Complex Event Processing) zu optimieren. Es ermöglicht den Unternehmen, eine anspruchsvolle Entscheidungslogik in Geschäftsanwendungen abzubilden, da sich die zugrundeliegenden Business-Rules durch Aussagenlogik schnell den Marktgegebenheiten anpassen können.
Komponenten der Enterprise-Version:
* JBoss Rule Engine – Drools Expert: Dieses Tool nutzt den Rete-Algorithmus und die Drools Rule Language (DRL), um Regeln zu erstellen und anzuwenden.
* Complex Event Processing (Drools Fusion): Mit diesem Tool kann man komplizierte Ereignisse und deren Zusammenhänge überwachen und steuern. Es hilft dabei, Muster in Ereignisströmen zu erkennen und darauf zu reagieren.
* Drools Workbench mit Business Performance Management-Anwendungsmöglichkeiten; eine Benutzeroberfläche, die es ermöglicht, Geschäftsprozesse zu modellieren, zu verwalten und auszuführen.
* Business Resource Planner (OptaPlanner): Dieses Tool hilft bei der automatischen Planung und Optimierung von Geschäftsregeln, wie z. B. bei der Personalplanung oder der Routenoptimierung.
* Entwicklerwerkzeuge: Diese sind Software-Tools, die Entwicklern helfen, Anwendungen zu erstellen und Geschäftsregeln zu integrieren.
* Business Rule Management und Monitoring: Dies umfasst die Verwaltung und Überwachung der Geschäftsregeln, um sicherzustellen, dass sie korrekt und effizient funktionieren.
* Wartungspläne (Support), also Unterstützung und Service, um sicherzustellen, dass die Software reibungslos läuft und bei Problemen schnell Hilfe verfügbar ist.
Komponenten der Community-Version:
* Drools Workbench: Eine Benutzeroberfläche, die es ermöglicht, Geschäftsregeln zu erstellen, zu verwalten und zu testen.
* Drools Expert (Business-Rule-Management): Dieses Tool hilft Unternehmen, ihre Entscheidungsprozesse durch das Definieren und Verwalten von Regeln zu automatisieren.
* Drools Fusion: Ein Tool zur Verarbeitung komplexer Ereignisse. Es hilft dabei, Muster und Zusammenhänge in einer Vielzahl von Ereignissen zu erkennen und darauf zu reagieren. Zum Beispiel kann es erkennen, wenn mehrere Sensoren in einer Fabrik ungewöhnliche Werte melden, und dann automatisch Maßnahmen ergreifen.
* jBPM (Java Business Process Management): Dieses Tool wird verwendet, um Geschäftsprozesse und Workflows zu modellieren und zu automatisieren. Es hilft Unternehmen, ihre Arbeitsabläufe zu organisieren und zu steuern,
* OptaPlanner: Ein Tool zur Optimierung von Planungsaufgaben. Es hilft dabei, die besten Lösungen für komplexe Planungsprobleme zu finden, wie z. B. die Einsatzplanung von Mitarbeitern oder die Routenplanung für Lieferungen.

## Regelwerk
### Beschreibung

Regeln folgen einer „Wenn…Dann…“–Struktur und bestehen aus einer Bedingung und einer Konsequenz. Die Bedingung, auch als Prämisse oder Left-Hand-Side (LHS) bezeichnet, prüft Fakten, auf die die Regel angewendet wird. Die Konsequenz, auch Konklusion oder Right-Hand-Side (RHS) genannt, wird als Aktion bezeichnet. Wenn die Bedingung erfüllt ist, spricht man davon, dass die Regel feuert.
Werden solche Regeln ohne die Verwendung von Business-Rule-Management-Systemen direkt in den Quelltext geschrieben, führt dies zu Problemen in der Wartung und Lesbarkeit der Software. Um diesen Problemen vorzubeugen und auch eine Konfliktlösung zu realisieren, werden Business-Rule-Management-Systeme verwendet. Klare Vorteile einer Business-Rule-Engine sind die explizit formulierten Regeln mit Hilfe der Aussagenlogik sowie die deklarative Herangehensweise der Business-Rule-Engine.

### Drools Rule Language

Drools besitzt eine eigene „native“ Regelsprache. Die Grammatik dieser Sprache soll leicht verständlich sein und bezieht sich nur auf die Abfrage von Regeln und Bedingungen eines Objektes.
Eine Regeldatei nutzt die .drl-Erweiterung. In einer .drl-Datei können sich mehrere Regeln, Abfragen und Funktionen, Ressourcendeklarationen wie Importe sowie globale und lokale Attribute befinden. Es ist auch möglich, Regeln auf mehrere .drl-Dateien aufzuteilen. Eine Aufteilung von Regeln über mehrere Dateien kann bei der Verwaltung einer großen Anzahl von Regeln helfen.
Eine .drl-Datei ist eine einfache Textdatei mit folgendem Aufbau:
Eine Drools-Regel besteht aus einem Namen, optionalen Attributen und den Regelbestandteilen LHS und RHS. Attribute geben an, wie sich die Regel verhalten soll. LHS (Left-Hand-Side) ist der bedingte Teil der Regel und folgt einer bestimmten Grammatik. RHS (Right-Hand-Side) ist ein Block, der dialektspezifischen Code ausführt, sobald die Regel ausgelöst wird.

## Programmbeispiele

Dieses Beispiel zeigt eine einfache Regel über die Zulassung einer Person zu einer Fahrprüfung. Es untersucht eine Bedingung der Instanz Applicant und setzt die Variable valid je nach Ergebnis der Bedingung true oder false.
Zuerst muss die Klasse Applicant erstellt werden. Nachdem das Datenmodell erstellt ist, wird eine Regel formuliert. Diese Regel besagt, dass eine Person, die unter 18 Jahre alt ist, den Wert false zugewiesen bekommt.
Wenn eine Instanz von Applicant in die Business-Rule-Engine eingefügt wird, wird sie gegen die Einschränkungen der Regeln ausgewertet. In diesem Fall gibt es zwei Einschränkungen für eine Regel. Es sind zwei, da der Typ Applicant die erste Objekttypeinschränkung und Alter < 18 die zweite Feldbeschränkung ist.
Eine Objekttypbeschränkung inklusive ihrer Feldbeschränkungen wird als Muster bezeichnet. Wenn eine eingefügte Instanz sowohl die Objekttypbeschränkung als auch alle Feldbeschränkungen erfüllt, wird angenommen, dass sie übereinstimmt. Das $a ist eine Bindungsvariable, die es uns erlaubt, auf das übereinstimmende Objekt zu verweisen. Das Dollarzeichen $ ist optional, aber es hilft, Variablennamen von Feldnamen zu unterscheiden.