Repository: incubator-reef Updated Branches: refs/heads/master 1f1c7383c -> d23f26594
[REEF-754] Eliminate deserialization of context and service configuration submitted from .Net to Java - Use original serialized configuration strings when creating Evaluator configuration when calling from bridge - Remove class hierarchy from ActiveContextBridgeBridge and AllocatedEvaluatorBridge and corresponding Factories as it is not needed in those cases. - remove AvroConfigurationSerializer from those classes - refactor and clean up previouse added task configuration string methods JIRA: [REEF-754](https://issues.apache.org/jira/browse/REEF-754) Pull Request: This closes #497 Project: http://git-wip-us.apache.org/repos/asf/incubator-reef/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-reef/commit/d23f2659 Tree: http://git-wip-us.apache.org/repos/asf/incubator-reef/tree/d23f2659 Diff: http://git-wip-us.apache.org/repos/asf/incubator-reef/diff/d23f2659 Branch: refs/heads/master Commit: d23f2659426974e520a7c791301cce159c48c994 Parents: 1f1c738 Author: Julia Wang <[email protected]> Authored: Wed Sep 16 15:59:08 2015 -0700 Committer: Markus Weimer <[email protected]> Committed: Wed Sep 16 18:13:36 2015 -0700 ---------------------------------------------------------------------- .../reef/javabridge/ActiveContextBridge.java | 10 +- .../javabridge/ActiveContextBridgeFactory.java | 28 +--- .../javabridge/AllocatedEvaluatorBridge.java | 74 +++------- .../AllocatedEvaluatorBridgeFactory.java | 27 +--- .../evaluator/AllocatedEvaluatorImpl.java | 137 +++++++++++++++---- 5 files changed, 137 insertions(+), 139 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/d23f2659/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/ActiveContextBridge.java ---------------------------------------------------------------------- diff --git a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/ActiveContextBridge.java b/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/ActiveContextBridge.java index 46f44fd..48b7a0d 100644 --- a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/ActiveContextBridge.java +++ b/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/ActiveContextBridge.java @@ -21,8 +21,6 @@ package org.apache.reef.javabridge; import org.apache.reef.driver.context.ActiveContext; import org.apache.reef.io.naming.Identifiable; import org.apache.reef.runtime.common.driver.context.EvaluatorContext; -import org.apache.reef.tang.ClassHierarchy; -import org.apache.reef.tang.formats.AvroConfigurationSerializer; import java.util.logging.Level; import java.util.logging.Logger; @@ -31,17 +29,11 @@ public final class ActiveContextBridge extends NativeBridge implements Identifia private static final Logger LOG = Logger.getLogger(ActiveContextBridge.class.getName()); private final ActiveContext jactiveContext; - private final AvroConfigurationSerializer serializer; private final String contextId; private final String evaluatorId; - private final ClassHierarchy clrClassHierarchy; - ActiveContextBridge(final ActiveContext activeContext, - final ClassHierarchy clrClassHierarchy, - final AvroConfigurationSerializer serializer) { + ActiveContextBridge(final ActiveContext activeContext) { this.jactiveContext = activeContext; - this.clrClassHierarchy = clrClassHierarchy; - this.serializer = serializer; this.contextId = activeContext.getId(); this.evaluatorId = activeContext.getEvaluatorId(); } http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/d23f2659/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/ActiveContextBridgeFactory.java ---------------------------------------------------------------------- diff --git a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/ActiveContextBridgeFactory.java b/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/ActiveContextBridgeFactory.java index 77a06d7..46d6f26 100644 --- a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/ActiveContextBridgeFactory.java +++ b/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/ActiveContextBridgeFactory.java @@ -18,13 +18,10 @@ */ package org.apache.reef.javabridge; -import net.jcip.annotations.GuardedBy; import net.jcip.annotations.ThreadSafe; import org.apache.reef.annotations.audience.DriverSide; import org.apache.reef.annotations.audience.Private; import org.apache.reef.driver.context.ActiveContext; -import org.apache.reef.tang.ClassHierarchy; -import org.apache.reef.tang.formats.AvroConfigurationSerializer; import javax.inject.Inject; @@ -35,18 +32,11 @@ import javax.inject.Inject; @ThreadSafe @Private public final class ActiveContextBridgeFactory { - @GuardedBy("this") - private ClassHierarchy clrClassHierarchy; - private final AvroConfigurationSerializer configurationSerializer; - /** * This is always instantiated via Tang. - * - * @param configurationSerializer passed to the ActiveContextBridge instances for configuration serialization. */ @Inject - private ActiveContextBridgeFactory(final AvroConfigurationSerializer configurationSerializer) { - this.configurationSerializer = configurationSerializer; + private ActiveContextBridgeFactory() { } /** @@ -56,18 +46,6 @@ public final class ActiveContextBridgeFactory { * @return a new ActiveContextBridge. */ public ActiveContextBridge getActiveContextBridge(final ActiveContext context) { - return new ActiveContextBridge(context, this.getClrClassHierarchy(), this.configurationSerializer); - } - - /** - * Returns the clr ClassHierarchy. Loads it if needed. - * - * @return the clr ClassHierarchy. - */ - private synchronized ClassHierarchy getClrClassHierarchy() { - if (null == this.clrClassHierarchy) { - this.clrClassHierarchy = Utilities.loadClassHierarchy(NativeInterop.CLASS_HIERARCHY_FILENAME); - } - return this.clrClassHierarchy; + return new ActiveContextBridge(context); } -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/d23f2659/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/AllocatedEvaluatorBridge.java ---------------------------------------------------------------------- diff --git a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/AllocatedEvaluatorBridge.java b/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/AllocatedEvaluatorBridge.java index d390515..f393666 100644 --- a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/AllocatedEvaluatorBridge.java +++ b/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/AllocatedEvaluatorBridge.java @@ -21,9 +21,6 @@ package org.apache.reef.javabridge; import org.apache.reef.io.naming.Identifiable; import org.apache.reef.runtime.common.driver.evaluator.AllocatedEvaluatorImpl; import org.apache.reef.driver.evaluator.AllocatedEvaluator; -import org.apache.reef.tang.ClassHierarchy; -import org.apache.reef.tang.Configuration; -import org.apache.reef.tang.formats.AvroConfigurationSerializer; import java.util.logging.Level; import java.util.logging.Logger; @@ -36,8 +33,6 @@ public final class AllocatedEvaluatorBridge extends NativeBridge implements Iden private static final Logger LOG = Logger.getLogger(AllocatedEvaluatorBridge.class.getName()); private final AllocatedEvaluator jallocatedEvaluator; - private final AvroConfigurationSerializer serializer; - private final ClassHierarchy clrClassHierarchy; private final String evaluatorId; private final String nameServerInfo; @@ -45,12 +40,8 @@ public final class AllocatedEvaluatorBridge extends NativeBridge implements Iden * This constructor should only be called by the AllocatedEvaluatorBridgeFactory. */ AllocatedEvaluatorBridge(final AllocatedEvaluator allocatedEvaluator, - final ClassHierarchy clrClassHierarchy, - final String serverInfo, - final AvroConfigurationSerializer serializer) { + final String serverInfo) { this.jallocatedEvaluator = allocatedEvaluator; - this.serializer = serializer; - this.clrClassHierarchy = clrClassHierarchy; this.evaluatorId = allocatedEvaluator.getId(); this.nameServerInfo = serverInfo; } @@ -68,20 +59,11 @@ public final class AllocatedEvaluatorBridge extends NativeBridge implements Iden if (taskConfigurationString.isEmpty()) { throw new RuntimeException("empty taskConfigurationString provided."); } - final Configuration contextConfiguration; - final Configuration taskConfiguration; - try { - contextConfiguration = serializer.fromString(contextConfigurationString, clrClassHierarchy); - } catch (final Exception e) { - final String message = "Unable to de-serialize CLR context or task configurations using class hierarchy."; - LOG.log(Level.SEVERE, message, e); - throw new RuntimeException(message, e); - } - - //When submit over the bridge, we would keep the task configuration as a serialized string. - //submitContextAndTask(final Configuration contextConfiguration, + //When submit over the bridge, we would keep the task configurations as a serialized strings. + //submitContextAndTask(final String contextConfiguration, //final String taskConfiguration) is not exposed in the interface. Therefore cast is necessary. - ((AllocatedEvaluatorImpl)jallocatedEvaluator).submitContextAndTask(contextConfiguration, taskConfigurationString); + ((AllocatedEvaluatorImpl)jallocatedEvaluator) + .submitContextAndTask(contextConfigurationString, taskConfigurationString); } /** @@ -92,15 +74,11 @@ public final class AllocatedEvaluatorBridge extends NativeBridge implements Iden if (contextConfigurationString.isEmpty()) { throw new RuntimeException("empty contextConfigurationString provided."); } - final Configuration contextConfiguration; - try { - contextConfiguration = serializer.fromString(contextConfigurationString, clrClassHierarchy); - } catch (final Exception e) { - final String message = "Unable to de-serialize CLR context configurations using class hierarchy."; - LOG.log(Level.SEVERE, message, e); - throw new RuntimeException(message, e); - } - jallocatedEvaluator.submitContext(contextConfiguration); + + //When submit over the bridge, we would keep the contextConfigurationString as serialized strings. + //public void submitContext(final String contextConfiguration) + // is not exposed in the interface. Therefore cast is necessary. + ((AllocatedEvaluatorImpl)jallocatedEvaluator).submitContext(contextConfigurationString); } /** @@ -117,17 +95,11 @@ public final class AllocatedEvaluatorBridge extends NativeBridge implements Iden throw new RuntimeException("empty serviceConfigurationString provided."); } - final Configuration contextConfiguration; - final Configuration servicetConfiguration; - try { - contextConfiguration = serializer.fromString(contextConfigurationString, clrClassHierarchy); - servicetConfiguration = serializer.fromString(serviceConfigurationString, clrClassHierarchy); - } catch (final Exception e) { - final String message = "Unable to de-serialize CLR context or service configurations using class hierarchy."; - LOG.log(Level.SEVERE, message, e); - throw new RuntimeException(message, e); - } - jallocatedEvaluator.submitContextAndService(contextConfiguration, servicetConfiguration); + //When submit over the bridge, we would keep the configurations as serialized strings. + //public void submitContextAndService(final String contextConfiguration, + //final String serviceConfiguration) is not exposed in the interface. Therefore cast is necessary. + ((AllocatedEvaluatorImpl)jallocatedEvaluator) + .submitContextAndService(contextConfigurationString, serviceConfigurationString); } /** @@ -149,24 +121,12 @@ public final class AllocatedEvaluatorBridge extends NativeBridge implements Iden if (taskConfigurationString.isEmpty()) { throw new RuntimeException("empty taskConfigurationString provided."); } - final Configuration contextConfiguration; - final Configuration servicetConfiguration; - final Configuration taskConfiguration; - try { - contextConfiguration = serializer.fromString(contextConfigurationString, clrClassHierarchy); - servicetConfiguration = serializer.fromString(serviceConfigurationString, clrClassHierarchy); - } catch (final Exception e) { - final String message = - "Unable to de-serialize CLR context or service or task configurations using class hierarchy."; - LOG.log(Level.SEVERE, message, e); - throw new RuntimeException(message, e); - } //When submit over the bridge, we would keep the task configuration as a serialized string. //submitContextAndServiceAndTask(final Configuration contextConfiguration, final Configuration serviceConfiguration, //final String taskConfiguration) is not exposed in the interface. Therefore cast is necessary. - ((AllocatedEvaluatorImpl)jallocatedEvaluator) - .submitContextAndServiceAndTask(contextConfiguration, servicetConfiguration, taskConfigurationString); + ((AllocatedEvaluatorImpl)jallocatedEvaluator).submitContextAndServiceAndTask( + contextConfigurationString, serviceConfigurationString, taskConfigurationString); } /** http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/d23f2659/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/AllocatedEvaluatorBridgeFactory.java ---------------------------------------------------------------------- diff --git a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/AllocatedEvaluatorBridgeFactory.java b/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/AllocatedEvaluatorBridgeFactory.java index cd8b2bd..a90537e 100644 --- a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/AllocatedEvaluatorBridgeFactory.java +++ b/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/AllocatedEvaluatorBridgeFactory.java @@ -18,12 +18,9 @@ */ package org.apache.reef.javabridge; -import net.jcip.annotations.GuardedBy; import org.apache.reef.annotations.audience.DriverSide; import org.apache.reef.annotations.audience.Private; import org.apache.reef.driver.evaluator.AllocatedEvaluator; -import org.apache.reef.tang.ClassHierarchy; -import org.apache.reef.tang.formats.AvroConfigurationSerializer; import javax.inject.Inject; @@ -34,19 +31,13 @@ import javax.inject.Inject; @DriverSide @Private public final class AllocatedEvaluatorBridgeFactory { - @GuardedBy("this") - private ClassHierarchy clrClassHierarchy; - private AvroConfigurationSerializer serializer; - /** * This is always instantiated via Tang. */ @Inject - private AllocatedEvaluatorBridgeFactory(final AvroConfigurationSerializer serializer) { - this.serializer = serializer; + private AllocatedEvaluatorBridgeFactory() { } - /** * Instantiates a new AllocatedEvaluatorBridge. * @param allocatedEvaluator the AllocatedEvaluator object. @@ -55,18 +46,6 @@ public final class AllocatedEvaluatorBridgeFactory { */ public AllocatedEvaluatorBridge getAllocatedEvaluatorBridge(final AllocatedEvaluator allocatedEvaluator, final String serverInfo) { - return new AllocatedEvaluatorBridge(allocatedEvaluator, getClrClassHierarchy(), serverInfo, serializer); - } - - /** - * Returns the clr ClassHierarchy. Loads it if needed. - * - * @return the clr ClassHierarchy. - */ - private synchronized ClassHierarchy getClrClassHierarchy() { - if (null == this.clrClassHierarchy) { - this.clrClassHierarchy = Utilities.loadClassHierarchy(NativeInterop.CLASS_HIERARCHY_FILENAME); - } - return this.clrClassHierarchy; + return new AllocatedEvaluatorBridge(allocatedEvaluator, serverInfo); } -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/d23f2659/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/driver/evaluator/AllocatedEvaluatorImpl.java ---------------------------------------------------------------------- diff --git a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/driver/evaluator/AllocatedEvaluatorImpl.java b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/driver/evaluator/AllocatedEvaluatorImpl.java index 27ad046..25c097b 100644 --- a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/driver/evaluator/AllocatedEvaluatorImpl.java +++ b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/driver/evaluator/AllocatedEvaluatorImpl.java @@ -61,6 +61,7 @@ public final class AllocatedEvaluatorImpl implements AllocatedEvaluator { * The set of files to be places on the Evaluator. */ private final Collection<File> files = new HashSet<>(); + /** * The set of libraries. */ @@ -96,14 +97,21 @@ public final class AllocatedEvaluatorImpl implements AllocatedEvaluator { .set(ContextConfiguration.IDENTIFIER, "RootContext_" + this.getId()) .build(); this.submitContextAndTask(contextConfiguration, taskConfiguration); - } + /** + * Submit Task with configuration strings. + * This method should be called from bridge and the configuration strings are + * serialized at .Net side. + * @param taskConfiguration + */ public void submitTask(final String taskConfiguration) { final Configuration contextConfiguration = ContextConfiguration.CONF .set(ContextConfiguration.IDENTIFIER, "RootContext_" + this.getId()) .build(); - this.submitContextAndTask(contextConfiguration, taskConfiguration); + final String contextConfigurationString = this.configurationSerializer.toString(contextConfiguration); + this.launchWithConfigurationString( + contextConfigurationString, Optional.<String>empty(), Optional.of(taskConfiguration)); } @Override @@ -111,16 +119,37 @@ public final class AllocatedEvaluatorImpl implements AllocatedEvaluator { return this.evaluatorManager.getEvaluatorDescriptor(); } - @Override public void submitContext(final Configuration contextConfiguration) { - launchWithTaskString(contextConfiguration, Optional.<Configuration>empty(), Optional.<String>empty()); + launch(contextConfiguration, Optional.<Configuration>empty(), Optional.<Configuration>empty()); + } + + /** + * Submit Context with configuration strings. + * This method should be called from bridge and the configuration strings are + * serialized at .Net side. + * @param contextConfiguration + */ + public void submitContext(final String contextConfiguration) { + launchWithConfigurationString(contextConfiguration, Optional.<String>empty(), Optional.<String>empty()); } @Override public void submitContextAndService(final Configuration contextConfiguration, final Configuration serviceConfiguration) { - launchWithTaskString(contextConfiguration, Optional.of(serviceConfiguration), Optional.<String>empty()); + launch(contextConfiguration, Optional.of(serviceConfiguration), Optional.<Configuration>empty()); + } + + /** + * Submit Context and Service with configuration strings. + * This method should be called from bridge and the configuration strings are + * serialized at .Net side. + * @param contextConfiguration + * @param serviceConfiguration + */ + public void submitContextAndService(final String contextConfiguration, + final String serviceConfiguration) { + launchWithConfigurationString(contextConfiguration, Optional.of(serviceConfiguration), Optional.<String>empty()); } @Override @@ -129,12 +158,18 @@ public final class AllocatedEvaluatorImpl implements AllocatedEvaluator { launch(contextConfiguration, Optional.<Configuration>empty(), Optional.of(taskConfiguration)); } - public void submitContextAndTask(final Configuration contextConfiguration, + /** + * Submit Context and Task with configuration strings. + * This method should be called from bridge and the configuration strings are + * serialized at .Net side. + * @param contextConfiguration + * @param taskConfiguration + */ + public void submitContextAndTask(final String contextConfiguration, final String taskConfiguration) { - launchWithTaskString(contextConfiguration, Optional.<Configuration>empty(), Optional.of(taskConfiguration)); + this.launchWithConfigurationString(contextConfiguration, Optional.<String>empty(), Optional.of(taskConfiguration)); } - @Override public void submitContextAndServiceAndTask(final Configuration contextConfiguration, final Configuration serviceConfiguration, @@ -142,10 +177,19 @@ public final class AllocatedEvaluatorImpl implements AllocatedEvaluator { launch(contextConfiguration, Optional.of(serviceConfiguration), Optional.of(taskConfiguration)); } - public void submitContextAndServiceAndTask(final Configuration contextConfiguration, - final Configuration serviceConfiguration, + /** + * Submit Context and Service with configuration strings. + * This method should be called from bridge and the configuration strings are + * serialized at .Net side + * @param contextConfiguration + * @param serviceConfiguration + * @param taskConfiguration + */ + public void submitContextAndServiceAndTask(final String contextConfiguration, + final String serviceConfiguration, final String taskConfiguration) { - launchWithTaskString(contextConfiguration, Optional.of(serviceConfiguration), Optional.of(taskConfiguration)); + launchWithConfigurationString( + contextConfiguration, Optional.of(serviceConfiguration), Optional.of(taskConfiguration)); } @Override @@ -166,13 +210,25 @@ public final class AllocatedEvaluatorImpl implements AllocatedEvaluator { private void launch(final Configuration contextConfiguration, final Optional<Configuration> serviceConfiguration, final Optional<Configuration> taskConfiguration) { - launchWithTaskString(contextConfiguration, serviceConfiguration, - Optional.of(this.configurationSerializer.toString(taskConfiguration.get()))); + try (final LoggingScope lb = loggingScopeFactory.evaluatorLaunch(this.getId())) { + final Configuration evaluatorConfiguration = + makeEvaluatorConfiguration(contextConfiguration, serviceConfiguration, taskConfiguration); + + resourceBuildAndLaunch(evaluatorConfiguration); + } } - private void launchWithTaskString(final Configuration contextConfiguration, - final Optional<Configuration> serviceConfiguration, - final Optional<String> taskConfiguration) { + /** + * Submit Context, Service and Task with configuration strings. + * This method should be called from bridge and the configuration strings are + * serialized at .Net side + * @param contextConfiguration + * @param serviceConfiguration + * @param taskConfiguration + */ + private void launchWithConfigurationString(final String contextConfiguration, + final Optional<String> serviceConfiguration, + final Optional<String> taskConfiguration) { try (final LoggingScope lb = loggingScopeFactory.evaluatorLaunch(this.getId())) { final Configuration evaluatorConfiguration = makeEvaluatorConfiguration(contextConfiguration, serviceConfiguration, taskConfiguration); @@ -194,11 +250,47 @@ public final class AllocatedEvaluatorImpl implements AllocatedEvaluator { this.evaluatorManager.onResourceLaunch(rbuilder.build()); } + /** + * Make configuration for evaluator. + * @param contextConfiguration + * @param serviceConfiguration + * @param taskConfiguration + * @return Configuration + */ private Configuration makeEvaluatorConfiguration(final Configuration contextConfiguration, final Optional<Configuration> serviceConfiguration, - final Optional<String> taskConfiguration) { + final Optional<Configuration> taskConfiguration) { final String contextConfigurationString = this.configurationSerializer.toString(contextConfiguration); + + final Optional<String> taskConfigurationString; + if (taskConfiguration.isPresent()) { + taskConfigurationString = Optional.of(this.configurationSerializer.toString(taskConfiguration.get())); + } else { + taskConfigurationString = Optional.<String>empty(); + } + + final Optional<Configuration> mergedServiceConfiguration = makeRootServiceConfiguration(serviceConfiguration); + if (mergedServiceConfiguration.isPresent()) { + final String serviceConfigurationString = this.configurationSerializer.toString(mergedServiceConfiguration.get()); + return makeEvaluatorConfiguration( + contextConfigurationString, Optional.of(serviceConfigurationString), taskConfigurationString); + } else { + return makeEvaluatorConfiguration(contextConfigurationString, Optional.<String>empty(), taskConfigurationString); + } + } + + /** + * Make configuration for Evaluator. + * @param contextConfiguration + * @param serviceConfiguration + * @param taskConfiguration + * @return Configuration + */ + private Configuration makeEvaluatorConfiguration(final String contextConfiguration, + final Optional<String> serviceConfiguration, + final Optional<String> taskConfiguration) { + final ConfigurationModule evaluatorConfigModule; if (this.evaluatorManager.getEvaluatorDescriptor().getProcess() instanceof CLRProcess) { evaluatorConfigModule = EvaluatorConfiguration.CONFCLR; @@ -209,21 +301,18 @@ public final class AllocatedEvaluatorImpl implements AllocatedEvaluator { .set(EvaluatorConfiguration.APPLICATION_IDENTIFIER, this.jobIdentifier) .set(EvaluatorConfiguration.DRIVER_REMOTE_IDENTIFIER, this.remoteID) .set(EvaluatorConfiguration.EVALUATOR_IDENTIFIER, this.getId()) - .set(EvaluatorConfiguration.ROOT_CONTEXT_CONFIGURATION, contextConfigurationString); + .set(EvaluatorConfiguration.ROOT_CONTEXT_CONFIGURATION, contextConfiguration); // Add the (optional) service configuration - final Optional<Configuration> mergedServiceConfiguration = makeRootServiceConfiguration(serviceConfiguration); - if (mergedServiceConfiguration.isPresent()) { - final String serviceConfigurationString = this.configurationSerializer.toString(mergedServiceConfiguration.get()); + if (serviceConfiguration.isPresent()) { evaluatorConfigurationModule = evaluatorConfigurationModule - .set(EvaluatorConfiguration.ROOT_SERVICE_CONFIGURATION, serviceConfigurationString); + .set(EvaluatorConfiguration.ROOT_SERVICE_CONFIGURATION, serviceConfiguration.get()); } // Add the (optional) task configuration if (taskConfiguration.isPresent()) { - final String taskConfigurationString = taskConfiguration.get(); evaluatorConfigurationModule = evaluatorConfigurationModule - .set(EvaluatorConfiguration.TASK_CONFIGURATION, taskConfigurationString); + .set(EvaluatorConfiguration.TASK_CONFIGURATION, taskConfiguration.get()); } // Create the evaluator configuration.
