From 5f1074b1658db47705b0b532099e19ba918c5745 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Thu, 21 Mar 2019 08:52:02 +0100 Subject: [PATCH] Fix regression in scripts --- .../src/org/argeo/cms/script/AppUi.java | 2 +- .../cms/script/CmsScriptRwtApplication.java | 33 ++++++++++++------- .../src/org/argeo/cms/script/ScriptUi.java | 33 ++++++++++--------- 3 files changed, 40 insertions(+), 28 deletions(-) diff --git a/org.argeo.cms.ui/src/org/argeo/cms/script/AppUi.java b/org.argeo.cms.ui/src/org/argeo/cms/script/AppUi.java index e0b2a883f..a2a554736 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/script/AppUi.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/script/AppUi.java @@ -53,7 +53,7 @@ public class AppUi implements CmsUiProvider, Branding { 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) { diff --git a/org.argeo.cms.ui/src/org/argeo/cms/script/CmsScriptRwtApplication.java b/org.argeo.cms.ui/src/org/argeo/cms/script/CmsScriptRwtApplication.java index 280213e05..cc5ea7ff5 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/script/CmsScriptRwtApplication.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/script/CmsScriptRwtApplication.java @@ -32,20 +32,19 @@ public class CmsScriptRwtApplication implements ApplicationConfiguration { 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"); @@ -107,4 +106,16 @@ public class CmsScriptRwtApplication implements ApplicationConfiguration { 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; + } } diff --git a/org.argeo.cms.ui/src/org/argeo/cms/script/ScriptUi.java b/org.argeo.cms.ui/src/org/argeo/cms/script/ScriptUi.java index a15c6c98b..fd9aa9d31 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/script/ScriptUi.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/script/ScriptUi.java @@ -6,7 +6,6 @@ import javax.jcr.Node; 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; @@ -15,9 +14,8 @@ import org.argeo.cms.ui.CmsUiProvider; 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; @@ -30,19 +28,22 @@ public class ScriptUi implements CmsUiProvider { // 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(); } -- 2.30.2