2013-02-22 23 views
5

Thay vì truy xuất tất cả các sự kiện, tôi cần truy xuất loại sự kiện cụ thể từ bộ nhớ làm việc.Truy xuất dữ kiện của một loại cụ thể từ bộ nhớ làm việc

tôi đã học được rằng tôi có thể truy xuất tất cả các sự kiện từ bộ nhớ hoạt động như dưới đây.

drools.getWorkingMemory().getWorkingMemoryEntryPoint("Stream").getObjects(); 

Vui lòng cung cấp một số gợi ý để truy xuất loại đối tượng cụ thể từ bộ nhớ hoạt động.

Trả lời

4

Thay vì sử dụng phương thức getObjects(), bạn có thể sử dụng truy vấn. Truy vấn giống như các quy tắc không có RHS:

query "getObjectsOfClassA" 
    $result: ClassA() 
end 

Bạn có thể sử dụng toàn bộ sức mạnh của ngôn ngữ DRL trong các truy vấn để tạo các mẫu khớp thực sự phức tạp. Bạn thậm chí có thể vượt qua đối số cho truy vấn quá: http://docs.jboss.org/drools/release/5.5.0.Final/drools-expert-docs/html_single/#d0e7632

Sau đó, trong mã java của bạn, bạn có thể gọi truy vấn của bạn sử dụng:

QueryResults results = ksession.getQueryResults("getObjectsOfClassA"); 
for (QueryResultsRow row : results) { 
    ClassA classA = (ClassA) row.get("$result"); //you can retrieve all the bounded variables here 
    //do whatever you want with classA 
} 

Nếu bạn cần tập hợp tất cả ClassA bạn có thể sử dụng một chức năng tích lũy trong truy vấn của bạn.

Hy vọng nó giúp,

5

Bạn có thể sử dụng một ObjectFilter

Collection<Object> myfacts = session.getObjects(new ClassObjectFilter(MyFact.class)); 

Đáng tiếc là trong Drools 5.5.0 cuối cùng, bộ sưu tập kết quả chứa phương pháp không hoạt động như mong đợi. Thông thường một phương thức chứa trả về true, nếu đối tượng tìm kiếm bằng một cái gì đó trong bộ sưu tập, nhưng bộ sưu tập của Drool chỉ tìm các đối tượng có cùng tham chiếu (nó sử dụng == để so sánh các đối tượng).

Các vấn đề liên quan