2010-12-11 23 views
5

आम तौर पर मैं उन घटनाओं के लिए नियम लिख रहा हूं जो बराबर (गुणों के मूल्यों से) घटनाएं लगातार किसी भी समय (हर सेकेंड) हो सकती हैं। मैं केवल एक घंटे के आधार पर मिलान की घटनाओं के लिए नियमों को आग लगाना चाहता हूं।डोलॉल्स - दोहराए गए कार्यक्रम और अस्थायी संबंध

अधिक जानकारी में: मैं पहली बार एक ईवेंट डालने पर एक नियम को आग लगाना चाहता हूं (अभी तक अस्तित्व में नहीं है) या जब कोई ईवेंट डाला जाता है और यदि और केवल तभी होता है जब वर्किंग मेमोरी में बराबर घटनाएं पहले से डाली जाती हैं लेकिन उनमें से सबसे कम से कम एक घंटे पहले पुराना है।

इस तरह के नियम लिखने का उचित तरीका क्या है, घटनाओं की अवधि 24 घंटे होगी?

उत्तर

0

आप इस प्रकार का वैश्विक कतार बना सकते हैं:

global java.util.List eventQueue; 

आपका भी जावा से अपने वैश्विक कतार में पहुंचने की आवश्यकता तो बस का उपयोग करें:

session.getGlobals(); 
session.setGlobal(name, value); 

इस कतार में एक घटना और संबंधित बचाने पहर। फिर इस कतार में प्रति घंटा फॉर्म जावा कोड की जांच करें, और टाइमस्टैम्प के आधार पर नियम निष्पादित करें। यह गरीब drools दृष्टिकोण नहीं है, लेकिन सीधा है।

1
rule X 
when 
    $e : MyEvent() from entry-point "s" 
    not(MyEvent(this != $e, id == $e.id, this before[0s,1h] $e) from entry-point "s") 
then 
    // $e arrived and there is no other event with the same 
    // id that happened during the last hour 
end 

बदलें "आईडी == $ e.id" जो कुछ बाधाओं आप तय करने के लिए दो घटनाओं को एक दूसरे से जुड़े हुए हैं का उपयोग करके।

संबंधित मुद्दे