2013-06-23 21 views
6

Tôi mới làm quen với Drools. Tôi tạo ra một quy tắc nhưng tôi nhận được một lỗi thời gian biên dịchPhương ngữ Mvel trong Drools là gì?

"lĩnh vực không hiển thị'.

tôi đã cố gắng để kiểm tra với các ví dụ Jboss, nơi họ sử dụng phương ngữ 'mvel' Tôi đã không hiểu về phương ngữ Vì vậy, những gì là dialect=mvel?

Trả lời

0

Tôi tìm thấy một số điều về this.I chia sẻ với that.Drools được hỗ trợ Java hoặc MVEL scripting language.Để có được giá trị thuộc tính đối tượng.Ví dụ , Fibonacci có bean và có nhiều thuộc tính tức là, chuỗi

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 

chúng ta cần phải kiểm tra nếu chuỗi == 1 thì giá trị là -1 .Công giá trị chuỗi được thiết lập vào Fibonacci object.We được kiểm tra các giá trị dựa trên MVEL hoặc java.MVEL là một superset của Java.

2

Dựa trên

Drools JBoss Rules 5.0 Developer Hướng dẫn

Dialect được sử dụng để xác định cú pháp trong bất kỳ biểu hiện mã đó là trong một điều kiện hay hậu quả. Giá trị mặc định là Java. Drools hiện hỗ trợ thêm một phương ngữ gọi là mvel.

Mốc cụ thể là ngôn ngữ biểu thức cho các ứng dụng dựa trên Java. Và nó dựa trên cú pháp Java. more info about mvel

9

mvel, hoặc MVFLEX Expression Languagerich syntax, nhiều trong số đó cho phép mã ngắn gọn hơn và biểu cảm (và ít bắt buộc) so với java, ví dụ

  • Shorthand cho get() ters/set() ters (ví dụ đóng gói các lĩnh vực tư nhân) để được truy cập trong một property cú pháp phong cách thay thế (tương tự như VB or C# properties in .Net)

tức.thay vì

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

Bạn có thể sử dụng cú pháp (chú ý công tắc vốn hóa tinh tế cũng):

myObject.someField = "SomeValue" 
x = myObject.someIntField // Type inferrence 
  • Các return tuyên bố là không bắt buộc (một quy ước được tìm thấy trong nhiều ngôn ngữ chức năng như Scala), như là dấu chấm phẩy, trừ khi bạn có nhiều câu lệnh trên mỗi dòng:

x // i.e. return x; 
  • tạo mảng Shorthand và lập chỉ mục bởi thứ

foos = {2, 4, 6, 8, 10} 
foos[3] // foos.get(3) 
  • Tương tự như vậy cho Maps (Từ điển)

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 an toàn hành hải (như các nhà điều hành null-có điều kiện trong 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 

Mục đích của phương ngữ "mvel" là để chỉ các Getter và Giải quyết các biến của các lớp đối tượng Java cũ (POJO) đơn giản của bạn. Hãy xem xét ví dụ trên, trong đó một lớp Holiday được sử dụng và bên trong dấu ngoặc tròn (dấu ngoặc đơn) "tháng" được sử dụng. Vì vậy, với phương ngữ trợ giúp "mvel" getter và setters của biến "tháng" có thể được truy cập.

Phương ngữ "java" được sử dụng để giúp chúng tôi viết mã Java của chúng tôi trong các quy tắc của chúng tôi. Có một hạn chế hoặc đặc điểm về điều này. Chúng tôi không thể sử dụng mã Java bên trong "khi" một phần của quy tắc nhưng chúng tôi có thể sử dụng mã Java trong phần "sau đó".

Chúng tôi cũng có thể khai báo biến Tham chiếu $ h1 mà không có ký hiệu $. Không có hạn chế về điều này. Mục đích chính của việc đặt ký hiệu $ trước biến là đánh dấu sự khác biệt giữa các biến của các lớp và các quy tắc POJO.

Trân trọng.