From 12b636bc018c3dcd4d378e6506ac6ae220c033dc Mon Sep 17 00:00:00 2001
From: jakubs <jakubs>
Date: Mon, 18 Apr 2016 14:02:31 +0000
Subject: [PATCH] SSDM-3510 - make it possible to use jython 2.7 everywhere
 where we use python

SVN: 36197
---
 .../CustomASServiceScriptRunnerFactory.java   | 21 ++++----
 .../web/server/calculator/RowCalculator.java  |  2 +-
 .../generic/server/JythonEvaluatorPool.java   | 11 ++--
 .../JythonDynamicPropertyCalculator.java      |  5 +-
 .../JythonEntityValidationCalculator.java     |  6 +--
 .../shared/calculator/AbstractCalculator.java |  5 +-
 .../managed_property/IAtomicEvaluation.java   |  4 +-
 .../JythonManagedPropertyEvaluator.java       | 24 +++++----
 .../source/java/genericApplicationContext.xml |  8 ++-
 openbis/source/java/service.properties        |  4 +-
 .../server/JythonEvaluatorPoolTest.java       | 54 +++++++++----------
 .../server/TestJythonEvaluatorPool.java       |  6 ++-
 12 files changed, 83 insertions(+), 67 deletions(-)

diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/helper/service/CustomASServiceScriptRunnerFactory.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/helper/service/CustomASServiceScriptRunnerFactory.java
index c9e72d2c034..7837c8e87a7 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/helper/service/CustomASServiceScriptRunnerFactory.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/helper/service/CustomASServiceScriptRunnerFactory.java
@@ -24,22 +24,22 @@ import ch.ethz.sis.openbis.generic.asapi.v3.plugin.service.context.ServiceContex
 import ch.systemsx.cisd.common.jython.JythonUtils;
 import ch.systemsx.cisd.common.jython.evaluator.Evaluator;
 import ch.systemsx.cisd.common.jython.evaluator.EvaluatorException;
+import ch.systemsx.cisd.common.jython.evaluator.IJythonEvaluator;
 
 /**
- * 
- *
  * @author Franz-Josef Elmer
  */
 class CustomASServiceScriptRunnerFactory implements IScriptRunnerFactory
 {
     private final String scriptPath;
+
     private final IApplicationServerApi applicationService;
 
     public CustomASServiceScriptRunnerFactory(String scriptPath, IApplicationServerApi applicationService)
     {
         this.scriptPath = scriptPath;
         this.applicationService = applicationService;
-        Evaluator.initialize();
+        Evaluator.getFactory().initialize();
     }
 
     @Override
@@ -56,7 +56,7 @@ class CustomASServiceScriptRunnerFactory implements IScriptRunnerFactory
 
         try
         {
-            Evaluator evaluator = new Evaluator("", pythonPath, null, scriptString, false);
+            IJythonEvaluator evaluator = Evaluator.getFactory().create("", pythonPath, scriptPath, null, scriptString, false);
             String sessionToken = context.getSessionToken();
             ExecutionContext executionContext = new ExecutionContext(sessionToken, applicationService);
             return new ServiceScriptRunner(evaluator, executionContext);
@@ -65,16 +65,16 @@ class CustomASServiceScriptRunnerFactory implements IScriptRunnerFactory
             throw new EvaluatorException(ex.getMessage() + " [" + scriptPath + "]");
         }
     }
-    
+
     private static final class ServiceScriptRunner implements IServiceScriptRunner
     {
         private static final String PROCESS_FUNCTION_NAME = "process";
-        
-        private Evaluator evaluator;
+
+        private IJythonEvaluator evaluator;
 
         private ExecutionContext context;
 
-        ServiceScriptRunner(Evaluator evaluator, ExecutionContext context)
+        ServiceScriptRunner(IJythonEvaluator evaluator, ExecutionContext context)
         {
             this.evaluator = evaluator;
             this.context = context;
@@ -83,7 +83,7 @@ class CustomASServiceScriptRunnerFactory implements IScriptRunnerFactory
                 throw new EvaluatorException("Function '" + PROCESS_FUNCTION_NAME
                         + "' was not defined in the processing plugin script");
             }
-            
+
         }
 
         @Override
@@ -94,7 +94,7 @@ class CustomASServiceScriptRunnerFactory implements IScriptRunnerFactory
             {
                 return (Serializable) result;
             }
-            throw new EvaluatorException("Function '" + PROCESS_FUNCTION_NAME 
+            throw new EvaluatorException("Function '" + PROCESS_FUNCTION_NAME
                     + "' dosn't return a serializable object. Object type: " + result.getClass());
         }
     }
@@ -102,6 +102,7 @@ class CustomASServiceScriptRunnerFactory implements IScriptRunnerFactory
     public static final class ExecutionContext
     {
         private final String sessionToken;
+
         private final IApplicationServerApi applicationService;
 
         ExecutionContext(String sessionToken, IApplicationServerApi applicationService)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/RowCalculator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/RowCalculator.java
index 64987713ef4..addab7c3127 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/RowCalculator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/RowCalculator.java
@@ -40,7 +40,7 @@ public class RowCalculator extends AbstractCalculator
     public RowCalculator(ITableDataProvider provider, String expression,
             Set<ParameterWithValue> parameters)
     {
-        super(new Evaluator(substitudeParameters(expression, parameters), Math.class,
+        super(Evaluator.getFactory().create(substitudeParameters(expression, parameters), Math.class,
                 getBasicInitialScript()));
         row = new Row(provider);
         evaluator.set("row", row);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/JythonEvaluatorPool.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/JythonEvaluatorPool.java
index 77333fdd250..9e9992a2071 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/JythonEvaluatorPool.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/JythonEvaluatorPool.java
@@ -27,6 +27,7 @@ import org.apache.log4j.Logger;
 
 import ch.systemsx.cisd.common.jython.evaluator.Evaluator;
 import ch.systemsx.cisd.common.jython.evaluator.EvaluatorException;
+import ch.systemsx.cisd.common.jython.evaluator.IJythonEvaluator;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
@@ -164,9 +165,9 @@ public class JythonEvaluatorPool implements IJythonEvaluatorPool
     /**
      * Create the evaluator that has the body, and the default expression to be evaluated.
      */
-    private Evaluator createEvaluatorFor(String expression, Class<?> clazz, String script)
+    private IJythonEvaluator createEvaluatorFor(String expression, Class<?> clazz, String script)
     {
-        return new Evaluator(expression, clazz, script);
+        return Evaluator.getFactory().create(expression, clazz, script);
     }
 
     /**
@@ -174,7 +175,7 @@ public class JythonEvaluatorPool implements IJythonEvaluatorPool
      */
     public static class EvaluatorState
     {
-        private final Evaluator evaluator;
+        private final IJythonEvaluator evaluator;
 
         private final Map<String, Object> initialGlobals;
 
@@ -182,7 +183,7 @@ public class JythonEvaluatorPool implements IJythonEvaluatorPool
 
         private final Lock lock;
 
-        public EvaluatorState(Evaluator evaluator)
+        public EvaluatorState(IJythonEvaluator evaluator)
         {
             this.evaluator = evaluator;
             this.lock = new ReentrantLock();
@@ -237,7 +238,7 @@ public class JythonEvaluatorPool implements IJythonEvaluatorPool
 
         }
 
-        public Evaluator getEvaluator()
+        public IJythonEvaluator getEvaluator()
         {
             return evaluator;
         }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/JythonDynamicPropertyCalculator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/JythonDynamicPropertyCalculator.java
index f2e441dd521..cbec98f6b9b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/JythonDynamicPropertyCalculator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/JythonDynamicPropertyCalculator.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calc
 
 import ch.systemsx.cisd.common.jython.evaluator.Evaluator;
 import ch.systemsx.cisd.common.jython.evaluator.EvaluatorException;
+import ch.systemsx.cisd.common.jython.evaluator.IJythonEvaluator;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.api.IDynamicPropertyCalculator;
 import ch.systemsx.cisd.openbis.generic.shared.IJythonEvaluatorPool;
 import ch.systemsx.cisd.openbis.generic.shared.calculator.AbstractCalculator;
@@ -77,7 +78,7 @@ public class JythonDynamicPropertyCalculator implements IDynamicPropertyCalculat
         return runner.evaluate(new IAtomicEvaluation<String>()
             {
                 @Override
-                public String evaluate(Evaluator evaluator)
+                public String evaluate(IJythonEvaluator evaluator)
                 {
                     evaluator.set(ENTITY_VARIABLE_NAME, entity);
                     return evaluator.evalAsStringLegacy2_2();
@@ -90,7 +91,7 @@ public class JythonDynamicPropertyCalculator implements IDynamicPropertyCalculat
         runner.evaluate(new IAtomicEvaluation<Void>()
             {
                 @Override
-                public Void evaluate(Evaluator evaluator)
+                public Void evaluate(IJythonEvaluator evaluator)
                 {
                     return null;
                 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/JythonEntityValidationCalculator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/JythonEntityValidationCalculator.java
index 8cad262542c..50f695f73de 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/JythonEntityValidationCalculator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/JythonEntityValidationCalculator.java
@@ -16,8 +16,8 @@
 
 package ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator;
 
-import ch.systemsx.cisd.common.jython.evaluator.Evaluator;
 import ch.systemsx.cisd.common.jython.evaluator.EvaluatorException;
+import ch.systemsx.cisd.common.jython.evaluator.IJythonEvaluator;
 import ch.systemsx.cisd.openbis.generic.shared.IJythonEvaluatorPool;
 import ch.systemsx.cisd.openbis.generic.shared.calculator.AbstractCalculator;
 import ch.systemsx.cisd.openbis.generic.shared.hotdeploy_plugins.api.IEntityAdaptor;
@@ -103,7 +103,7 @@ public class JythonEntityValidationCalculator
         return runner.evaluate(new IAtomicEvaluation<String>()
             {
                 @Override
-                public String evaluate(Evaluator evaluator)
+                public String evaluate(IJythonEvaluator evaluator)
                 {
                     evaluator.set(CALCULATOR_VARIABLE, wrappedValidationRequestedDelegate);
                     evaluator.set(ENTITY_VARIABLE_NAME, entity);
@@ -118,7 +118,7 @@ public class JythonEntityValidationCalculator
         runner.evaluate(new IAtomicEvaluation<Void>()
             {
                 @Override
-                public Void evaluate(Evaluator evaluator)
+                public Void evaluate(IJythonEvaluator evaluator)
                 {
                     return null;
                 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/calculator/AbstractCalculator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/calculator/AbstractCalculator.java
index bcc63a8ac6b..a1ae5dbaa11 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/calculator/AbstractCalculator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/calculator/AbstractCalculator.java
@@ -20,6 +20,7 @@ import java.math.BigInteger;
 
 import ch.systemsx.cisd.common.jython.evaluator.Evaluator;
 import ch.systemsx.cisd.common.jython.evaluator.EvaluatorException;
+import ch.systemsx.cisd.common.jython.evaluator.IJythonEvaluator;
 import ch.systemsx.cisd.openbis.generic.shared.basic.PrimitiveValue;
 
 /**
@@ -40,9 +41,9 @@ public class AbstractCalculator
                 + "def float(x):return toFloat(x)" + NEWLINE;
     }
 
-    protected final Evaluator evaluator;
+    protected final IJythonEvaluator evaluator;
 
-    public AbstractCalculator(Evaluator evaluator)
+    public AbstractCalculator(IJythonEvaluator evaluator)
     {
         this.evaluator = evaluator;
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IAtomicEvaluation.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IAtomicEvaluation.java
index 31599d06c19..ad000a97f73 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IAtomicEvaluation.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IAtomicEvaluation.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.shared.managed_property;
 
-import ch.systemsx.cisd.common.jython.evaluator.Evaluator;
+import ch.systemsx.cisd.common.jython.evaluator.IJythonEvaluator;
 
 /**
  * Evaluation of python code loaded in the interpreter of an Evaluator.
@@ -25,5 +25,5 @@ import ch.systemsx.cisd.common.jython.evaluator.Evaluator;
  */
 public interface IAtomicEvaluation<T>
 {
-    public T evaluate(Evaluator evaluator);
+    public T evaluate(IJythonEvaluator evaluator);
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/JythonManagedPropertyEvaluator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/JythonManagedPropertyEvaluator.java
index cc64698c4d7..30fe43f3b9c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/JythonManagedPropertyEvaluator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/JythonManagedPropertyEvaluator.java
@@ -26,6 +26,7 @@ import org.apache.log4j.Logger;
 
 import ch.systemsx.cisd.common.jython.evaluator.Evaluator;
 import ch.systemsx.cisd.common.jython.evaluator.EvaluatorException;
+import ch.systemsx.cisd.common.jython.evaluator.IJythonEvaluator;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ManagedUiActionDescriptionFactory;
@@ -121,10 +122,11 @@ public class JythonManagedPropertyEvaluator implements IManagedPropertyEvaluator
     {
         this(new IEvaluationRunner()
             {
-                private Evaluator evaluator;
+                private IJythonEvaluator evaluator;
+
                 {
                     this.evaluator =
-                            new Evaluator("", ManagedPropertyFunctions.class, scriptExpression);
+                            Evaluator.getFactory().create("", ManagedPropertyFunctions.class, scriptExpression);
                 }
 
                 @Override
@@ -142,7 +144,7 @@ public class JythonManagedPropertyEvaluator implements IManagedPropertyEvaluator
         updateFromBatchFunctionDefined = runner.evaluate(new IAtomicEvaluation<Boolean>()
             {
                 @Override
-                public Boolean evaluate(Evaluator evaluator)
+                public Boolean evaluate(IJythonEvaluator evaluator)
                 {
                     return evaluator.hasFunction(UPDATE_FROM_BATCH_INPUT_FUNCTION);
                 }
@@ -152,7 +154,7 @@ public class JythonManagedPropertyEvaluator implements IManagedPropertyEvaluator
                 runner.evaluate(new IAtomicEvaluation<Boolean>()
                     {
                         @Override
-                        public Boolean evaluate(Evaluator evaluator)
+                        public Boolean evaluate(IJythonEvaluator evaluator)
                         {
                             return evaluator.hasFunction(UPDATE_FROM_REGISTRATION_FORM_FUNCTION);
                         }
@@ -161,7 +163,7 @@ public class JythonManagedPropertyEvaluator implements IManagedPropertyEvaluator
         boolean batchColumnNamesFunctionDefined = runner.evaluate(new IAtomicEvaluation<Boolean>()
             {
                 @Override
-                public Boolean evaluate(Evaluator evaluator)
+                public Boolean evaluate(IJythonEvaluator evaluator)
                 {
                     return evaluator.hasFunction(BATCH_COLUMN_NAMES_FUNCTION);
                 }
@@ -170,7 +172,7 @@ public class JythonManagedPropertyEvaluator implements IManagedPropertyEvaluator
         boolean inputWidgetsFunctionDefined = runner.evaluate(new IAtomicEvaluation<Boolean>()
             {
                 @Override
-                public Boolean evaluate(Evaluator evaluator)
+                public Boolean evaluate(IJythonEvaluator evaluator)
                 {
                     return evaluator.hasFunction(INPUT_WIDGETS_FUNCTION);
                 }
@@ -263,7 +265,7 @@ public class JythonManagedPropertyEvaluator implements IManagedPropertyEvaluator
         Object result = runner.evaluate(new IAtomicEvaluation<Object>()
             {
                 @Override
-                public Object evaluate(Evaluator evaluator)
+                public Object evaluate(IJythonEvaluator evaluator)
                 {
                     return evaluator.evalFunction(functionName);
                 }
@@ -291,7 +293,7 @@ public class JythonManagedPropertyEvaluator implements IManagedPropertyEvaluator
         runner.evaluate(new IAtomicEvaluation<Void>()
             {
                 @Override
-                public Void evaluate(Evaluator evaluator)
+                public Void evaluate(IJythonEvaluator evaluator)
                 {
                     evaluator.set(PROPERTY_VARIABLE_NAME, managedProperty);
                     evaluator.set(PROPERTY_PE_VARIABLE_NAME, entityProperty);
@@ -314,7 +316,7 @@ public class JythonManagedPropertyEvaluator implements IManagedPropertyEvaluator
         runner.evaluate(new IAtomicEvaluation<Void>()
             {
                 @Override
-                public Void evaluate(Evaluator evaluator)
+                public Void evaluate(IJythonEvaluator evaluator)
                 {
                     evaluator.set(PROPERTY_VARIABLE_NAME, managedProperty);
                     evaluator.set(PERSON_VARIABLE_NAME, person);
@@ -351,7 +353,7 @@ public class JythonManagedPropertyEvaluator implements IManagedPropertyEvaluator
             runner.evaluate(new IAtomicEvaluation<Void>()
                 {
                     @Override
-                    public Void evaluate(Evaluator evaluator)
+                    public Void evaluate(IJythonEvaluator evaluator)
                     {
                         evaluator.set(PROPERTY_VARIABLE_NAME, managedProperty);
                         evaluator.set(PERSON_VARIABLE_NAME, person);
@@ -371,7 +373,7 @@ public class JythonManagedPropertyEvaluator implements IManagedPropertyEvaluator
             runner.evaluate(new IAtomicEvaluation<Void>()
                 {
                     @Override
-                    public Void evaluate(Evaluator evaluator)
+                    public Void evaluate(IJythonEvaluator evaluator)
                     {
                         evaluator.set(PROPERTY_VARIABLE_NAME, managedProperty);
                         evaluator.set(PERSON_VARIABLE_NAME, person);
diff --git a/openbis/source/java/genericApplicationContext.xml b/openbis/source/java/genericApplicationContext.xml
index 870bcbe558b..c726b7fe9e6 100644
--- a/openbis/source/java/genericApplicationContext.xml
+++ b/openbis/source/java/genericApplicationContext.xml
@@ -25,6 +25,7 @@
 	<bean id="exception-translator"
 		class="ch.systemsx.cisd.openbis.generic.server.business.bo.NextExceptionFallbackExceptionTranslator" />
 
+
 	<bean id="memory-monitor"
 		class="ch.systemsx.cisd.common.monitoring.JMXMemoryMonitorSpringBean" />
 
@@ -281,6 +282,10 @@
 		<property name="timeout" value="${server-timeout-in-minutes}" />
 	</bean>
 
+  <bean id="jython-evaluator" class="ch.systemsx.cisd.common.jython.evaluator.JythonEvaluatorSpringComponent" >
+      <constructor-arg ref="propertyConfigurer" /> 
+  </bean>
+  
 	<bean id="etl-entity-operation-checker"
 		class="ch.systemsx.cisd.openbis.generic.server.ETLEntityOperationChecker" />
 
@@ -288,7 +293,7 @@
 		class="ch.systemsx.cisd.openbis.generic.server.business.EntityOperationChecker" />
 
 	<bean id="jython-evaluator-pool"
-		class="ch.systemsx.cisd.openbis.generic.server.JythonEvaluatorPool">
+		class="ch.systemsx.cisd.openbis.generic.server.JythonEvaluatorPool" depends-on="jython-evaluator">
 		<constructor-arg ref="dao-factory" />
 		<constructor-arg value="${jython-evaluator-pool-size}" />
 	</bean>
@@ -439,4 +444,5 @@
 		class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
 		<property name="configLocation" value="classpath:ehcache.xml" />
 	</bean>
+  
 </beans>
diff --git a/openbis/source/java/service.properties b/openbis/source/java/service.properties
index 80fcbbc1b08..f3366bd383a 100644
--- a/openbis/source/java/service.properties
+++ b/openbis/source/java/service.properties
@@ -174,4 +174,6 @@ demo.property_2 = some value 2
 # Name of the file that stores Web Client configuration
 web-client-configuration-file = etc/web-client.properties
 
-entity-history.enabled = true
\ No newline at end of file
+entity-history.enabled = true
+
+jython-version=2.7
\ No newline at end of file
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/JythonEvaluatorPoolTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/JythonEvaluatorPoolTest.java
index 0ff99ad9fd6..9f74240f4a2 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/JythonEvaluatorPoolTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/JythonEvaluatorPoolTest.java
@@ -49,7 +49,7 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.common.filesystem.FileUtilities;
-import ch.systemsx.cisd.common.jython.evaluator.Evaluator;
+import ch.systemsx.cisd.common.jython.evaluator.IJythonEvaluator;
 import ch.systemsx.cisd.common.utilities.TestResources;
 import ch.systemsx.cisd.openbis.generic.server.JythonEvaluatorPool.EvaluatorState;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
@@ -76,8 +76,8 @@ public class JythonEvaluatorPoolTest
         long start = System.currentTimeMillis();
         while (secondsSpentSince(start) < 2)
         {
-            List<Evaluator> resultList = executeParallel(getEvaluatorInUse());
-            assertThat(resultList, isFilledWithSameInstanceOf(Evaluator.class));
+            List<IJythonEvaluator> resultList = executeParallel(getEvaluatorInUse());
+            assertThat(resultList, isFilledWithSameInstanceOf(IJythonEvaluator.class));
         }
     }
 
@@ -95,7 +95,7 @@ public class JythonEvaluatorPoolTest
                 int counter = 5;
 
                 @Override
-                public String evaluate(Evaluator evaluator)
+                public String evaluate(IJythonEvaluator evaluator)
                 {
                     evaluator.set("action", this);
                     evaluator.set("runner", runner);
@@ -202,24 +202,24 @@ public class JythonEvaluatorPoolTest
         return results;
     }
 
-    private Callable<Evaluator> getEvaluatorInUse()
+    private Callable<IJythonEvaluator> getEvaluatorInUse()
     {
         final String script = "def something():\n\treturn '" + UUID.randomUUID().toString() + "'";
 
-        return new Callable<Evaluator>()
+        return new Callable<IJythonEvaluator>()
             {
                 @Override
-                public Evaluator call() throws Exception
+                public IJythonEvaluator call() throws Exception
                 {
                     return pool.getManagedPropertiesRunner(script).evaluate(
-                            new IAtomicEvaluation<Evaluator>()
-                                {
-                                    @Override
-                                    public Evaluator evaluate(Evaluator evaluator)
-                                    {
-                                        return evaluator;
-                                    }
-                                });
+                            new IAtomicEvaluation<IJythonEvaluator>()
+                        {
+                            @Override
+                            public IJythonEvaluator evaluate(IJythonEvaluator evaluator)
+                            {
+                                return evaluator;
+                            }
+                        });
                 }
             };
     }
@@ -235,17 +235,17 @@ public class JythonEvaluatorPoolTest
                 {
                     return pool.getManagedPropertiesRunner(script).evaluate(
                             new IAtomicEvaluation<Integer>()
-                                {
-                                    @Override
-                                    public Integer evaluate(Evaluator evaluator)
-                                    {
-                                        Integer x =
-                                                (Integer) evaluator
-                                                        .evalFunction("return_x_if_defined_else_0");
-                                        evaluator.evalFunction("set_x", 3);
-                                        return x;
-                                    }
-                                });
+                        {
+                            @Override
+                            public Integer evaluate(IJythonEvaluator evaluator)
+                            {
+                                Integer x =
+                                        (Integer) evaluator
+                                                .evalFunction("return_x_if_defined_else_0");
+                                evaluator.evalFunction("set_x", 3);
+                                return x;
+                            }
+                        });
                 }
             };
     }
@@ -255,7 +255,7 @@ public class JythonEvaluatorPoolTest
         return new IAtomicEvaluation<Void>()
             {
                 @Override
-                public Void evaluate(Evaluator evaluator)
+                public Void evaluate(IJythonEvaluator evaluator)
                 {
                     return null;
                 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/TestJythonEvaluatorPool.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/TestJythonEvaluatorPool.java
index efed5627f5e..fb3324b1cb1 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/TestJythonEvaluatorPool.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/TestJythonEvaluatorPool.java
@@ -17,6 +17,7 @@
 package ch.systemsx.cisd.openbis.generic.server;
 
 import ch.systemsx.cisd.common.jython.evaluator.Evaluator;
+import ch.systemsx.cisd.common.jython.evaluator.IJythonEvaluator;
 import ch.systemsx.cisd.openbis.generic.shared.IJythonEvaluatorPool;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.IAtomicEvaluation;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.IEvaluationRunner;
@@ -32,14 +33,15 @@ public class TestJythonEvaluatorPool implements IJythonEvaluatorPool
     {
         return new IEvaluationRunner()
             {
-                private Evaluator evaluator;
+                private IJythonEvaluator evaluator;
+
                 {
                     Class<?> importClass = clazz;
                     if (importClass == null)
                     {
                         importClass = Math.class;
                     }
-                    this.evaluator = new Evaluator(expression, importClass, script);
+                    this.evaluator = Evaluator.getFactory().create(expression, importClass, script);
                 }
 
                 @Override
-- 
GitLab