2013-06-18 12 views
10

स्टेटलेस और स्टेटफुल ज्ञान सत्रों के बीच क्या अंतर है। मैंने कुछ दस्तावेज पढ़े हैं, दोनों राज्य बनाए रखा गया है। लेकिन मैं स्टेटलेस/स्टेटफुल ज्ञान सत्रों का उपयोग कब कर सकता हूं।डोलॉल्स: स्टेटलेस बनाम स्टेटफुल ज्ञान ज्ञान

उत्तर

12

स्टेटलेस: तथ्यों/कामकाजी स्मृति को फायरिंग नियमों से पहले ज्ञान आधार सत्र में डाला जाता है। इन तथ्यों को नियमों को निष्पादित करते समय किसी ऑब्जेक्ट पर सार्वजनिक विधियों को कॉल करके सेट किया जा सकता है और इन ऑब्जेक्ट्स को सेट करने के बाद बदले गए मानों के साथ वापस लौटा दिया जाता है।

तथ्यों में कोई भी परिवर्तन नियम निष्पादित करते समय, उदाहरण के insert(xyz) या modify(xyz) के लिए, नियम इंजन के बारे में पता नहीं किया जाता है।

राज्य: तथ्यों/कामकाजी स्मृति को फायरिंग नियमों से पहले ज्ञान आधार सत्र में डाला जाता है और नियमों को निकाल दिया जाता है() को स्मृति रिसाव से बचने के लिए बुलाया जाना चाहिए।

नियमों को निष्पादित करते समय तथ्यों में कोई भी बदलाव, उदाहरण के लिए insert(xyz) या modify(xyz), नियम इंजन से अवगत कराया गया है।

6

स्टेटलेस का मतलब है प्रत्येक अनुरोध के लिए एक नया सत्र बनाया गया है (इसलिए कोई राज्य बनाए रखा नहीं जाता है)। राज्य का मतलब यह है कि पिछले आदेश समाप्त होने पर सत्र जो भी राज्य था, जारी रहेगा (उदाहरण के लिए, सत्र में डाले गए सभी डेटा अभी भी वहां होंगे)।

5

जिस तरह से मैं इसे देखता हूं, मूल अंतर यह है कि जिस तरह से सत्र स्टेटलेस में ऑटो डिस्पोजेक्ट किया जाता है। एक बनाम दूसरे को चुनकर कोई प्रदर्शन लाभ नहीं हुआ है। असल में, स्टेटलेस सत्र इसके पीछे एक राज्यव्यापी सत्र का उपयोग करता है। तो आंकड़े जाओ!

0

1) स्टेटलेस ज्ञान सत्र के मामले में, नियम निष्पादन के दौरान यानी अग्नि नियम विधि कहा जाता है, डाले गए तथ्यों में संशोधन (तत्कालीन भाग में) नियम इंजन के लिए उपलब्ध नहीं है। राज्यव्यापी ज्ञान सत्र के मामले में, तथ्यों में कोई भी परिवर्तन नियम इंजन के लिए उपलब्ध है।

2) नियमों को निकाल दिए जाने के बाद, राज्यव्यापी ज्ञान सत्र वस्तु को सत्र को जारी करने और स्मृति रिसाव से बचने के लिए विधि निपटान() को कॉल करना होगा।

3) राज्यव्यापी ज्ञान सत्र के मामले में, तथ्यों में कोई भी परिवर्तन नियम इंजन के लिए उपलब्ध है। तो नियमों को क्रमशः कहा जाता है। यदि डीआरएल के अंतिम नियम में तथ्य ए संशोधित किया गया है, तो यह परिवर्तन सभी नियमों को फिर से सक्रिय करेगा और तथ्यों ए पर बनाए गए नियमों को आग लगा देगा। यह स्टेटलेस ज्ञान सत्र के मामले में नहीं है।

छिपा तथ्य स्टेटलेस सत्र भी नियम से पहले सक्रिय होने के बाद स्टेटफुल सत्र में इसके पीछे

0

एक स्टेटफुल सत्र का उपयोग करता है, हम तथ्यों को संशोधित करने और उन्हें पुन: लगाएं कर सकते हैं।

राज्यविहीन सत्र में, दूसरे हाथ पर, एक बार सभी नियमों निकाल दिया गया है (execute() का प्रयोग करके), हम आगे तथ्य नहीं संशोधित करने और उन्हें सत्र में डालें (के रूप में सत्र व्यर्थ execution() कहा जाता है के बाद है) कर सकते हैं।

8

स्टेटलेस सत्र जो सबसे सरल उपयोग केस बनाता है, अनुमान का उपयोग नहीं करता है। एक स्टेटलेस सत्र को फ़ंक्शन की तरह बुलाया जा सकता है, इसे कुछ डेटा पास कर दिया जा सकता है और फिर कुछ परिणाम प्राप्त हो सकते हैं। राज्य के सत्र लंबे समय तक रहते हैं और समय के साथ पुनरावृत्त परिवर्तन की अनुमति देते हैं।

राज्य के सत्र के मामले में यह तथ्यों में परिवर्तन के लिए काम करने की स्मृति पर नज़र रखता है।तथ्यों में किए गए किसी भी बदलाव से नियमों के मूल्यांकन चरण का पुनर्मूल्यांकन किया जाएगा, जिससे बदले में नियम सक्रियण के लिए निर्धारित हो सकता है।
स्टेटलेस सत्र के मामले में यह तथ्यों में परिवर्तनों का जवाब नहीं देता है,
पोस्ट-निष्पादन।

स्टेटफुल सत्र के मामले में कॉल करने के लिए आवश्यक है निपटाने() विधि जब तुम, स्टेटफुल सत्र के साथ किया जाता है जब तक आप अपने KieSession पाने के लिए RuntimeManager/RuntimeEngine के उपयोग कर रहे हैं।
स्टेटलेस सत्र को निपटान() विधि को कॉल करने की आवश्यकता नहीं है।

स्टेटफुल सत्र के मामले में यह (अर्थात नियम सक्रियण के लिए निर्धारित करने के परिणामों पर अमल) "आग" को इंजन पैदा करने के लिए तरीकों की एक किस्म प्रदान करता है। fireAllRules()
fireAllRules (AgendaFilter फिल्टर)
fireAllRules (AgendaFilter फिल्टर, पूर्णांक अधिकतम)
fireAllRules (पूर्णांक अधिकतम)
fireUntilHalt() fireUntilHalt (AgendaFilter फिल्टर)
राज्यविहीन सत्र इंजन के मामले में एक कॉल के माध्यम से
निष्पादन() विधियों के माध्यम से "आग" के कारण होता है। दो प्रकार हैं; 1) एक ऑब्जेक्ट/तथ्य, या 2 पास करें) एक पुनरावृत्त ऑब्जेक्ट पास करें जिसमें तथ्य (ओं) है जिसका उपयोग किया जाएगा।

तथ्यों में किसी भी बदलाव के रूप में स्टेटफुल सत्र के मामले में, इस परिवर्तन होगा सभी नियमों को फिर से सक्रिय और नियम हैं कि आग तो अगर एक नियम एक विशेष तथ्य के लिए संशोधित किया गया है नियम इंजन के लिए उपलब्ध है संशोधित तथ्य पर निर्माण।
राज्यविहीन सत्र के मामले में में कोई परिवर्तन तथ्यों जबकि नियमों को क्रियान्वित नियम इंजन के बारे में पता नहीं किया जाता है इसलिए यदि किसी भी नियम संशोधित किया गया है नियमों का कोई अन्य पुनः सक्रियण को होगा।

उदाहरण के साथ इन मतभेदों को आप नीचे दिए गए लिंक में अंतर की एक पूरी उदाहरण मिल सकता है इस Drools Stateful vs Stateless post

0

मैं drools प्रलेखन यहाँ जो मेरे मन को मंजूरी दे दी उद्धृत करने के लिए चाहते हैं।

"StatelessKnowledgeSession StatefulKnowledgeSession लपेटकर, एक सुविधा एपीआई प्रदान करता है। यह कॉल करने के लिए निपटान()। स्टेटलेस सत्र पुनरावृत्ति आमंत्रण का समर्थन नहीं करते की जरूरत, बुला अमल (...) का कार्य बचा जाता है एक भी है शॉट विधि जो आंतरिक रूप से एक स्टेटफुलनल ज्ञान सत्र को तुरंत चालू करेगी, सभी उपयोगकर्ता डेटा और उपयोगकर्ता आदेश निष्पादित करें, आग कॉल करें, और फिर निपटान() को कॉल करें।"

तो बुनियादी तौर पर, राज्यविहीन सत्र स्टेटफुल सत्र एक बार इस्तेमाल किया है।

यह तो, कि राज्यविहीन सत्र भी अनुमान कर सकते हैं मतलब कई दस्तावेज के विपरीत है और कुछ जवाब यहां कहा! यह केवल पर निर्भर होना चाहिए "फिर" शासन का हिस्सा है, कि क्या आप का उपयोग मैं अपने आप को इस की पुष्टि नहीं की है, "संशोधित" या नहीं।

, इस पोस्ट मेरी तर्क का समर्थन लगता है।

https://groups.google.com/forum/#!topic/drools-usage/qYbqiS1ht4g

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