2013-06-23 16 views
6

Sono nuovo di Drools. Sto creando una regola, ma ricevo un errore di compilazioneChe cos'è il dialetto Mvel in Drools?

"campo non è visibile'.

Ho cercato di verificare con esempi Jboss, in cui usano dialettale 'MVEL' È stato compilato, non ho capito il dialetto, quindi cos'è dialect=mvel?

risposta

0

Ho trovato un po 'di cose su questo.Ha condiviso con that.Drools era supportato linguaggio di scripting Java o MVEL.Per ottenere valori delle proprietà dell'oggetto.Per esempio , Il Fibonacci ha un fagiolo e ha proprietà multiple, ovvero la sequenza

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 

dobbiamo controlla la sequenza se == 1 allora valore è -1 .I valori di sequenza si insediano in Fibonacci object.We vengono controllati i valori in base MVEL o java.MVEL è un sovrainsieme di Java.

2

Basato su

Drools JBoss Rules 5.0 Guida per gli sviluppatori

dialetto è utilizzato per specificare la sintassi di ogni espressione di codice che si trova in una condizione o conseguenza. Il valore predefinito è Java. Drools attualmente supporta un altro dialetto chiamato Mvel.

In particolare mvel è un linguaggio di espressione per le applicazioni basate su Java. Ed è basato sulla sintassi Java. more info about mvel

9

mvel, o MVFLEX Expression Language ha un rich syntax, molti dei quali consentono di codice più conciso ed espressivo (e meno imperativo) di java, ad esempio

  • Stenografia per get() ters/set() ters (ad esempio incapsulare campi privati) a cui accedere in una sintassi alternativa property stile (simile a VB or C# properties in .Net)

es.invece di

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

È possibile utilizzare la sintassi (si noti l'interruttore capitalizzazione sottile pure):

myObject.someField = "SomeValue" 
x = myObject.someIntField // Type inferrence 
  • Il return dichiarazione è opzionale (una convenzione presente in molti linguaggi funzionali come Scala), come è il punto e virgola, a meno che non si dispone di più istruzioni per riga:

x // i.e. return x; 
  • creazione matrice Shorthand e indicizzazione da ordinale

foos = {2, 4, 6, 8, 10} 
foos[3] // foos.get(3) 
  • Analogamente per mappe (dizionari)

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 sicuro operatore di navigazione (come l'operatore null-condizionale 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 

Lo scopo del dialetto "MVEL" è quello di puntare il Getter e Setter delle variabili delle classi Plain Old Java Object (POJO). Considera l'esempio precedente, in cui viene utilizzata una classe Holiday e all'interno delle parentesi tonde (parentesi) viene utilizzato "mese". Quindi con l'aiuto dialetto "mvel" si può accedere al getter e setter della variabile "month".

Dialect "java" viene utilizzato per aiutarci a scrivere il nostro codice Java nelle nostre regole. C'è una restrizione o caratteristica su questo. Non possiamo usare il codice Java all'interno della "quando" parte della regola ma possiamo usare il codice Java nella parte "allora".

Possiamo anche dichiarare una variabile di riferimento $ h1 senza il simbolo $. Non ci sono restrizioni su questo. Lo scopo principale di mettere il simbolo $ prima della variabile è quello di contrassegnare la differenza tra le variabili delle classi POJO e Regole.

Saluti.