2017-11-16 9 views
3

Javascript의 Nashorn 평가 결과를 나중에 Java 클래스 파일로 변환하여 나중에 호출 할 수 있습니까? (예 : JSP -> Java -> 클래스 파일)Java 클래스로 컴파일 된 Nashorn 출력

Nashorn에서 HTML 출력을 생성하는 데 사용하는 Javascript 파일이 있습니다. javascript 파일에는 각 구성 요소마다 다른 기능이있어 각각에 대해 HTML 출력을 생성합니다. 이러한 구성 요소 기능은 해당 구성 요소의 구성 요소 이름과 JSON 데이터를 사용하는 "renderServer"기능을 통해 동적으로 호출됩니다.

private ScriptEngine nashorn; 
ScriptEngineManager scriptEngineManager = new ScriptEngineManager(null); 
     this.nashorn = scriptEngineManager.getEngineByName("nashorn"); 
     this.nashorn.eval(new FileReader(jsFile); 
String compName="myComponent1";// Component 1 name 
String jsonData="{....}";// JSON data input for myComponent 
String formatted = "JSON.parse('" + jsonData + "')"; 

String htmlRender = "renderServer(\"" + myComponent1 + "\"," + formatted + ");"; 

Object finalResult = nashorn.eval(htmlRender); 

나는 평가의 컴파일 된 출력을 생성하는 대신 구성 요소 이름을 입력 JSON을 전달하여 때마다 nashorn.eval 일을 같은 자바 클래스를 호출합니다. 달성 할 수 있습니까?

+0

아니요, 불가능합니다. – Pointy

+0

@ 포인트 : 정말요? Rhino에서 가능했습니다 ... –

+0

@ T.J.Crowder ?? JavaScript를 "마치"마치 자바처럼 호출 할 수 있도록 랩핑 할 수 있지만 실제로는 JavaScript를 "컴파일"하는 것과는 다릅니다. Rhino에서 JavaScript를 평가 한 결과, Nashorn에 대해 알고있는 바에 따르면 평가 방법이 바이트 코드로 변환되지 않는다고 확신합니다. – Pointy

답변

0

아니요. nashorn에서 생성 한 바이트 코드를 유지하고 일반적인 Java 클래스처럼 사용할 방법이 없습니다. 컴파일 된 스크립트의 디스크 캐시를 가능하게하는 문서화되지 않은/지원되지 않는 "--persistent-code-cache"가 있습니다.하지만 여전히 Nashorn에 의해 내부적으로 사용됩니다. 임의의 클래스 로더로 이러한 클래스를로드 할 수 없으며 Java 코드에서 메소드를 호출 할 수 없습니다.

+0

jjs 명령에서 "--persistent-code-cache"를 사용하여 시도합니까? –

+0

네, 맞습니다.하지만 문서화되지 않았거나 지원되지 않는 옵션이라는 점에 유의하십시오. –