2 Stimmen

Physische Pakete und Paketdeklaration in DROOLS

Was ist der Zweck von physischen Paketen und Paketdeklarationen in Drools.

Zum Beispiel,

Ich habe eine Regel, Myrule.drl im physischen Paket com.mycompany

Soweit ich weiß, hängt die Paketdeklaration in Drools nicht vom tatsächlichen physischen Paket ab, in dem die Datei liegt.

Also kann ich in Myrule.drl folgendes angeben

package com.sample;

rule "meine Regel" when then end

Kann mir jemand helfen zu verstehen, was die Beziehung zwischen dem physischen Paket/Ordner ist, in dem sich die drl-Datei befindet und der Paketdeklaration in der drl-Datei?

Please note that the translation might not be perfect and can vary depending on the context.

6voto

Esteban Aliverti Punkte 6189

Dein Verständnis ist korrekt. Es besteht kein Zusammenhang zwischen der Paketdeklaration in deinem DRL und dem Ort, an dem sich die DRL-Datei befindet. Alle Java-Klassen, die entweder durch die RHS der Regeln oder die Typdeklarationen generiert werden, werden vom Compiler von Drools im Paket platziert, das in der DRL-Datei definiert ist, in der sie sich befinden. Dies ermöglicht es dir, Regeln zu haben oder Typen mit demselben Namen, aber in verschiedenen Paketen zu deklarieren.

Hoffe, es hilft,

3voto

laune Punkte 31164

Warum lesen Sie nicht einfach die Dokumentation, das Drools "Expert" Handbuch, Abschnitt 7.5?

Ein Paket ist eine Sammlung von Regeln und anderen verwandten Konstrukten, wie z. B. Imports und Globals. Die Paketmitglieder stehen in der Regel in Beziehung zueinander - vielleicht HR-Regeln, zum Beispiel. Ein Paket stellt einen Namensraum dar, der idealerweise für eine bestimmte Gruppierung von Regeln eindeutig gehalten wird. Der Paketname selbst ist der Namensraum und steht in keiner Weise in Verbindung mit Dateien oder Ordnern.

Es gibt mehr...

0voto

hfontanez Punkte 4864

Kann mir jemand helfen zu verstehen, was die Beziehung zwischen dem physischen Paket/Ordner, in dem die drl-Datei liegt, und der Paketdeklaration in der drl-Datei ist?

Es gibt keine direkte Beziehung. Du musst daran denken, was passiert, wenn du die Regel-Engine ausführst. Wenn du deine Anwendung ausführst, werden diese Regeln in virtuelle Objekte umgewandelt, die im deklarierten Namespace platziert werden. Also zum Beispiel:

DRL-Ausschnitt

package com.mystuff

import java.util.logging.Logger;
import java.util.logging.Level;

rule "Hello World"
    when
       Bedingung...
    then
       Logger.log(Level.INFO, "Hallo Welt");
end

Wenn diese Regel aktiviert wird, und du das Logging auf die richtigen Ebenen eingestellt hast, wirst du einen Eintrag sehen, der ähnlich ist wie dieser:

INFO   com.mystuff.Rule_HelloWorld592399015 defaultConsequence Hallo Welt

was beweist, dass die Regel in ein virtuelles Objekt umgewandelt wurde (du wirst es nicht als .class-Datei in deinem Projekt finden), das sich im Namespace com.mystuff befindet, wie Estaban Aliverti in diesem Beitrag erwähnt hat.

Dies ist nicht so wichtig, wenn du nur mit einer einzelnen Regeldatei arbeitest. Aber, wie du dir vorstellen kannst, wenn du mehrere Dateien mit ähnlichen Regeln hast, werden sie durch den im DRL-File enthaltenen Namespace aufgelöst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X