2010-12-08 3 views
9

Momentan speichere ich alle Regeldateien im Dateisystem (es gibt viele Versionen davon) und lade die verschiedenen Versionen von ihnen in den Speicher beim Start. Ich würde gerne meine Drools-Dateien in einer Datenbank speichern und frage mich, ob es Drools eine Lösung oder ein Addon gibt, die das erleichtert, oder sollte ich meine eigenen herstellen?Drools: Speichern von Regeln in der Datenbank

Danke.

Antwort

3

Nun, Sie möchten vielleicht Guvnor als eine Möglichkeit der Bereitstellung von Regelverwaltung betrachten.

Aber kurz gesagt, nein, Sie müssen Ihre eigenen schreiben.

Beachten Sie, dass Sie keine Datei dazwischen benötigen, Sie können die Zeichenfolgendarstellung der Regel aus der db lesen und nur kompilieren.

1

Ich konfrontiert auch dasselbe Szenario. Ich habe alle Rule-Dateien in der Datenbank gespeichert.

Beim Laden von Regeln beim Start der Anwendung, habe ich die Regeln aus der Datenbank und gespeichert sie in temporären Ordner zum Kompilieren und setzen sie in Rule Base.

Wenn sich Ihre Regel während der Ausführung einer Anwendung ändert, aktualisieren Sie die geänderte Regel in Rule Base auf die gleiche Weise.

6

Ja, es kann getan werden. Alles, was Sie brauchen, ist die Fähigkeit InputStream zu erhalten. In meinem Fall verwende ich meine eigene JPA-Klasse RulePackage, um die Regelquelle als Byte [] beizubehalten, aber Sie könnten eine direkte JDBC-Verbindung verwenden, um auf BLOB/CLOB-Felder in Ihrem DB-Schema zuzugreifen. Wichtig ist auch gespeichert Regel Quelle Art der zu speichern, wird es erforderlich sein, wenn die Regel-Pakete:

switch(rulePackage.getRuleSourceType()) { 
    case DRL: 
    kbuilder.add(ResourceFactory.newByteArrayResource(rulePackage.getSource()), ResourceType.DRL); 
    break; 
    case EXCEL: 
    kbuilder.add(ResourceFactory.newByteArrayResource(rulePackage.getSource()), ResourceType.DTABLE, excelConfig); 
    break; 
    case CSV: 
    kbuilder.add(ResourceFactory.newByteArrayResource(rulePackage.getSource()), ResourceType.DTABLE, csvConfig); 
    break; 
    default: 
    throw new Exception("Rule package '" + rulePackage.getName() + "' has unknown type"); 
} 

Sie in Erwägung ziehen könnte newInputStreamResource Methode, wenn mehr anwendbar in Ihrem Fall mit:

case DRL: 
    kbuilder.add(ResourceFactory.newInputStreamResource(new StringInputStream(myDrlAsString)), ResourceType.DRL); 
    break; 

oder

case DRL: 
    kbuilder.add(ResourceFactory.newInputStreamResource(new ByteArrayInputStream(myDrlAsByteArr)), ResourceType.DRL); 
    break; 

So ähnlich.

4

Ja, Sie können dies tun, indem Sie Regelpakete (.pkg-Dateien) erstellen. Dies ist die kompilierte/binäre Form von Textregeln.

Sie können den Namen der Paketdatei angeben, während Sie den KnowledgeBuilder erstellen und wie oft die Regeln aktualisiert werden sollen (sagen wir 30 Sekunden).

Verwenden Sie Guvnor, um die Textregeln in .pkg-Dateien zu konvertieren. Bewahren Sie diese Datei in einem Ordner auf, in dem die Anwendung darauf zugreifen kann.

Bitte zurücksetzen, wenn Sie Codebeispiele benötigen.

0

Sobald Sie sich mit der Speicherung mehrerer Regelversionen in einem Datenspeicher beschäftigen, suchen Sie wirklich nach den Business Rule Management (BRMS) Funktionen von Guvnor (in Drools 5.x) oder Drools-WB/KIE- WB-Werkbänke in Drools 6.0.

Diese Lösungen haben für die Versionierung, Speicherung und Bereitstellung von mehreren Regelversionen aus der Box gelöst. Kurz gesagt, sie werden robuster sein als eine selbst entwickelte Lösung.