मैं इस मुद्दे पर दौड़ रहा हूं जहां राइनो javax.script.ScriptEngine
एपीआई के माध्यम से राइनो चलाते समय "Encountered code generation error while compiling script: generated bytecode for method exceeds 64K limit" अपवाद फेंकता है। स्वीकृत समाधान पर setOptimizationLevel(-1)
का आह्वान करना प्रतीत होता है।जावा 6 में RhinoScriptEngine के लिए अनुकूलन स्तर सेट करना संभव है?
दुर्भाग्य से, द्वारा बनाई गई Context
तक पहुंच नहीं लग रहा है। मैंने ContextFactory.Listener
को ContextFactory.getGlobal()
में जोड़ने का प्रयास किया है जो सृजन के बाद Context
को संशोधित करेगा, लेकिन मेरे श्रोता को कभी भी कॉल नहीं किया जाता है। मैंने यह देखने के लिए RhinoScriptEngine source from Java 6 पर एक नज़र डाली कि क्या कोई ऐसी संपत्ति थी जिसे मैं सेट कर सकता हूं कि ContextFactory
ऑप्टिमाइज़ेशन स्तर के मान को निर्धारित करने के लिए पढ़ा जाएगा।
जहां तक मेरा बता सकता हूँ, जावा 7 में, RhinoScriptEngine
-1
लिए अनुकूलन स्तर डिफ़ॉल्ट से सेट और यह संभव rhino.opt.level
संपत्ति के माध्यम से अनुकूलन स्तर सेट करने में आता है। में makeContext()
विधि Java 6 version में makeContext()
विधि makeContext()
विधि की तुलना करें, जिसका अर्थ है कि मेरा क्या मतलब है।
जहाँ तक मैं कह सकता हूं, मेरा मानना है कि मेरा सबसे अच्छा विकल्प राइनो को सीधे चलाने के लिए है, जैसा कि in this example of using Rhino to run the CoffeeScript compiler दिखाया गया है। यद्यपि आप देख सकते हैं, कोड बहुत गड़बड़ है, इसलिए यदि संभव हो तो मैं javax.script.ScriptEngine
एपीआई का उपयोग करना पसंद करूंगा, जबकि जावा 6 का समर्थन जारी रखता हूं। क्या कोई अन्य विकल्प हैं?
एक अन्य विकल्प com.sun.script से कोड के सभी कॉपी करने के लिए है। जावास्क्रिप्ट पैकेज को एक नए पैकेज में (या संभावित रूप से समान नाम वाले वर्गों के साथ पैकेज-निजी सदस्यों तक पहुंचने के लिए) और अनुकूलन स्तर सेट करने के लिए makeContext() के कार्यान्वयन को बदलें, लेकिन यह ओवरकिल जैसा लगता है। – bolinfest
मुझे एक ही समस्या से मुलाकात हुई। जेडीके 8 में 'नैशर्न' एक और उन्नत जेएस इंजन है, नैशर्न 64 के समस्या को हल कर सकता है। –