You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@reef.apache.org by we...@apache.org on 2015/07/21 00:45:06 UTC

incubator-reef git commit: [REEF-269] Refactor Launcher and LaunchClass

Repository: incubator-reef
Updated Branches:
  refs/heads/master 06898622f -> 84becf50c


[REEF-269] Refactor Launcher and LaunchClass

This addressed the issue by
  * Creating a new Launcher (REEFLauncher) that runs parallel to the
    old Launcher.
  * Moving ErrorHandlerRID and LaunchID into configuration instead of
    using the command line.
JIRA:
  [REEF-269](https://issues.apache.org/jira/browse/REEF-269)

Pull Request:
  This closes #291


Project: http://git-wip-us.apache.org/repos/asf/incubator-reef/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-reef/commit/84becf50
Tree: http://git-wip-us.apache.org/repos/asf/incubator-reef/tree/84becf50
Diff: http://git-wip-us.apache.org/repos/asf/incubator-reef/diff/84becf50

Branch: refs/heads/master
Commit: 84becf50cf65a30849569111b11956dbf8bfb4fe
Parents: 0689862
Author: Andrew Chung <af...@gmail.com>
Authored: Tue Jul 7 17:24:49 2015 -0400
Committer: Markus Weimer <we...@apache.org>
Committed: Mon Jul 20 15:44:25 2015 -0700

----------------------------------------------------------------------
 .../Runtime/Evaluator/Constants.cs              |   2 +
 .../Evaluator/Utils/EvaluatorConfigurations.cs  |  11 +
 lang/cs/Org.Apache.REEF.Evaluator/Evaluator.cs  |  14 +-
 .../ClrBridgeClient.cs                          |   1 -
 .../reef/driver/evaluator/CLRProcess.java       |  12 -
 .../reef/driver/evaluator/EvaluatorProcess.java |  16 --
 .../reef/driver/evaluator/JVMProcess.java       |  12 -
 .../apache/reef/runtime/common/Launcher.java    |   7 +
 .../reef/runtime/common/REEFLauncher.java       | 249 +++++++++++++++++++
 .../evaluator/EvaluatorConfiguration.java       |   4 +
 .../common/launch/CLRLaunchCommandBuilder.java  |  15 --
 .../common/launch/JavaLaunchCommandBuilder.java |  31 +--
 .../reef/runtime/common/launch/LaunchClass.java |   2 +
 .../common/launch/LaunchCommandBuilder.java     |   4 -
 .../common/launch/ProfilingStopHandler.java     |   4 +-
 .../runtime/common/launch/REEFErrorHandler.java |   2 +-
 .../client/HDInsightDriverConfiguration.java    |  11 +
 .../client/HDInsightJobSubmissionHandler.java   |   3 +-
 .../client/PreparedDriverFolderLauncher.java    |   2 -
 .../local/driver/LocalDriverConfiguration.java  |   4 +
 .../runtime/local/driver/ResourceManager.java   |   2 -
 .../mesos/client/MesosJobSubmissionHandler.java |   2 -
 .../mesos/driver/MesosDriverConfiguration.java  |   4 +
 .../driver/MesosResourceLaunchHandler.java      |   2 -
 .../yarn/client/YarnSubmissionHelper.java       |   2 -
 .../yarn/driver/YARNResourceLaunchHandler.java  |   2 -
 .../yarn/driver/YarnDriverConfiguration.java    |   4 +
 27 files changed, 312 insertions(+), 112 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/cs/Org.Apache.REEF.Common/Runtime/Evaluator/Constants.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Common/Runtime/Evaluator/Constants.cs b/lang/cs/Org.Apache.REEF.Common/Runtime/Evaluator/Constants.cs
index 4683f7f..1583367 100644
--- a/lang/cs/Org.Apache.REEF.Common/Runtime/Evaluator/Constants.cs
+++ b/lang/cs/Org.Apache.REEF.Common/Runtime/Evaluator/Constants.cs
@@ -33,6 +33,8 @@ namespace Org.Apache.REEF.Common.Runtime.Evaluator
 
         public const string ApplicationIdentifier = "ApplicationIdentifier";
 
+        public const string ErrorHandlerRID = "ErrorHandlerRID";
+
         public const int DefaultEvaluatorHeartbeatPeriodInMs = 4000;
 
         public const int DefaultEvaluatorHeartbeatMaxRetry = 3;

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/cs/Org.Apache.REEF.Common/Runtime/Evaluator/Utils/EvaluatorConfigurations.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Common/Runtime/Evaluator/Utils/EvaluatorConfigurations.cs b/lang/cs/Org.Apache.REEF.Common/Runtime/Evaluator/Utils/EvaluatorConfigurations.cs
index d75d681..a54a508 100644
--- a/lang/cs/Org.Apache.REEF.Common/Runtime/Evaluator/Utils/EvaluatorConfigurations.cs
+++ b/lang/cs/Org.Apache.REEF.Common/Runtime/Evaluator/Utils/EvaluatorConfigurations.cs
@@ -48,6 +48,8 @@ namespace Org.Apache.REEF.Common.Runtime.Evaluator.Utils
 
         private string _rootServiceConfiguration;
 
+        private string _errorHandlerRid;
+
         public EvaluatorConfigurations(string configFile)
         {
             using (LOGGER.LogFunction("EvaluatorConfigurations::EvaluatorConfigurations"))
@@ -108,6 +110,15 @@ namespace Org.Apache.REEF.Common.Runtime.Evaluator.Utils
             }
         }
 
+        public string ErrorHandlerRID
+        {
+            get
+            {
+                _errorHandlerRid = _errorHandlerRid ?? GetSettingValue(Constants.ErrorHandlerRID);
+                return _errorHandlerRid;
+            }
+        }
+
         public string RootContextConfigurationString
         {
             get

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/cs/Org.Apache.REEF.Evaluator/Evaluator.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Evaluator/Evaluator.cs b/lang/cs/Org.Apache.REEF.Evaluator/Evaluator.cs
index f97438d..c114e7e 100644
--- a/lang/cs/Org.Apache.REEF.Evaluator/Evaluator.cs
+++ b/lang/cs/Org.Apache.REEF.Evaluator/Evaluator.cs
@@ -87,24 +87,22 @@ namespace Org.Apache.REEF.Evaluator
                     // Fetch some settings from the ConfigurationManager
                     SetHeartbeatPeriod();
                     SetHeartbeatMaxRetry();
-                    
-                    
+
                     // Parse the command line
-                    if (args.Count() < 2)
+                    // The error handler RID should now be written in the configuration file instead
+                    if (args.Count() != 1)
                     {
-                        var e = new InvalidOperationException("must supply at least the rId and evaluator config file");
+                        var e = new InvalidOperationException("must supply only the evaluator config file!");
                         Utilities.Diagnostics.Exceptions.Throw(e, _logger);
                     }
 
-                    // remote driver Id
-                    string rId = args[0];
-
                     // evaluator configuraiton file
-                    string evaluatorConfigurationPath = args[1];
+                    string evaluatorConfigurationPath = args[0];
 
                     // Parse the evaluator configuration.
                     _evaluatorConfig = new EvaluatorConfigurations(evaluatorConfigurationPath);
 
+                    string rId = _evaluatorConfig.ErrorHandlerRID;
                     ContextConfiguration rootContextConfiguration = _evaluatorConfig.RootContextConfiguration;
                     Optional<TaskConfiguration> rootTaskConfig = _evaluatorConfig.TaskConfiguration;
                     Optional<ServiceConfiguration> rootServiceConfig = _evaluatorConfig.RootServiceConfiguration;

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/cs/Org.Apache.REEF.Examples.HelloCLRBridge/ClrBridgeClient.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Examples.HelloCLRBridge/ClrBridgeClient.cs b/lang/cs/Org.Apache.REEF.Examples.HelloCLRBridge/ClrBridgeClient.cs
index a3aa925..d05503d 100644
--- a/lang/cs/Org.Apache.REEF.Examples.HelloCLRBridge/ClrBridgeClient.cs
+++ b/lang/cs/Org.Apache.REEF.Examples.HelloCLRBridge/ClrBridgeClient.cs
@@ -87,7 +87,6 @@ namespace Org.Apache.REEF.Examples.HelloCLRBridge
         }
 
         /// <summary>
-        /// </summary>
         /// <param name="runOnYarn"></param>
         /// <param name="runtimeFolder"></param>
         /// <returns></returns>

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-common/src/main/java/org/apache/reef/driver/evaluator/CLRProcess.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-common/src/main/java/org/apache/reef/driver/evaluator/CLRProcess.java b/lang/java/reef-common/src/main/java/org/apache/reef/driver/evaluator/CLRProcess.java
index a9d818c..92704fa 100644
--- a/lang/java/reef-common/src/main/java/org/apache/reef/driver/evaluator/CLRProcess.java
+++ b/lang/java/reef-common/src/main/java/org/apache/reef/driver/evaluator/CLRProcess.java
@@ -46,18 +46,6 @@ public final class CLRProcess implements EvaluatorProcess {
   }
 
   @Override
-  public EvaluatorProcess setErrorHandlerRID(final String errorHandlerRID) {
-    commandBuilder.setErrorHandlerRID(errorHandlerRID);
-    return this;
-  }
-
-  @Override
-  public EvaluatorProcess setLaunchID(final String launchID) {
-    commandBuilder.setLaunchID(launchID);
-    return this;
-  }
-
-  @Override
   public EvaluatorProcess setMemory(final int megaBytes) {
     commandBuilder.setMemory(megaBytes);
     return this;

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-common/src/main/java/org/apache/reef/driver/evaluator/EvaluatorProcess.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-common/src/main/java/org/apache/reef/driver/evaluator/EvaluatorProcess.java b/lang/java/reef-common/src/main/java/org/apache/reef/driver/evaluator/EvaluatorProcess.java
index 2caeb2e..ff4b5b1 100644
--- a/lang/java/reef-common/src/main/java/org/apache/reef/driver/evaluator/EvaluatorProcess.java
+++ b/lang/java/reef-common/src/main/java/org/apache/reef/driver/evaluator/EvaluatorProcess.java
@@ -35,22 +35,6 @@ public interface EvaluatorProcess {
   EvaluatorType getType();
 
   /**
-   * Set the error handler remote identifier.
-   *
-   * @param errorHandlerRID
-   * @return this
-   */
-  EvaluatorProcess setErrorHandlerRID(final String errorHandlerRID);
-
-  /**
-   * Set the launch identifier.
-   *
-   * @param launchID
-   * @return this
-   */
-  EvaluatorProcess setLaunchID(final String launchID);
-
-  /**
    * Set memory size of process in megabytes.
    *
    * @param megaBytes

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-common/src/main/java/org/apache/reef/driver/evaluator/JVMProcess.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-common/src/main/java/org/apache/reef/driver/evaluator/JVMProcess.java b/lang/java/reef-common/src/main/java/org/apache/reef/driver/evaluator/JVMProcess.java
index c50e777..8ed2a14 100644
--- a/lang/java/reef-common/src/main/java/org/apache/reef/driver/evaluator/JVMProcess.java
+++ b/lang/java/reef-common/src/main/java/org/apache/reef/driver/evaluator/JVMProcess.java
@@ -55,18 +55,6 @@ public final class JVMProcess implements EvaluatorProcess {
   }
 
   @Override
-  public EvaluatorProcess setErrorHandlerRID(final String errorHandlerRID) {
-    commandBuilder.setErrorHandlerRID(errorHandlerRID);
-    return this;
-  }
-
-  @Override
-  public EvaluatorProcess setLaunchID(final String launchID) {
-    commandBuilder.setLaunchID(launchID);
-    return this;
-  }
-
-  @Override
   public EvaluatorProcess setMemory(final int megaBytes) {
     commandBuilder.setMemory(megaBytes);
     return this;

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/Launcher.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/Launcher.java b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/Launcher.java
index ba1c29e..16477fb 100644
--- a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/Launcher.java
+++ b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/Launcher.java
@@ -43,7 +43,10 @@ import java.util.logging.Logger;
 
 /**
  * The main entrance point into any REEF process. It is mostly instantiating LaunchClass and calling .run() on it.
+ * @deprecated in 0.12.0. Please use REEFLauncher, which reads ErrorHandlerRID and LaunchID from the \
+ *             configuration file rather than from the command line arguments.
  */
+@Deprecated
 public final class Launcher {
 
   private static final Logger LOG = Logger.getLogger(Launcher.class.getName());
@@ -95,6 +98,10 @@ public final class Launcher {
    * @throws Exception
    */
   public static void main(final String[] args) {
+    LOG.log(Level.WARNING, "Launcher is deprecated in REEF 0.12.0. Please use REEFLauncher, " +
+            "which reads ErrorHandlerRID and LaunchID from the " +
+            "configuration file rather than from the command line arguments");
+
     LOG.log(Level.FINE, "Launcher started with user name [{0}]", System.getProperty("user.name"));
 
     LOG.log(Level.FINE, "Launcher started. Assertions are {0} in this process.",

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/REEFLauncher.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/REEFLauncher.java b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/REEFLauncher.java
new file mode 100644
index 0000000..d818513
--- /dev/null
+++ b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/REEFLauncher.java
@@ -0,0 +1,249 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.reef.runtime.common;
+
+import org.apache.reef.runtime.common.evaluator.PIDStoreStartHandler;
+import org.apache.reef.runtime.common.launch.ProfilingStopHandler;
+import org.apache.reef.runtime.common.launch.REEFErrorHandler;
+import org.apache.reef.runtime.common.launch.REEFMessageCodec;
+import org.apache.reef.runtime.common.launch.parameters.ClockConfigurationPath;
+import org.apache.reef.tang.*;
+import org.apache.reef.tang.annotations.Name;
+import org.apache.reef.tang.annotations.NamedParameter;
+import org.apache.reef.tang.annotations.Parameter;
+import org.apache.reef.tang.exceptions.BindException;
+import org.apache.reef.tang.exceptions.InjectionException;
+import org.apache.reef.tang.formats.ConfigurationSerializer;
+import org.apache.reef.util.EnvironmentUtils;
+import org.apache.reef.util.REEFVersion;
+import org.apache.reef.util.ThreadLogger;
+import org.apache.reef.util.logging.LoggingSetup;
+import org.apache.reef.wake.profiler.WakeProfiler;
+import org.apache.reef.wake.remote.RemoteConfiguration;
+import org.apache.reef.wake.time.Clock;
+
+import javax.inject.Inject;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * The main entrance point into any REEF process. It is mostly reading from the command line to instantiate
+ * the runtime clock and calling .run() on it.
+ */
+public final class REEFLauncher {
+
+  @NamedParameter(doc = "If true, profiling will be enabled", short_name = "profiling", default_value = "false")
+  public static final class ProfilingEnabled implements Name<Boolean> {
+  }
+
+  private static final Logger LOG = Logger.getLogger(REEFLauncher.class.getName());
+
+  private static final Configuration LAUNCHER_STATIC_CONFIG = Tang.Factory.getTang().newConfigurationBuilder()
+          .bindSetEntry(Clock.StartHandler.class, PIDStoreStartHandler.class)
+          .bindNamedParameter(RemoteConfiguration.ErrorHandler.class, REEFErrorHandler.class)
+          .bindNamedParameter(RemoteConfiguration.ManagerName.class, "REEF_LAUNCHER")
+          .bindNamedParameter(RemoteConfiguration.MessageCodec.class, REEFMessageCodec.class)
+          .build();
+
+  static {
+    LoggingSetup.setupCommonsLogging();
+  }
+
+  private final String configurationPath;
+  private final boolean isProfilingEnabled;
+  private final ConfigurationSerializer configurationSerializer;
+  private final REEFVersion reefVersion;
+  private final Configuration clockConfig;
+
+  @Inject
+  private REEFLauncher(@Parameter(ClockConfigurationPath.class) final String configurationPath,
+               @Parameter(ProfilingEnabled.class) final boolean enableProfiling,
+               final ConfigurationSerializer configurationSerializer,
+               final REEFVersion reefVersion) {
+    this.configurationPath = configurationPath;
+    this.configurationSerializer = configurationSerializer;
+    this.isProfilingEnabled = enableProfiling;
+    this.reefVersion = reefVersion;
+    this.clockConfig = Configurations.merge(
+            readConfigurationFromDisk(this.configurationPath, this.configurationSerializer),
+            LAUNCHER_STATIC_CONFIG);
+  }
+
+  private static REEFLauncher getREEFLauncher(final String clockConfigPath) {
+    final Injector injector;
+    try {
+      Configuration clockArgConfig = Tang.Factory.getTang().newConfigurationBuilder()
+              .bindNamedParameter(ClockConfigurationPath.class, clockConfigPath).build();
+      injector = Tang.Factory.getTang().newInjector(clockArgConfig);
+    } catch (final BindException e) {
+      throw fatal("Error in parsing the command line", e);
+    }
+
+    try {
+      return injector.getInstance(REEFLauncher.class);
+    } catch (InjectionException e) {
+      throw fatal("Unable to run REEFLauncher.", e);
+    }
+  }
+
+  private static RuntimeException fatal(final String msg, final Throwable t) {
+    LOG.log(Level.SEVERE, msg, t);
+    return new RuntimeException(msg, t);
+  }
+
+  private static RuntimeException fatal(final REEFErrorHandler errorHandler, final String msg, final Throwable t) {
+    errorHandler.onNext(t);
+    LOG.log(Level.SEVERE, msg, t);
+    return new RuntimeException(msg, t);
+  }
+
+  private static Configuration readConfigurationFromDisk(
+          final String configPath, final ConfigurationSerializer serializer) {
+    LOG.log(Level.FINEST, "Loading configuration file: {0}", configPath);
+
+    final File evaluatorConfigFile = new File(configPath);
+
+    if (!evaluatorConfigFile.exists()) {
+      final String message = "The configuration file " + configPath +
+          "doesn't exist. This points to an issue in the job submission.";
+      throw fatal(message, new FileNotFoundException());
+    } else if (!evaluatorConfigFile.canRead()) {
+      final String message = "The configuration file " + configPath +
+          " exists, but can't be read";
+      throw fatal(message, new IOException());
+    } else {
+      try {
+        return serializer.fromFile(evaluatorConfigFile);
+      } catch (final IOException e) {
+        final String message = "Unable to parse the configuration file " + configPath;
+        throw fatal(message, e);
+      }
+    }
+  }
+
+  /**
+   * Launches a REEF client process (Driver or Evaluator).
+   *
+   * @param args
+   * @throws Exception
+   */
+  public static void main(final String[] args) {
+    LOG.log(Level.INFO, "Entering REEFLauncher.main().");
+    LOG.log(Level.FINE, "REEFLauncher started with user name [{0}]", System.getProperty("user.name"));
+
+    LOG.log(Level.FINE, "REEFLauncher started. Assertions are {0} in this process.",
+            EnvironmentUtils.areAssertionsEnabled() ? "ENABLED" : "DISABLED");
+
+    if (args.length != 1) {
+      final String message = "REEFLauncher have one and only one argument to specify the runtime clock " +
+          "configuration path";
+
+      throw fatal(message, new IllegalArgumentException(message));
+    }
+
+    final REEFLauncher launcher = getREEFLauncher(args[0]);
+    launcher.logVersion();
+
+    try (final Clock clock = launcher.getClockFromConfig()) {
+      LOG.log(Level.FINE, "Clock starting");
+      clock.run();
+      LOG.log(Level.FINE, "Clock exiting");
+    } catch (final Throwable ex) {
+      try (final REEFErrorHandler errorHandler = launcher.getErrorHandlerFromConfig()) {
+        throw fatal(errorHandler, "Unable to instantiate the clock", ex);
+      } catch (InjectionException e) {
+        throw fatal("Unable to instantiate the clock and the ErrorHandler", e);
+      }
+    }
+
+    LOG.log(Level.INFO, "Exiting REEFLauncher.main()");
+    if (LOG.isLoggable(Level.FINEST)) {
+      LOG.log(Level.FINEST, ThreadLogger.getFormattedThreadList("Threads running after REEFLauncher.close():"));
+    }
+    System.exit(0);
+    if (LOG.isLoggable(Level.FINEST)) {
+      LOG.log(Level.FINEST, ThreadLogger.getFormattedThreadList("Threads running after System.exit():"));
+    }
+  }
+
+  /**
+   * Pass values of the properties specified in the propNames array as <code>-D...</code>
+   * command line parameters. Currently used only to pass logging configuration to child JVMs processes.
+   *
+   * @param vargs     List of command line parameters to append to.
+   * @param copyNull  create an empty parameter if the property is missing in current process.
+   * @param propNames property names.
+   */
+  public static void propagateProperties(
+          final Collection<String> vargs, final boolean copyNull, final String... propNames) {
+    for (final String propName : propNames) {
+      final String propValue = System.getProperty(propName);
+      if (propValue == null || propValue.isEmpty()) {
+        if (copyNull) {
+          vargs.add("-D" + propName);
+        }
+      } else {
+        vargs.add(String.format("-D%s=%s", propName, propValue));
+      }
+    }
+  }
+
+  /**
+   * Same as above, but with copyNull == false by default.
+   */
+  public static void propagateProperties(
+          final Collection<String> vargs, final String... propNames) {
+    propagateProperties(vargs, false, propNames);
+  }
+
+  private void logVersion() {
+    this.reefVersion.logVersion();
+  }
+
+  /**
+   * A new REEFErrorHandler is instantiated instead of lazy instantiation and saving the instantiated
+   * handler as a field since the ErrorHandler is closeable.
+   * @return A new REEFErrorHandler from clock config
+   * @throws InjectionException
+   */
+  private REEFErrorHandler getErrorHandlerFromConfig() throws InjectionException {
+    return Tang.Factory.getTang().newInjector(this.clockConfig).getInstance(REEFErrorHandler.class);
+  }
+
+  /**
+   * A new Clock is instantiated instead of lazy instantiation and saving the instantiated
+   * handler as a field since the Clock is closeable.
+   * @return A new Clock from clock config
+   * @throws InjectionException
+   */
+  private Clock getClockFromConfig() throws InjectionException {
+    final Injector clockInjector = Tang.Factory.getTang().newInjector(this.clockConfig);
+    if (this.isProfilingEnabled) {
+      WakeProfiler profiler = new WakeProfiler();
+      ProfilingStopHandler.setProfiler(profiler);
+      clockInjector.bindAspect(profiler);
+    }
+
+    return clockInjector.getInstance(Clock.class);
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/evaluator/EvaluatorConfiguration.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/evaluator/EvaluatorConfiguration.java b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/evaluator/EvaluatorConfiguration.java
index 48e1f25..6e48a6a 100644
--- a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/evaluator/EvaluatorConfiguration.java
+++ b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/evaluator/EvaluatorConfiguration.java
@@ -19,6 +19,8 @@
 package org.apache.reef.runtime.common.evaluator;
 
 import org.apache.reef.runtime.common.evaluator.parameters.*;
+import org.apache.reef.runtime.common.launch.parameters.ErrorHandlerRID;
+import org.apache.reef.runtime.common.launch.parameters.LaunchID;
 import org.apache.reef.tang.ExternalConstructor;
 import org.apache.reef.tang.formats.ConfigurationModule;
 import org.apache.reef.tang.formats.ConfigurationModuleBuilder;
@@ -46,12 +48,14 @@ public final class EvaluatorConfiguration extends ConfigurationModuleBuilder {
       .bindSetEntry(Clock.RuntimeStopHandler.class, EvaluatorRuntime.RuntimeStopHandler.class)
       .bindConstructor(ExecutorService.class, ExecutorServiceConstructor.class)
       .bindNamedParameter(DriverRemoteIdentifier.class, DRIVER_REMOTE_IDENTIFIER)
+      .bindNamedParameter(ErrorHandlerRID.class, DRIVER_REMOTE_IDENTIFIER)
       .bindNamedParameter(EvaluatorIdentifier.class, EVALUATOR_IDENTIFIER)
       .bindNamedParameter(HeartbeatPeriod.class, HEARTBEAT_PERIOD)
       .bindNamedParameter(RootContextConfiguration.class, ROOT_CONTEXT_CONFIGURATION)
       .bindNamedParameter(InitialTaskConfiguration.class, TASK_CONFIGURATION)
       .bindNamedParameter(RootServiceConfiguration.class, ROOT_SERVICE_CONFIGURATION)
       .bindNamedParameter(ApplicationIdentifier.class, APPLICATION_IDENTIFIER)
+      .bindNamedParameter(LaunchID.class, APPLICATION_IDENTIFIER)
       .build();
 
   private static final class ExecutorServiceConstructor implements ExternalConstructor<ExecutorService> {

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/CLRLaunchCommandBuilder.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/CLRLaunchCommandBuilder.java b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/CLRLaunchCommandBuilder.java
index 617a43b..0b7899d 100644
--- a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/CLRLaunchCommandBuilder.java
+++ b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/CLRLaunchCommandBuilder.java
@@ -36,8 +36,6 @@ public class CLRLaunchCommandBuilder implements LaunchCommandBuilder {
 
   private String standardErrPath = null;
   private String standardOutPath = null;
-  private String errorHandlerRID = null;
-  private String launchID = null;
   private int megaBytes = 0;
   private String evaluatorConfigurationPath = null;
 
@@ -49,7 +47,6 @@ public class CLRLaunchCommandBuilder implements LaunchCommandBuilder {
       LOG.log(Level.WARNING, "file can NOT be found: {0}", f.getAbsolutePath());
     }
     result.add(f.getPath());
-    result.add(errorHandlerRID);
     result.add(evaluatorConfigurationPath);
     if ((null != this.standardOutPath) && (!standardOutPath.isEmpty())) {
       result.add(">" + this.standardOutPath);
@@ -62,18 +59,6 @@ public class CLRLaunchCommandBuilder implements LaunchCommandBuilder {
   }
 
   @Override
-  public CLRLaunchCommandBuilder setErrorHandlerRID(final String errorHandlerRID) {
-    this.errorHandlerRID = errorHandlerRID;
-    return this;
-  }
-
-  @Override
-  public CLRLaunchCommandBuilder setLaunchID(final String launchID) {
-    this.launchID = launchID;
-    return this;
-  }
-
-  @Override
   @SuppressWarnings("checkstyle:hiddenfield")
   public CLRLaunchCommandBuilder setMemory(final int megaBytes) {
     this.megaBytes = megaBytes;

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/JavaLaunchCommandBuilder.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/JavaLaunchCommandBuilder.java b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/JavaLaunchCommandBuilder.java
index fca071c..24e36a6 100644
--- a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/JavaLaunchCommandBuilder.java
+++ b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/JavaLaunchCommandBuilder.java
@@ -19,10 +19,7 @@
 package org.apache.reef.runtime.common.launch;
 
 import org.apache.commons.lang.StringUtils;
-import org.apache.reef.runtime.common.Launcher;
-import org.apache.reef.runtime.common.launch.parameters.ClockConfigurationPath;
-import org.apache.reef.runtime.common.launch.parameters.ErrorHandlerRID;
-import org.apache.reef.runtime.common.launch.parameters.LaunchID;
+import org.apache.reef.runtime.common.REEFLauncher;
 import org.apache.reef.util.EnvironmentUtils;
 
 import java.io.File;
@@ -34,8 +31,6 @@ public final class JavaLaunchCommandBuilder implements LaunchCommandBuilder {
   private static final String DEFAULT_JAVA_PATH = System.getenv("JAVA_HOME") + "/bin/" + "java";
   private String stderrPath = null;
   private String stdoutPath = null;
-  private String errorHandlerRID = null;
-  private String launchID = null;
   private int megaBytes = 0;
   private String evaluatorConfigurationPath = null;
   private String javaPath = null;
@@ -67,17 +62,11 @@ public final class JavaLaunchCommandBuilder implements LaunchCommandBuilder {
           add(classPath);
         }
 
-        Launcher.propagateProperties(this, true, "proc_reef");
-        Launcher.propagateProperties(this, false,
+        REEFLauncher.propagateProperties(this, true, "proc_reef");
+        REEFLauncher.propagateProperties(this, false,
             "java.util.logging.config.file", "java.util.logging.config.class");
 
-        add(Launcher.class.getName());
-
-        add("-" + ErrorHandlerRID.SHORT_NAME);
-        add(errorHandlerRID);
-        add("-" + LaunchID.SHORT_NAME);
-        add(launchID);
-        add("-" + ClockConfigurationPath.SHORT_NAME);
+        add(REEFLauncher.class.getName());
         add(evaluatorConfigurationPath);
 
         if (stdoutPath != null && !stdoutPath.isEmpty()) {
@@ -93,18 +82,6 @@ public final class JavaLaunchCommandBuilder implements LaunchCommandBuilder {
   }
 
   @Override
-  public JavaLaunchCommandBuilder setErrorHandlerRID(final String errorHandlerRID) {
-    this.errorHandlerRID = errorHandlerRID;
-    return this;
-  }
-
-  @Override
-  public JavaLaunchCommandBuilder setLaunchID(final String launchID) {
-    this.launchID = launchID;
-    return this;
-  }
-
-  @Override
   @SuppressWarnings("checkstyle:hiddenfield")
   public JavaLaunchCommandBuilder setMemory(final int megaBytes) {
     this.megaBytes = megaBytes;

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/LaunchClass.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/LaunchClass.java b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/LaunchClass.java
index 421b528..240a531 100644
--- a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/LaunchClass.java
+++ b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/LaunchClass.java
@@ -41,7 +41,9 @@ import java.util.logging.Logger;
 
 /**
  * This encapsulates processes started by REEF.
+ * @deprecated in 0.12.0. This class is exclusively used by the deprecated Launcher.
  */
+@Deprecated
 public final class LaunchClass implements AutoCloseable, Runnable {
 
   private static final Logger LOG = Logger.getLogger(LaunchClass.class.getName());

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/LaunchCommandBuilder.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/LaunchCommandBuilder.java b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/LaunchCommandBuilder.java
index 2cfbfe6..5726980 100644
--- a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/LaunchCommandBuilder.java
+++ b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/LaunchCommandBuilder.java
@@ -31,10 +31,6 @@ public interface LaunchCommandBuilder {
    */
   List<String> build();
 
-  LaunchCommandBuilder setErrorHandlerRID(final String errorHandlerRID);
-
-  LaunchCommandBuilder setLaunchID(final String launchID);
-
   LaunchCommandBuilder setMemory(final int megaBytes);
 
   /**

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/ProfilingStopHandler.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/ProfilingStopHandler.java b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/ProfilingStopHandler.java
index 575b0a4..025224a 100644
--- a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/ProfilingStopHandler.java
+++ b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/ProfilingStopHandler.java
@@ -33,7 +33,7 @@ import java.util.logging.Logger;
 /**
  * An EventHandler that writes out the profiler results.
  */
-final class ProfilingStopHandler implements EventHandler<StopTime> {
+public final class ProfilingStopHandler implements EventHandler<StopTime> {
   private static final Logger LOG = Logger.getLogger(ProfilingStopHandler.class.getName());
   private static WakeProfiler profiler;
   private final String launchID;
@@ -43,7 +43,7 @@ final class ProfilingStopHandler implements EventHandler<StopTime> {
     this.launchID = launchID;
   }
 
-  static void setProfiler(final WakeProfiler profiler) {
+  public static void setProfiler(final WakeProfiler profiler) {
     ProfilingStopHandler.profiler = profiler;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/REEFErrorHandler.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/REEFErrorHandler.java b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/REEFErrorHandler.java
index 6124d85..21dfff4 100644
--- a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/REEFErrorHandler.java
+++ b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/launch/REEFErrorHandler.java
@@ -36,7 +36,7 @@ import java.util.logging.Logger;
 /**
  * The error handler REEF registers with Wake.
  */
-public final class REEFErrorHandler implements EventHandler<Throwable> {
+public final class REEFErrorHandler implements EventHandler<Throwable>, AutoCloseable {
 
   private static final Logger LOG = Logger.getLogger(REEFErrorHandler.class.getName());
 

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-runtime-hdinsight/src/main/java/org/apache/reef/runtime/hdinsight/client/HDInsightDriverConfiguration.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-runtime-hdinsight/src/main/java/org/apache/reef/runtime/hdinsight/client/HDInsightDriverConfiguration.java b/lang/java/reef-runtime-hdinsight/src/main/java/org/apache/reef/runtime/hdinsight/client/HDInsightDriverConfiguration.java
index 61ad4fc..d991dce 100644
--- a/lang/java/reef-runtime-hdinsight/src/main/java/org/apache/reef/runtime/hdinsight/client/HDInsightDriverConfiguration.java
+++ b/lang/java/reef-runtime-hdinsight/src/main/java/org/apache/reef/runtime/hdinsight/client/HDInsightDriverConfiguration.java
@@ -26,10 +26,13 @@ import org.apache.reef.io.WorkingDirectoryTempFileCreator;
 import org.apache.reef.runtime.common.driver.api.ResourceLaunchHandler;
 import org.apache.reef.runtime.common.driver.api.ResourceReleaseHandler;
 import org.apache.reef.runtime.common.driver.api.ResourceRequestHandler;
+import org.apache.reef.runtime.common.driver.parameters.ClientRemoteIdentifier;
 import org.apache.reef.runtime.common.driver.parameters.EvaluatorTimeout;
 import org.apache.reef.runtime.common.driver.parameters.JobIdentifier;
 import org.apache.reef.runtime.common.files.RuntimePathProvider;
 import org.apache.reef.runtime.common.files.RuntimeClasspathProvider;
+import org.apache.reef.runtime.common.launch.parameters.ErrorHandlerRID;
+import org.apache.reef.runtime.common.launch.parameters.LaunchID;
 import org.apache.reef.runtime.common.parameters.JVMHeapSlack;
 import org.apache.reef.runtime.hdinsight.HDInsightClasspathProvider;
 import org.apache.reef.runtime.hdinsight.HDInsightJVMPathProvider;
@@ -65,6 +68,11 @@ public final class HDInsightDriverConfiguration extends ConfigurationModuleBuild
   public static final RequiredParameter<String> JOB_IDENTIFIER = new RequiredParameter<>();
 
   /**
+   * The client remote identifier.
+   */
+  public static final OptionalParameter<String> CLIENT_REMOTE_IDENTIFIER = new OptionalParameter<>();
+
+  /**
    * @see EvaluatorTimeout
    */
   public static final OptionalParameter<Long> EVALUATOR_TIMEOUT = new OptionalParameter<>();
@@ -91,6 +99,9 @@ public final class HDInsightDriverConfiguration extends ConfigurationModuleBuild
 
           // Bind the fields bound in AbstractDriverRuntimeConfiguration
       .bindNamedParameter(JobIdentifier.class, JOB_IDENTIFIER)
+      .bindNamedParameter(LaunchID.class, JOB_IDENTIFIER)
+      .bindNamedParameter(ClientRemoteIdentifier.class, CLIENT_REMOTE_IDENTIFIER)
+      .bindNamedParameter(ErrorHandlerRID.class, CLIENT_REMOTE_IDENTIFIER)
       .bindNamedParameter(EvaluatorTimeout.class, EVALUATOR_TIMEOUT)
       .bindNamedParameter(JVMHeapSlack.class, JVM_HEAP_SLACK)
       .bindImplementation(RuntimeClasspathProvider.class, HDInsightClasspathProvider.class)

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-runtime-hdinsight/src/main/java/org/apache/reef/runtime/hdinsight/client/HDInsightJobSubmissionHandler.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-runtime-hdinsight/src/main/java/org/apache/reef/runtime/hdinsight/client/HDInsightJobSubmissionHandler.java b/lang/java/reef-runtime-hdinsight/src/main/java/org/apache/reef/runtime/hdinsight/client/HDInsightJobSubmissionHandler.java
index 155a6cf..dfab9c2 100644
--- a/lang/java/reef-runtime-hdinsight/src/main/java/org/apache/reef/runtime/hdinsight/client/HDInsightJobSubmissionHandler.java
+++ b/lang/java/reef-runtime-hdinsight/src/main/java/org/apache/reef/runtime/hdinsight/client/HDInsightJobSubmissionHandler.java
@@ -149,8 +149,6 @@ public final class HDInsightJobSubmissionHandler implements JobSubmissionHandler
 
     return new JavaLaunchCommandBuilder()
         .setJavaPath("%JAVA_HOME%/bin/java")
-        .setErrorHandlerRID(jobSubmissionEvent.getRemoteId())
-        .setLaunchID(jobSubmissionEvent.getIdentifier())
         .setConfigurationFileName(this.filenames.getDriverConfigurationPath())
         .setClassPath(this.classpath.getDriverClasspath())
         .setMemory(jobSubmissionEvent.getDriverMemory().get())
@@ -166,6 +164,7 @@ public final class HDInsightJobSubmissionHandler implements JobSubmissionHandler
 
     final Configuration hdinsightDriverConfiguration = HDInsightDriverConfiguration.CONF
         .set(HDInsightDriverConfiguration.JOB_IDENTIFIER, applicationId)
+        .set(HDInsightDriverConfiguration.CLIENT_REMOTE_IDENTIFIER, jobSubmissionEvent.getRemoteId())
         .set(HDInsightDriverConfiguration.JOB_SUBMISSION_DIRECTORY, jobFolderURL)
         .set(HDInsightDriverConfiguration.JVM_HEAP_SLACK, this.jvmHeapSlack)
         .build();

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-runtime-local/src/main/java/org/apache/reef/runtime/local/client/PreparedDriverFolderLauncher.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-runtime-local/src/main/java/org/apache/reef/runtime/local/client/PreparedDriverFolderLauncher.java b/lang/java/reef-runtime-local/src/main/java/org/apache/reef/runtime/local/client/PreparedDriverFolderLauncher.java
index b208064..9cc6523 100644
--- a/lang/java/reef-runtime-local/src/main/java/org/apache/reef/runtime/local/client/PreparedDriverFolderLauncher.java
+++ b/lang/java/reef-runtime-local/src/main/java/org/apache/reef/runtime/local/client/PreparedDriverFolderLauncher.java
@@ -84,8 +84,6 @@ public class PreparedDriverFolderLauncher {
   private List<String> makeLaunchCommand(final String jobId, final String clientRemoteId) {
 
     final List<String> command = new JavaLaunchCommandBuilder()
-        .setErrorHandlerRID(clientRemoteId)
-        .setLaunchID(jobId)
         .setConfigurationFileName(this.fileNames.getDriverConfigurationPath())
         .setClassPath(this.classpath.getDriverClasspath())
         .setMemory(DRIVER_MEMORY)

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-runtime-local/src/main/java/org/apache/reef/runtime/local/driver/LocalDriverConfiguration.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-runtime-local/src/main/java/org/apache/reef/runtime/local/driver/LocalDriverConfiguration.java b/lang/java/reef-runtime-local/src/main/java/org/apache/reef/runtime/local/driver/LocalDriverConfiguration.java
index 6aac8a5..308e316 100644
--- a/lang/java/reef-runtime-local/src/main/java/org/apache/reef/runtime/local/driver/LocalDriverConfiguration.java
+++ b/lang/java/reef-runtime-local/src/main/java/org/apache/reef/runtime/local/driver/LocalDriverConfiguration.java
@@ -24,6 +24,8 @@ import org.apache.reef.runtime.common.driver.api.ResourceRequestHandler;
 import org.apache.reef.runtime.common.driver.parameters.ClientRemoteIdentifier;
 import org.apache.reef.runtime.common.driver.parameters.JobIdentifier;
 import org.apache.reef.runtime.common.files.RuntimeClasspathProvider;
+import org.apache.reef.runtime.common.launch.parameters.ErrorHandlerRID;
+import org.apache.reef.runtime.common.launch.parameters.LaunchID;
 import org.apache.reef.runtime.common.parameters.JVMHeapSlack;
 import org.apache.reef.runtime.local.LocalClasspathProvider;
 import org.apache.reef.runtime.local.client.parameters.MaxNumberOfEvaluators;
@@ -72,7 +74,9 @@ public class LocalDriverConfiguration extends ConfigurationModuleBuilder {
       .bindImplementation(ResourceRequestHandler.class, LocalResourceRequestHandler.class)
       .bindImplementation(ResourceReleaseHandler.class, LocalResourceReleaseHandler.class)
       .bindNamedParameter(ClientRemoteIdentifier.class, CLIENT_REMOTE_IDENTIFIER)
+      .bindNamedParameter(ErrorHandlerRID.class, CLIENT_REMOTE_IDENTIFIER)
       .bindNamedParameter(JobIdentifier.class, JOB_IDENTIFIER)
+      .bindNamedParameter(LaunchID.class, JOB_IDENTIFIER)
       .bindNamedParameter(MaxNumberOfEvaluators.class, MAX_NUMBER_OF_EVALUATORS)
       .bindNamedParameter(RootFolder.class, ROOT_FOLDER)
       .bindNamedParameter(JVMHeapSlack.class, JVM_HEAP_SLACK)

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-runtime-local/src/main/java/org/apache/reef/runtime/local/driver/ResourceManager.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-runtime-local/src/main/java/org/apache/reef/runtime/local/driver/ResourceManager.java b/lang/java/reef-runtime-local/src/main/java/org/apache/reef/runtime/local/driver/ResourceManager.java
index 3ef7808..5c26cb9 100644
--- a/lang/java/reef-runtime-local/src/main/java/org/apache/reef/runtime/local/driver/ResourceManager.java
+++ b/lang/java/reef-runtime-local/src/main/java/org/apache/reef/runtime/local/driver/ResourceManager.java
@@ -180,8 +180,6 @@ public final class ResourceManager {
           .getNewLoggingScope("ResourceManager.onResourceLaunchRequest:runCommand")) {
 
         final List<String> command = launchRequest.getProcess()
-            .setErrorHandlerRID(this.remoteManager.getMyIdentifier())
-            .setLaunchID(c.getNodeID())
             .setConfigurationFileName(this.fileNames.getEvaluatorConfigurationPath())
             .setMemory((int) (this.jvmHeapFactor * c.getMemory()))
             .getCommandLine();

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-runtime-mesos/src/main/java/org/apache/reef/runtime/mesos/client/MesosJobSubmissionHandler.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-runtime-mesos/src/main/java/org/apache/reef/runtime/mesos/client/MesosJobSubmissionHandler.java b/lang/java/reef-runtime-mesos/src/main/java/org/apache/reef/runtime/mesos/client/MesosJobSubmissionHandler.java
index 23cf746..15fbc06 100644
--- a/lang/java/reef-runtime-mesos/src/main/java/org/apache/reef/runtime/mesos/client/MesosJobSubmissionHandler.java
+++ b/lang/java/reef-runtime-mesos/src/main/java/org/apache/reef/runtime/mesos/client/MesosJobSubmissionHandler.java
@@ -119,8 +119,6 @@ final class MesosJobSubmissionHandler implements JobSubmissionHandler {
       this.configurationSerializer.toFile(driverConfiguration, runtimeConfigurationFile);
 
       final List<String> launchCommand = new JavaLaunchCommandBuilder()
-          .setErrorHandlerRID(jobSubmissionEvent.getRemoteId())
-          .setLaunchID(jobSubmissionEvent.getIdentifier())
           .setConfigurationFileName(this.fileNames.getDriverConfigurationPath())
           .setClassPath(this.classpath.getDriverClasspath())
           .setMemory(jobSubmissionEvent.getDriverMemory().get())

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-runtime-mesos/src/main/java/org/apache/reef/runtime/mesos/driver/MesosDriverConfiguration.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-runtime-mesos/src/main/java/org/apache/reef/runtime/mesos/driver/MesosDriverConfiguration.java b/lang/java/reef-runtime-mesos/src/main/java/org/apache/reef/runtime/mesos/driver/MesosDriverConfiguration.java
index 80236af..514fd2d 100644
--- a/lang/java/reef-runtime-mesos/src/main/java/org/apache/reef/runtime/mesos/driver/MesosDriverConfiguration.java
+++ b/lang/java/reef-runtime-mesos/src/main/java/org/apache/reef/runtime/mesos/driver/MesosDriverConfiguration.java
@@ -28,6 +28,8 @@ import org.apache.reef.runtime.common.driver.parameters.ClientRemoteIdentifier;
 import org.apache.reef.runtime.common.driver.parameters.EvaluatorTimeout;
 import org.apache.reef.runtime.common.driver.parameters.JobIdentifier;
 import org.apache.reef.runtime.common.files.RuntimeClasspathProvider;
+import org.apache.reef.runtime.common.launch.parameters.ErrorHandlerRID;
+import org.apache.reef.runtime.common.launch.parameters.LaunchID;
 import org.apache.reef.runtime.common.parameters.JVMHeapSlack;
 import org.apache.reef.runtime.mesos.MesosClasspathProvider;
 import org.apache.reef.runtime.mesos.driver.parameters.MesosMasterIp;
@@ -93,8 +95,10 @@ public final class MesosDriverConfiguration extends ConfigurationModuleBuilder {
 
           // Bind the fields bound in AbstractDriverRuntimeConfiguration
       .bindNamedParameter(JobIdentifier.class, JOB_IDENTIFIER)
+      .bindNamedParameter(LaunchID.class, JOB_IDENTIFIER)
       .bindNamedParameter(EvaluatorTimeout.class, EVALUATOR_TIMEOUT)
       .bindNamedParameter(ClientRemoteIdentifier.class, CLIENT_REMOTE_IDENTIFIER)
+      .bindNamedParameter(ErrorHandlerRID.class, CLIENT_REMOTE_IDENTIFIER)
       .bindNamedParameter(JVMHeapSlack.class, JVM_HEAP_SLACK)
       .build();
 }

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-runtime-mesos/src/main/java/org/apache/reef/runtime/mesos/driver/MesosResourceLaunchHandler.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-runtime-mesos/src/main/java/org/apache/reef/runtime/mesos/driver/MesosResourceLaunchHandler.java b/lang/java/reef-runtime-mesos/src/main/java/org/apache/reef/runtime/mesos/driver/MesosResourceLaunchHandler.java
index 9952ff2..3a13a65 100644
--- a/lang/java/reef-runtime-mesos/src/main/java/org/apache/reef/runtime/mesos/driver/MesosResourceLaunchHandler.java
+++ b/lang/java/reef-runtime-mesos/src/main/java/org/apache/reef/runtime/mesos/driver/MesosResourceLaunchHandler.java
@@ -99,8 +99,6 @@ final class MesosResourceLaunchHandler implements ResourceLaunchHandler {
 
       // TODO: Replace REEFExecutor with a simple launch command (we only need to launch REEFExecutor)
       final List<String> command = resourceLaunchEvent.getProcess()
-          .setErrorHandlerRID(this.remoteManager.getMyIdentifier())
-          .setLaunchID(resourceLaunchEvent.getIdentifier())
           .setConfigurationFileName(this.fileNames.getEvaluatorConfigurationPath())
           .setMemory((int) (this.jvmHeapFactor * this.executors.getMemory(resourceLaunchEvent.getIdentifier())))
           .getCommandLine();

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/client/YarnSubmissionHelper.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/client/YarnSubmissionHelper.java b/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/client/YarnSubmissionHelper.java
index 352cb4f..b5e932c 100644
--- a/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/client/YarnSubmissionHelper.java
+++ b/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/client/YarnSubmissionHelper.java
@@ -137,8 +137,6 @@ public final class YarnSubmissionHelper implements Closeable{
   public void submit(final String clientRemoteIdentifier) throws IOException, YarnException {
     // SET EXEC COMMAND
     final List<String> launchCommand = new JavaLaunchCommandBuilder()
-        .setErrorHandlerRID(clientRemoteIdentifier)
-        .setLaunchID(this.applicationSubmissionContext.getApplicationName())
         .setConfigurationFileName(this.fileNames.getDriverConfigurationPath())
         .setClassPath(this.classpath.getDriverClasspath())
         .setMemory(this.applicationSubmissionContext.getResource().getMemory())

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/driver/YARNResourceLaunchHandler.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/driver/YARNResourceLaunchHandler.java b/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/driver/YARNResourceLaunchHandler.java
index 48c0cec..5dd84c9 100644
--- a/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/driver/YARNResourceLaunchHandler.java
+++ b/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/driver/YARNResourceLaunchHandler.java
@@ -77,8 +77,6 @@ public final class YARNResourceLaunchHandler implements ResourceLaunchHandler {
           this.evaluatorSetupHelper.getResources(resourceLaunchEvent);
 
       final List<String> command = resourceLaunchEvent.getProcess()
-          .setErrorHandlerRID(resourceLaunchEvent.getRemoteId())
-          .setLaunchID(resourceLaunchEvent.getIdentifier())
           .setConfigurationFileName(this.filenames.getEvaluatorConfigurationPath())
           .setMemory((int) (this.jvmHeapFactor * container.getResource().getMemory()))
           .setStandardErr(ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/" +

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/84becf50/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/driver/YarnDriverConfiguration.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/driver/YarnDriverConfiguration.java b/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/driver/YarnDriverConfiguration.java
index 3e501a8..8e95c38 100644
--- a/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/driver/YarnDriverConfiguration.java
+++ b/lang/java/reef-runtime-yarn/src/main/java/org/apache/reef/runtime/yarn/driver/YarnDriverConfiguration.java
@@ -28,6 +28,8 @@ import org.apache.reef.runtime.common.driver.parameters.ClientRemoteIdentifier;
 import org.apache.reef.runtime.common.driver.parameters.EvaluatorTimeout;
 import org.apache.reef.runtime.common.driver.parameters.JobIdentifier;
 import org.apache.reef.runtime.common.files.RuntimeClasspathProvider;
+import org.apache.reef.runtime.common.launch.parameters.ErrorHandlerRID;
+import org.apache.reef.runtime.common.launch.parameters.LaunchID;
 import org.apache.reef.runtime.common.parameters.JVMHeapSlack;
 import org.apache.reef.runtime.yarn.YarnClasspathProvider;
 import org.apache.reef.runtime.yarn.driver.parameters.JobSubmissionDirectory;
@@ -89,8 +91,10 @@ public class YarnDriverConfiguration extends ConfigurationModuleBuilder {
 
           // Bind the fields bound in AbstractDriverRuntimeConfiguration
       .bindNamedParameter(JobIdentifier.class, JOB_IDENTIFIER)
+      .bindNamedParameter(LaunchID.class, JOB_IDENTIFIER)
       .bindNamedParameter(EvaluatorTimeout.class, EVALUATOR_TIMEOUT)
       .bindNamedParameter(ClientRemoteIdentifier.class, CLIENT_REMOTE_IDENTIFIER)
+      .bindNamedParameter(ErrorHandlerRID.class, CLIENT_REMOTE_IDENTIFIER)
       .bindNamedParameter(JVMHeapSlack.class, JVM_HEAP_SLACK)
       .bindImplementation(RuntimeClasspathProvider.class, YarnClasspathProvider.class)
       .build();