2013-06-23 5 views
6

Ich bin neu in Drools. Ich bin Erstellen einer Regel, aber ich erhalte eine Kompilierung FehlerWas ist Mvel Dialekt in Drools?

„Feld nicht sichtbar‘ ist.

Ich habe versucht, mit Jboss Beispiele zu überprüfen, wo sie Dialekt verwenden ‚MVEL‘ Es kompiliert. Ich habe über Dialekt nicht verstanden. So was ist dialect=mvel?

Antwort

0

Ich fand etwas auf this.I geteilt mit that.Droals wurde Java oder MVEL-Skriptsprache unterstützt. Um Objekteigenschaften values.For Beispiel zu erhalten Das Fibonacci hat eine Bean und mehrere Eigenschaften, zB die Sequenz

rule Recurse 
    salience 10 
    when 
     not (Fibonacci (sequence == 1))  
     f : Fibonacci (value == -1) 
    then 
     insert(new Fibonacci(f.sequence - 1)); 
     System.out.println("recurse for " + f.sequence); end 

wir brauchen die if-Sequenz == 1 dann Wert -1 .Die Sequenzwerte setzen in Fibonacci object.We zu überprüfen sind die Werte basierend auf MVEL oder java.MVEL ist eine Obermenge von Java überprüft.

2

Basierend auf

geifert JBoss Rules 5.0 Entwicklerhandbuch

Dialect wird verwendet, um die Syntax in jedem Codeausdruck angeben, die in einer Bedingung oder Folge ist. Der Standardwert ist Java. Drools unterstützt derzeit einen weiteren Dialekt namens MVEL.

Speziell mvel ist eine Ausdruckssprache für Java-basierte Anwendungen. Und es basiert auf Java-Syntax. more info about mvel

9

mvel oder MVFLEX Expression Language hat ein rich syntax, von denen viele für prägnanten und Ausdruckscode ermöglichen (und weniger zwingend notwendig) als java, z.B.

  • Abkürzung für get() ters/set() ters (z.B. private Felder Einkapselung) in einer alternativen property style Syntax (ähnlich VB or C# properties in .Net)

dh zugegriffen werden soll.statt

myObject.setSomeField("SomeValue"); 
int x = myObject.getSomeIntField(); 

Sie können die Syntax verwenden (beachten Sie die subtilen Kapitalisierung Schalter als auch):

myObject.someField = "SomeValue" 
x = myObject.someIntField // Type inferrence 
  • Die return Anweisung ist optional (eine Konvention in vielen funktionalen Sprachen wie Scala gefunden), wie das Semikolon, wenn Sie mehrere Anweisungen pro Zeile haben:

x // i.e. return x; 
  • Stenografie Array-Erstellung und Indizieren von ordinal

foos = {2, 4, 6, 8, 10} 
foos[3] // foos.get(3) 
  • Ähnlich für Karten (Wörterbücher)

bars = ["a" : "Apple", "b" : "Basket"] // Hashmap, with put 
bars["a"] 
bars.a // Similar to dynamically typed object e.g. in javascript, if key is a string. 
  • Null sichere Navigation Operator (wie die Nullbedingungsoperator in Rosyln)

foo.?bar.baz // if (foo.bar != null) { return foo.bar.baz; } else { return null; } 
1
rule "validate holiday" 
    dialect "mvel" 
    dialect "java" 
    when 
     $h1 : Holiday(month == "july") 
    then 
     System.out.println($h1.name + ":" + $h1.month); 
    end 

Der Zweck Dialekt "MVEL" ist die Getter-zu-Punkt und Setter der Variablen Ihrer Plain Old Java Object (POJO) -Klassen. Betrachten Sie das obige Beispiel, in dem eine Holiday-Klasse verwendet wird und innerhalb der runden Klammern (Klammern) "Monat" verwendet wird. Mit dem Hilfe-Dialekt "mvel" kann also auf die Getter und Setter der Variable "month" zugegriffen werden.

Dialekt "Java" wird verwendet, um uns zu helfen, unseren Java-Code in unseren Regeln zu schreiben. Hier gibt es eine Einschränkung oder ein Merkmal. Wir können Java-Code nicht innerhalb des "wenn" -Teils der Regel verwenden, aber wir können Java-Code im "then" -Teil verwenden.

Wir können auch eine Referenzvariable $ h1 ohne das $ -Symbol deklarieren. Es gibt keine Einschränkung. Der Hauptzweck, das $ -Symbol vor die Variable zu setzen, besteht darin, den Unterschied zwischen Variablen von POJO-Klassen und Regeln zu markieren.

Grüße.