From: Mathieu Baudier Date: Mon, 11 Mar 2019 12:59:48 +0000 (+0100) Subject: GraalVM compatibility X-Git-Tag: argeo-commons-2.1.77~29 X-Git-Url: https://git.argeo.org/?p=lgpl%2Fargeo-commons.git;a=commitdiff_plain;h=df4cfa770a23bdd458a0fcf54e69e97156ea3591 GraalVM compatibility --- diff --git a/org.argeo.cms.e4.rap/cms/app.js b/org.argeo.cms.e4.rap/cms/app.js index 75a9df369..cd5e099eb 100644 --- a/org.argeo.cms.e4.rap/cms/app.js +++ b/org.argeo.cms.e4.rap/cms/app.js @@ -1,8 +1,12 @@ var AppUi = Java.type('org.argeo.cms.script.AppUi') -var CmsE4EntryPointFactory = Java.type('org.argeo.cms.e4.rap.CmsE4EntryPointFactory') +var CmsE4EntryPointFactory = Java + .type('org.argeo.cms.e4.rap.CmsE4EntryPointFactory') -APP.webPath = 'cms' -APP.pageTitle = 'Argeo CMS' - -APP.ui['devops'] = new AppUi(APP, new CmsE4EntryPointFactory('org.argeo.cms.e4/e4xmi/cms-devops.e4xmi')) -APP.ui['devops'].pageTitle = 'Argeo CMS DevOps' +APP.setWebPath('cms') +APP.setPageTitle('Argeo CMS') + +APP.getUi().put( + 'devops', + new AppUi(APP, new CmsE4EntryPointFactory( + 'org.argeo.cms.e4/e4xmi/cms-devops.e4xmi'))) +APP.getUi().get('devops').setPageTitle('Argeo CMS DevOps') 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 1bc2b0b5a..280213e05 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 @@ -34,36 +34,42 @@ public class CmsScriptRwtApplication implements ApplicationConfiguration { this.bundleContext = bundleContext; // System.out.println("bundleContext=" + bundleContext); // System.out.println("repository=" + repository); - ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); ClassLoader bundleCl = bundleContext.getBundle().adapt(BundleWiring.class).getClassLoader(); - ClassLoader currentCcl = Thread.currentThread().getContextClassLoader(); + ClassLoader originalCcl = Thread.currentThread().getContextClassLoader(); try { - Thread.currentThread().setContextClassLoader(bundleCl); + 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"); + } + + // Load script + URL appUrl = bundleContext.getBundle().getEntry("cms/app.js"); + // System.out.println("Loading " + appUrl); + // System.out.println("Loading " + appUrl.getHost()); + // System.out.println("Loading " + appUrl.getPath()); + + CmsScriptApp app = new CmsScriptApp(engine); + engine.put(APP, app); + engine.put(BC, bundleContext); + try (Reader reader = new InputStreamReader(appUrl.openStream())) { + engine.eval(reader); + } catch (IOException | ScriptException e) { + throw new CmsException("Cannot execute " + appUrl, e); + } + + if (log.isDebugEnabled()) + log.debug("CMS script app initialized from " + appUrl); + } catch (Exception e) { e.printStackTrace(); } finally { - Thread.currentThread().setContextClassLoader(currentCcl); - } - - // Load script - URL appUrl = bundleContext.getBundle().getEntry("cms/app.js"); - // System.out.println("Loading " + appUrl); - // System.out.println("Loading " + appUrl.getHost()); - // System.out.println("Loading " + appUrl.getPath()); - - CmsScriptApp app = new CmsScriptApp(engine); - engine.put(APP, app); - engine.put(BC, bundleContext); - try (Reader reader = new InputStreamReader(appUrl.openStream())) { - engine.eval(reader); - } catch (IOException | ScriptException e) { - throw new CmsException("Cannot execute " + appUrl, e); + Thread.currentThread().setContextClassLoader(originalCcl); } - - if (log.isDebugEnabled()) - log.debug("CMS script app initialized from " + appUrl); - } public void destroy(BundleContext bundleContext) {