Fix regression in scripts
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 21 Mar 2019 07:52:02 +0000 (08:52 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 21 Mar 2019 07:52:02 +0000 (08:52 +0100)
org.argeo.cms.ui/src/org/argeo/cms/script/AppUi.java
org.argeo.cms.ui/src/org/argeo/cms/script/CmsScriptRwtApplication.java
org.argeo.cms.ui/src/org/argeo/cms/script/ScriptUi.java

index e0b2a883fcf173aa80c560d61f560bdc79625c3f..a2a554736158b16fab34e5dee50212e5c960c69a 100644 (file)
@@ -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) {
index 280213e0570086f257ed6e513b4db162b27a8dd0..cc5ea7ff50590959f6b57ce533d63a788ffab262 100644 (file)
@@ -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;
+       }
 }
index a15c6c98bd986a82a85b0b56eab218c9e79ddef4..fd9aa9d31d7297602e5d2498ad7b9f92e6626db5 100644 (file)
@@ -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();
        }