diff --git a/org.adempiere.base/OSGI-INF/groovyfactory.xml b/org.adempiere.base/OSGI-INF/groovyfactory.xml
new file mode 100644
index 0000000000..fdfd354b81
--- /dev/null
+++ b/org.adempiere.base/OSGI-INF/groovyfactory.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/org.adempiere.base/src/org/adempiere/base/Core.java b/org.adempiere.base/src/org/adempiere/base/Core.java
index 426ae8fe6a..c84d24890d 100644
--- a/org.adempiere.base/src/org/adempiere/base/Core.java
+++ b/org.adempiere.base/src/org/adempiere/base/Core.java
@@ -26,7 +26,6 @@ import java.util.List;
import java.util.logging.Level;
import javax.script.ScriptEngine;
-import javax.script.ScriptEngineManager;
import org.adempiere.base.osgi.OSGiScriptEngineManager;
import org.adempiere.model.IAddressValidation;
@@ -411,15 +410,9 @@ public class Core {
*/
public static ScriptEngine getScriptEngine(String engineName)
{
- ScriptEngineManager factory = new ScriptEngineManager(Core.class.getClassLoader());
- ScriptEngine engine = factory.getEngineByName(engineName);
-
- if(engine == null)
- {
- OSGiScriptEngineManager osgiFactory = new OSGiScriptEngineManager( FrameworkUtil.getBundle(Core.class).getBundleContext());
- engine = osgiFactory.getEngineByName(engineName);
- }
-
+ OSGiScriptEngineManager osgiFactory = new OSGiScriptEngineManager( FrameworkUtil.getBundle(Core.class).getBundleContext());
+ ScriptEngine engine = osgiFactory.getEngineByName(engineName);
+
return engine;
}
}
diff --git a/org.adempiere.base/src/org/adempiere/base/osgi/OSGiScriptEngineFactory.java b/org.adempiere.base/src/org/adempiere/base/osgi/OSGiScriptEngineFactory.java
index 15f45a32ea..e071878fc7 100644
--- a/org.adempiere.base/src/org/adempiere/base/osgi/OSGiScriptEngineFactory.java
+++ b/org.adempiere.base/src/org/adempiere/base/osgi/OSGiScriptEngineFactory.java
@@ -76,10 +76,10 @@ public class OSGiScriptEngineFactory implements ScriptEngineFactory{
public ScriptEngine getScriptEngine() {
ScriptEngine engine=null;
if(contextClassLoader!=null){
- ClassLoader old=Thread.currentThread().getContextClassLoader();
- Thread.currentThread().setContextClassLoader(contextClassLoader);
- engine=factory.getScriptEngine();
- Thread.currentThread().setContextClassLoader(old);
+ ClassLoader old=Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(contextClassLoader);
+ engine=factory.getScriptEngine();
+ Thread.currentThread().setContextClassLoader(old);
}
else engine=factory.getScriptEngine();
return engine;
diff --git a/org.adempiere.base/src/org/adempiere/base/osgi/OSGiScriptEngineManager.java b/org.adempiere.base/src/org/adempiere/base/osgi/OSGiScriptEngineManager.java
index e19832314f..a020533875 100644
--- a/org.adempiere.base/src/org/adempiere/base/osgi/OSGiScriptEngineManager.java
+++ b/org.adempiere.base/src/org/adempiere/base/osgi/OSGiScriptEngineManager.java
@@ -16,12 +16,7 @@
*/
package org.adempiere.base.osgi;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.URL;
import java.util.ArrayList;
-import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -32,8 +27,7 @@ import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
import javax.script.SimpleBindings;
-import org.compiere.util.Util;
-import org.osgi.framework.Bundle;
+import org.adempiere.base.Service;
import org.osgi.framework.BundleContext;
/**
@@ -201,63 +195,22 @@ public class OSGiScriptEngineManager extends ScriptEngineManager{
}
-
private Map findManagers(BundleContext context) {
+
Map managers=new HashMap();
- try {
- for(String factoryName: findFactoryCandidates(context)){
- //We do not really need the class, but we need the classloader
- ClassLoader factoryLoader=Class.forName(factoryName).getClassLoader();
+
+ List seFactoryList =
+ Service.locator().list(ScriptEngineFactory.class).getServices();
+ if (seFactoryList != null) {
+ for(ScriptEngineFactory seFactory : seFactoryList) {
+ ClassLoader factoryLoader = seFactory.getClass().getClassLoader();
ScriptEngineManager manager=new ScriptEngineManager(factoryLoader);
manager.setBindings(bindings);
managers.put(manager, factoryLoader);
}
- return managers;
- } catch (IOException ioe) {
- throw new RuntimeException(ioe);
- } catch (ClassNotFoundException cnfe) {
- throw new RuntimeException(cnfe);
}
+
+ return managers;
}
- /**
- * Iterates through all bundles to get the available @link ScriptEngineFactory classes
- * @return the names of the available ScriptEngineFactory classes
- * @throws IOException
- */
- private List findFactoryCandidates(BundleContext context) throws IOException{
- Bundle[] bundles = context.getBundles();
- List factoryCandidates = new ArrayList();
- for (Bundle bundle : bundles) {
- // IDEMPIERE-3243: removed print and small improvements on enumeration
- // System.out.println(bundle.getSymbolicName());
- if(bundle.getSymbolicName().equals("system.bundle")) continue;
- Enumeration urls = bundle.findEntries("META-INF/services",
- "javax.script.ScriptEngineFactory", false);
- if (urls == null)
- continue;
- while (urls.hasMoreElements()) {
- URL u = urls.nextElement();
- BufferedReader reader = new BufferedReader(
- new InputStreamReader(u.openStream()));
- String line;
- while ((line = reader.readLine()) != null)
- {
- // IDEMPIERE-3243: removed comment lines
-
- int commentIdx = line.indexOf('#');
-
- if(commentIdx >= 0)
- line = line.substring(0, commentIdx);
-
- line = line.trim();
-
- if(Util.isEmpty(line) == false)
- {
- factoryCandidates.add(line);
- }
- }
- }
- }
- return factoryCandidates;
- }
+
}