sitelink1  
sitelink2  
sitelink3  
sitelink4  
sitelink5  
sitelink6  

* ScriptEngine은 오라클 자바 7에서는 Rhino이고 오라클 자바 8버전 이후부터는 “JavaScript”로 입력해도 되는데 기본 스크립트 엔진이 Nashorn (ECMAScript-262 5.1)

    > ScriptEngine engine = manager.getEngineByName("nashorn");

    > OpenJDK 에서는 1.8 과 11 버전에서도 Nashorn 으로 동작한다

    > OpenJDK 11버전으로 실행하면 다음과 같은 warning이 뜸 - Warning: Nashorn engine is planned to be removed from a future JDK release

* Nashorn 엔진도 자바 11버전부터는 Deprecated

* Nashorn의 호환모드는 기본동작과 다르게 동작할 수 있다

* Nashorn의 호환모드는 java코드와 script가 혼재되어 스타일이나 일관성이 떨어진다

* Nashorn의 호환모드는 성능 저하도 발생

* Nashorn의 호환모드는 java에서 script 객체에 직접 접근이 가능(보안 이슈 발생)

* Nashorn의 대안으로 Java VM의 일종인 GraalVM 모듈이 가이드 되고 있음 (Java와 javascript 등의 언어를 함께 지원함)
 
 
 
현재 실행중인 ScriptEngine 의 정보를 출력하는 예제
 
import java.util.List;
import java.util.stream.Collectors;
 
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
 
public class TestScriptEngine {
 
    public static void main(String args[]) {
        
        
        ScriptEngineManager manager = new ScriptEngineManager();
        List<ScriptEngineFactory> engineFactories = manager.getEngineFactories();
 
        for (ScriptEngineFactory factory : engineFactories) {
            System.out.println("engine name: " + factory.getEngineName());
            System.out.println("engine version: " + factory.getEngineVersion());
 
            String extensions = factory.getExtensions().stream().collect(Collectors.joining(", "));
            System.out.println("extensions: " + extensions);
 
            System.out.println("language name: " + factory.getLanguageName());
            System.out.println("language version: " + factory.getLanguageVersion());
 
            String mimeTypes = factory.getMimeTypes().stream().collect(Collectors.joining(", "));
            System.out.println("mimeTypes: " + mimeTypes);
 
            String shortNames = factory.getNames().stream().collect(Collectors.joining(", "));
            System.out.println("shortNames :" + shortNames);
 
            String[] params = { ScriptEngine.NAME, ScriptEngine.ENGINE, ScriptEngine.ENGINE_VERSION,
                    ScriptEngine.LANGUAGE, ScriptEngine.LANGUAGE_VERSION };
 
            for (String param : params) {
                System.out.printf("parameter '%s': %s\n", param, factory.getParameter(param));
            }
            System.out.println("---------------");
        }
        
        
        
        
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
        try {
            if(!(engine instanceof Invocable))  {
                System.out.println("Invocable 인터페이스 사용 불가");
            } else {
                System.out.println("Invocable 인터페이스 사용 가능");
            }
            System.out.println("---------------");
            
            engine.eval("print('Hello World');");
        } catch (ScriptException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}