public AppUi(CmsScriptApp app, String scriptPath) {
this.app = app;
- this.ui = new ScriptUi((BundleContext) app.getScriptEngine().get(CmsScriptRwtApplication.BC), scriptPath);
+ this.ui = new ScriptUi((BundleContext) app.getScriptEngine().get(CmsScriptRwtApplication.BC), app.getScriptEngine(), scriptPath);
}
public AppUi(CmsScriptApp app, CmsUiProvider uiProvider) {
public void init(BundleContext bundleContext) {
this.bundleContext = bundleContext;
- // System.out.println("bundleContext=" + bundleContext);
- // System.out.println("repository=" + repository);
ClassLoader bundleCl = bundleContext.getBundle().adapt(BundleWiring.class).getClassLoader();
ClassLoader originalCcl = Thread.currentThread().getContextClassLoader();
try {
- Thread.currentThread().setContextClassLoader(bundleCl);// GrallVM needs it to be before creating manager
- ScriptEngineManager scriptEngineManager = new ScriptEngineManager(bundleCl);
- engine = scriptEngineManager.getEngineByName("JavaScript");
- if (engine == null) {// Nashorn
- Thread.currentThread().setContextClassLoader(originalCcl);
- scriptEngineManager = new ScriptEngineManager();
- Thread.currentThread().setContextClassLoader(bundleCl);
- engine = scriptEngineManager.getEngineByName("JavaScript");
- }
+// Thread.currentThread().setContextClassLoader(bundleCl);// GraalVM needs it to be before creating manager
+// ScriptEngineManager scriptEngineManager = new ScriptEngineManager(bundleCl);
+// engine = scriptEngineManager.getEngineByName("JavaScript");
+// if (engine == null) {// Nashorn
+// Thread.currentThread().setContextClassLoader(originalCcl);
+// scriptEngineManager = new ScriptEngineManager();
+// Thread.currentThread().setContextClassLoader(bundleCl);
+// engine = scriptEngineManager.getEngineByName("JavaScript");
+// }
+ engine = loadScriptEngine(originalCcl, bundleCl);
// Load script
URL appUrl = bundleContext.getBundle().getEntry("cms/app.js");
this.repository = repository;
}
+ private static ScriptEngine loadScriptEngine(ClassLoader originalCcl, ClassLoader bundleCl) {
+ Thread.currentThread().setContextClassLoader(bundleCl);// GraalVM needs it to be before creating manager
+ ScriptEngineManager scriptEngineManager = new ScriptEngineManager(bundleCl);
+ ScriptEngine engine = scriptEngineManager.getEngineByName("JavaScript");
+ if (engine == null) {// Nashorn
+ Thread.currentThread().setContextClassLoader(originalCcl);
+ scriptEngineManager = new ScriptEngineManager();
+ Thread.currentThread().setContextClassLoader(bundleCl);
+ engine = scriptEngineManager.getEngineByName("JavaScript");
+ }
+ return engine;
+ }
}
import javax.jcr.RepositoryException;
import javax.script.Invocable;
import javax.script.ScriptEngine;
-import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import org.apache.commons.logging.Log;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.wiring.BundleWiring;
-public class ScriptUi implements CmsUiProvider {
+class ScriptUi implements CmsUiProvider {
private final static Log log = LogFactory.getLog(ScriptUi.class);
private boolean development = true;
// private Bindings bindings;
// private String script;
- public ScriptUi(BundleContext bundleContext, String path) {
- ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
- ClassLoader bundleCl = bundleContext.getBundle().adapt(BundleWiring.class).getClassLoader();
- ClassLoader currentCcl = Thread.currentThread().getContextClassLoader();
- try {
- Thread.currentThread().setContextClassLoader(bundleCl);
- scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
- scriptEngine.put(CmsScriptRwtApplication.BC, bundleContext);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- Thread.currentThread().setContextClassLoader(currentCcl);
- }
+ public ScriptUi(BundleContext bundleContext,ScriptEngine scriptEngine, String path) {
+ this.scriptEngine = scriptEngine;
+//// ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
+// ClassLoader bundleCl = bundleContext.getBundle().adapt(BundleWiring.class).getClassLoader();
+// ClassLoader originalCcl = Thread.currentThread().getContextClassLoader();
+// try {
+//// Thread.currentThread().setContextClassLoader(bundleCl);
+//// scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
+//// scriptEngine.put(CmsScriptRwtApplication.BC, bundleContext);
+// scriptEngine = CmsScriptRwtApplication.loadScriptEngine(originalCcl, bundleCl);
+//
+// } catch (Exception e) {
+// e.printStackTrace();
+// } finally {
+// Thread.currentThread().setContextClassLoader(originalCcl);
+// }
this.appUrl = bundleContext.getBundle().getEntry(path);
load();
}