2009-06-19 10 views
8

जावा के अंदर मैं "स्क्रिप्टिंग इंजन" का प्रभावी ढंग से उपयोग कैसे करूं?जावा स्क्रिप्टिंग इंजन कहां उपयोग किया जाता है?

स्क्रिप्टिंग इंजन का उपयोग करने के लिए सभी सही उपयोग-मामले क्या हैं?

क्या "स्क्रिप्टिंग इंजन" का उपयोग कर एक ओपन सोर्स प्रोजेक्ट है?

एक बात ध्यान में आती है कि "क्लोजर, फंक्शनल प्रोग्रामिंग" समर्थन संभव है, लेकिन यह "आवेदन आवश्यकता" से अधिक तकनीकी उपयोग है।

कॉन्फ़िगर करने योग्य प्लगइन्स ठीक हैं। लेकिन अभी भी उच्च स्तर पर इतने सारे पैटर्न (आगंतुक, सजावटी) वही कर सकते हैं।

मुझे आवश्यकता अच्छी तरह से नहीं पता ... जावा ईई पैटर्न में इसका प्रभावी ढंग से उपयोग किया जा सकता है ... जहां यह मौजूदा पैटर्न के साथ पूरक हो सकता है।

इसके अलावा मैं कुछ व्यवसायिक उपयोगों के साथ और अधिक उत्तरों देखना चाहता हूं। शायद सदस्यता या स्थान के आधार पर बिक्री के दौरान किसी उत्पाद के लिए जटिल छूट ढूंढना। एक जटिल एल्गोरिदम के लिए रैंकिंग ढूँढना। विशेष रूप से कुछ परिदृश्य में जावा क्यों नहीं? (या .NET दुनिया में सी #)

उत्तर

12

पर गौर करना चाहिए जावा 6 में, स्क्रिप्टिंग इंजन समर्थन में बनाया गया है। उदाहरण के लिए,

// Create a script engine manager 
    ScriptEngineManager factory = new ScriptEngineManager(); 

    // Create a JavaScript engine 
    ScriptEngine engine = factory.getEngineByName("JavaScript"); 

    // Evaluate JavaScript code from String 
    engine.eval("print('Hello, World')"); 

क्यों आप एक का प्रयोग करेंगे? कुछ कारणों:

  1. आप एक पटकथा भाषा है कि आप जावा में उपयोग करना चाहते हैं में एक पुस्तकालय है (उदाहरण के लिए एक अजगर पुस्तकालय है कि आप Jython के माध्यम से चला सकते हैं)
  2. आप ग्राहकों के लिए एक विन्यास प्रोग्रामिंग तंत्र उपलब्ध कराना चाहते हैं, जैसे कि वे शॉर्ट कोड स्निपेट प्रदान कर सकते हैं। उदाहरण के लिए, मैंने पूर्व में यह किया है कि ग्राहकों को जावास्क्रिप्ट का उपयोग करके फ़िल्टर लिखने की इजाजत मिलती है (उदा। X < 2 और वाई> 5 और जेड> 10 है?)।
  3. आप विन्यास फाइल में सीधे पटकथा द्वारा चींटी जैसे उपकरणों में और अधिक जटिल तर्क लागू कर सकते हैं
  4. आप समाधान एक भाषा में अधिक है कि डोमेन के लिए उपयुक्त लागू कर सकते हैं (उदाहरण के लिए Clojure के माध्यम से lambdas का उपयोग कर), लेकिन JVM पर अपने निर्भरता को बनाए रखने ।

कार्यान्वयन में राइनो (जावास्क्रिप्ट का जावा कार्यान्वयन), जैथन (जावा पायथन) और कई अन्य शामिल हैं।

+2

नोट: इस बात की कोई गारंटी नहीं है कि किसी भी इंजन को JVM के साथ बंडल किया जाएगा; इसलिए आपको अपने आवेदन के हिस्से के रूप में अपना खुद का लाने की जरूरत है। –

1

"स्क्रिप्टिंग इंजन का उपयोग करने के लिए सभी सही उपयोग-मामले क्या हैं?" यह एक सुंदर अस्पष्ट सवाल है। कई उपयोग के मामले हैं। यहां कुछ मैं अभी के बारे में सोच सकते हैं:

  1. प्लगइन/एक्सटेंशन प्रणाली
  2. आईडीई
  3. लाइव डेमो

मैं तुम्हें विशेष रूप से JSR 223 की बात कर रहे संभालने हूँ के साथ

  • प्रोग्रामिंग ट्यूटोरियल । यदि हां, तो आप scripting.dev.java.net

  • 1

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

    उपयोगकर्ता ज्यादा भारी कोड-संकलक-जार तैनाती समाधान से बचने के लिए आवेदन (मैक्रो) के साथ ही लागू हल्के प्रसंस्करण के भीतर स्क्रिप्ट आम संचालन करने के लिए अनुमति दी है। यदि उपयोगकर्ता के पास मेरे प्रसंस्करण ढांचे के लिए प्लगइन का विचार है, तो वे रीयलटाइम में ग्रोवी के माध्यम से प्रोटोटाइप कर सकते हैं और समय (या जब गति की आवश्यकता होती है) पर वापस जावा (शायद यहां तक ​​कि देशी) पर वापस जा सकते हैं। ध्यान रखें कि पटकथा आम तौर पर परिमाण की तुलना में जावा/सी # धीमी के आदेश है/C/C++

    9

    यहाँ कुछ मामलों में जहां मैं इसे का उपयोग किया है रहे हैं।

    1) जावा स्क्रिप्टिंग भाषा को कॉल करना चाहता है, उदाहरण 1. मेरे पास एक जावा ऐप है जो डब्लूएमडी जावास्क्रिप्ट विजेट के माध्यम से उपयोगकर्ता टिप्पणियों को स्वीकार करता है। (एक ही विजेट है कि StackOverflow का उपयोग करता है, वास्तव में।) उपयोगकर्ता Markdown प्रारूप में टिप्पणी में प्रवेश करती है और एक JavaScript लाइब्रेरी तसलीम बुलाया दो स्थानों पर HTML में बदल देता है: (1) ग्राहक पर, वास्तविक समय पूर्वावलोकन समर्थन करने के लिए; और (2) सर्वर पर है, क्योंकि मैं चाहता हूँ शुद्ध Markdown सर्वर से भेजने के लिए ग्राहक और स्टोर (बजाय किसी भी तरह Markdown में HTML उल्टा करने के लिए होने की) है कि वहाँ बहुत उपयोगकर्ता बाद में Markdown संपादित कर सकते हैं। सर्वर पर टिप्पणी संग्रहीत करते समय, मैं वहां रूपांतरण भी चलाता हूं, और मैं मार्कडाउन के साथ HTML को संग्रहीत करता हूं इसलिए टिप्पणी सूची प्रदर्शित करते समय मुझे गतिशील रूप से मार्कडाउन को परिवर्तित करने की आवश्यकता नहीं होती है। यह सुनिश्चित करने के लिए कि सर्वर पर HTML क्लाइंट पर HTML से मेल खाता है, मैं सटीक उसी शोडाउन लाइब्रेरी का उपयोग करना चाहता हूं। इसलिए मैं राइनो जावास्क्रिप्ट इंजन के अंदर शोडाउन सर्वर-साइड चलाता हूं।

    2) जावा पटकथा भाषा, उदाहरण 2. मैं एक तैनाती स्वचालन अनुप्रयोग है कि इस तरह के डेवलपर्स, sysadmins के रूप में अलग-अलग भूमिकाओं भर में हितधारकों, शामिल है और जारी इंजीनियरों पर काम कर रहा हूँ कॉल करने के लिए चाहता है। संपूर्ण ऐप्लिकेशन (कार्यप्रवाह और यूआई) एक जावा अनुप्रयोग है, लेकिन विभिन्न स्थानों पर यह इस तरह, संकुल धक्का विन्यास की पुष्टि करने, संकुल, धूम्रपान परीक्षण, आदि स्थापित करने के लिए के रूप में विभिन्न लिपियों (जैसे रूबी, बैश), कॉल यह आंशिक रूप से, क्योंकि स्क्रिप्ट है निर्देशिका निर्माण, प्रतिलिपि बनाना, आगे बढ़ना, wgetting, आदि व्यक्त करने के लिए बेहतर/अधिक किफायती है, और आंशिक रूप से क्योंकि जिन लोगों के पास पाई के उस विशेष टुकड़े हैं, वे जानते हैं कि स्क्रिप्टिंग भाषाओं के साथ कैसे काम करना है, लेकिन जावा नहीं। इसलिए हम जावा की स्क्रिप्टिंग एपीआई का उपयोग करके यहां स्क्रिप्ट्स का आह्वान करते हैं। इस मामले में हम जावा के बाहर स्क्रिप्ट निष्पादित कर सकते हैं लेकिन नीचे # 3 देखें।

    3) स्क्रिप्टिंग भाषा जावा फोन करना चाहता है। उपरोक्त तैनाती आवेदन में, हमारे पास वेब-आधारित परिनियोजन लॉग हैं, और हमने तैनाती लॉग को यथासंभव पढ़ने और समझने में आसान बनाने के लिए बहुत प्रयास किए हैं, क्योंकि एक बड़ा डेवलपर/एसक्यूए/रिलीज इंजीनियर जनसंख्या लॉग का उपभोग करती है, और हर कोई एक तैनाती के साथ वास्तव में क्या चल रहा है के सभी विवरण समझता है। सुंदर मुद्रण और रंग-कोडिंग दृष्टिकोण का हिस्सा हैं। हमने जावा में एक सुंदर प्रिंटिंग परिनियोजन लॉग एपीआई लागू की है, लेकिन हम स्क्रिप्ट को कॉल करने में सक्षम होना चाहते हैं। तो उदाहरण के लिए जब रूबी पुश स्क्रिप्ट चलती है, तो हम चाहते हैं कि यह सुंदर-प्रिंटर पर अपनी प्रगति लॉग करे। JRuby के अंदर रूबी चलाना रूबी स्क्रिप्ट को जावा सुंदर-प्रिंटर API देखने की अनुमति देता है।

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