2017-08-16 12 views
0

JSR223 Samplerは、Groovyのは、他のスクリプト言語とは異なるCompilable interfaceを実施しているため、 スクリプト必見のために使用される言語エンジン、キャッシュとコンパイルを利用するにJMeterのスクリプトエンジンのキャッシングとコンパイル

を推奨していることを声明を持っている可能にします(Groovyのは これらはJava、BeanShellのの一つであるとJavaScriptではない)JSR223コンパイル可能なインタフェースを実装し

私はJSR223でsimilar codeを使用して、それをチェックしてみましたサンプラー。 私はコンパイル可能で、利用可能なすべての言語をチェックしてみました:

import javax.script.Compilable; 
import javax.script.ScriptEngineFactory; 
import javax.script.ScriptEngineManager; 
ScriptEngineManager mgr = new ScriptEngineManager(); 
    engineFactories = mgr.getEngineFactories(); 
    for (ScriptEngineFactory engineFactory : engineFactories) { 

     if (engineFactory instanceof Compilable) { 
       log.info(engineFactory.getEngineName() + " Script compilation is supported."); 
      } else { 
       log.info(engineFactory.getEngineName() + " Script compilation is not supported."); 
      } 
    } 

私の結果は次のとおりです。

なしサポートのコンパイルを意味
Oracle Nashorn Script compilation is not supported. 
JEXL Engine Script compilation is not supported. 
Groovy Scripting Engine Script compilation is not supported. 
JEXL Engine Script compilation is not supported. 
Velocity Script compilation is not supported. 
BeanShell Engine Script compilation is not supported. 

EDIT 1 は私がに応じて変化します@ aristotllの小切手を今すぐ返すすべてをサポートしています

final ScriptEngine engine = engineFactory.getScriptEngine(); 
if (engine instanceof Compilable) { 

私は興味深い結果を得ている@aristotll第二編集に応じ

try { 
      ((Compilable) engine).compile(""); 
         log.info(engineFactory.getEngineName() + " Script compilation is supported."); 
     } catch (Error e) { 
      log.info(engineFactory.getEngineName() + " Script compilation is not supported."); 

を変更EDIT 2

:NashornとJEXLは

Groovy Scripting Engine Script compilation is supported. 
Oracle Nashorn Script compilation is supported. 
JEXL Engine Script compilation is supported. 
BeanShell Engine Script compilation is not supported. 
JEXL Engine Script compilation is supported. 

アムそれをサポート私は何か間違っていることをチェックしているそれを可能にするためにもっと多くのjarをインポートする必要がありますか? スクリプトエンジンがキャッシュとコンパイルを使用するかどうかはどのように知ることができますか? JMeterのステートメントが間違っている/古いですか?

答えて

1

あなたが代わりにScriptEngineFactory

final ScriptEngine engine = engineFactory.getScriptEngine(); 
if (engine instanceof Compilable) { 
... 

なぜすべてCompilableScriptEngineインスタンスを取得する必要がありますか?これらのスクリプトエンジンは将来コンパイル可能であるためです。しかし、現在はサポートされていないので、すべてこのインターフェースを実装しています。 空の文字列をコンパイルしてみてください。

if (engine instanceof Compilable) { 
     try { 
      ((Compilable) engine).compile(""); 
     } catch (Error e) { 
      System.out.println(engineName + " Script compilation is not supported."); 
     } catch (ScriptException e) { 
      e.printStackTrace(); 
     } 
     System.out.println(engineName + " Script compilation is supported."); 
    } else { 
     System.out.println(engineName + " Script compilation is not supported."); 
    } 
+0

ありがとうございます。しかし今、私はすべてのスクリプトエンジンのサポートコンパイルを得ます – user7294900

+0

@ user7294900私は私の答えを更新します。 – aristotll

+0

Groovy Scripting Engineスクリプトのコンパイルがサポートされています。 Oracle Nashorn Scriptのコンパイルがサポートされています。 JEXLエンジンスクリプトのコンパイルがサポートされています。 BeanShell Engineスクリプトのコンパイルはサポートされていません。 JEXLエンジンスクリプトのコンパイルがサポートされています。 – user7294900

関連する問題