azkaban-developers

Update azkaban-web-server files to code standard with Save

6/6/2017 9:22:12 PM

Changes

Details

diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/AzkabanWebServer.java b/azkaban-web-server/src/main/java/azkaban/webapp/AzkabanWebServer.java
index 116cf99..c7008ca 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/AzkabanWebServer.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/AzkabanWebServer.java
@@ -16,57 +16,17 @@
 
 package azkaban.webapp;
 
-import azkaban.AzkabanCommonModule;
-import azkaban.executor.AlerterHolder;
-import com.codahale.metrics.MetricRegistry;
-
-import com.google.inject.Guice;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.lang.management.ManagementFactory;
-import java.lang.reflect.Constructor;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.nio.charset.StandardCharsets;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TimeZone;
-
-import javax.management.MBeanInfo;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
+import static azkaban.ServiceProvider.SERVICE_PROVIDER;
+import static java.util.Objects.requireNonNull;
 
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-import org.apache.log4j.jmx.HierarchyDynamicMBean;
-import org.apache.velocity.app.VelocityEngine;
-import org.apache.velocity.runtime.log.Log4JLogChute;
-import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
-import org.apache.velocity.runtime.resource.loader.JarResourceLoader;
-import org.joda.time.DateTimeZone;
-import org.mortbay.jetty.Server;
-import org.mortbay.jetty.servlet.Context;
-import org.mortbay.jetty.servlet.DefaultServlet;
-import org.mortbay.jetty.servlet.ServletHolder;
-import org.mortbay.thread.QueuedThreadPool;
-
-import azkaban.alert.Alerter;
+import azkaban.AzkabanCommonModule;
 import azkaban.Constants;
 import azkaban.database.AzkabanDatabaseSetup;
 import azkaban.executor.ExecutorManager;
-import azkaban.executor.JdbcExecutorLoader;
 import azkaban.jmx.JmxExecutorManager;
 import azkaban.jmx.JmxJettyServer;
 import azkaban.jmx.JmxTriggerManager;
+import azkaban.metrics.MetricsManager;
 import azkaban.metrics.MetricsUtility;
 import azkaban.project.ProjectManager;
 import azkaban.scheduler.ScheduleLoader;
@@ -74,8 +34,6 @@ import azkaban.scheduler.ScheduleManager;
 import azkaban.scheduler.TriggerBasedScheduleLoader;
 import azkaban.server.AzkabanServer;
 import azkaban.server.session.SessionCache;
-import azkaban.trigger.JdbcTriggerLoader;
-import azkaban.trigger.TriggerLoader;
 import azkaban.trigger.TriggerManager;
 import azkaban.trigger.TriggerManagerException;
 import azkaban.trigger.builtin.BasicTimeChecker;
@@ -87,7 +45,6 @@ import azkaban.trigger.builtin.SlaAlertAction;
 import azkaban.trigger.builtin.SlaChecker;
 import azkaban.user.UserManager;
 import azkaban.user.XmlUserManager;
-import azkaban.utils.Emailer;
 import azkaban.utils.FileIOUtils;
 import azkaban.utils.Props;
 import azkaban.utils.PropsUtils;
@@ -106,12 +63,43 @@ import azkaban.webapp.servlet.ProjectServlet;
 import azkaban.webapp.servlet.ScheduleServlet;
 import azkaban.webapp.servlet.StatsServlet;
 import azkaban.webapp.servlet.TriggerManagerServlet;
-import azkaban.metrics.MetricsManager;
-
+import com.codahale.metrics.MetricRegistry;
+import com.google.inject.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
 import com.linkedin.restli.server.RestliServlet;
-
-import static azkaban.ServiceProvider.*;
-import static java.util.Objects.*;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.lang.management.ManagementFactory;
+import java.lang.reflect.Constructor;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.charset.StandardCharsets;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TimeZone;
+import javax.management.MBeanInfo;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.apache.log4j.jmx.HierarchyDynamicMBean;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.runtime.log.Log4JLogChute;
+import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
+import org.apache.velocity.runtime.resource.loader.JarResourceLoader;
+import org.joda.time.DateTimeZone;
+import org.mortbay.jetty.Server;
+import org.mortbay.jetty.servlet.Context;
+import org.mortbay.jetty.servlet.DefaultServlet;
+import org.mortbay.jetty.servlet.ServletHolder;
+import org.mortbay.thread.QueuedThreadPool;
 
 
 /**
@@ -135,46 +123,34 @@ import static java.util.Objects.*;
  * Jetty truststore password
  */
 public class AzkabanWebServer extends AzkabanServer {
+
+  public static final String DEFAULT_CONF_PATH = "conf";
   private static final String AZKABAN_ACCESS_LOGGER_NAME =
       "azkaban.webapp.servlet.LoginAbstractAzkabanServlet";
-
   private static final Logger logger = Logger.getLogger(AzkabanWebServer.class);
-
-  public static final String DEFAULT_CONF_PATH = "conf";
   private static final int MAX_FORM_CONTENT_SIZE = 10 * 1024 * 1024;
-  private static AzkabanWebServer app;
-
   private static final String DEFAULT_TIMEZONE_ID = "default.timezone.id";
   private static final String VELOCITY_DEV_MODE_PARAM = "velocity.dev.mode";
   private static final String USER_MANAGER_CLASS_PARAM = "user.manager.class";
   private static final String DEFAULT_STATIC_DIR = "";
-
+  private static AzkabanWebServer app;
   private final VelocityEngine velocityEngine;
 
   private final Server server;
-
-  //queuedThreadPool is mainly used to monitor jetty threadpool.
-  private QueuedThreadPool queuedThreadPool;
-
   private final UserManager userManager;
   private final ProjectManager projectManager;
   private final ExecutorManager executorManager;
   private final ScheduleManager scheduleManager;
   private final TriggerManager triggerManager;
-
   private final ClassLoader baseClassLoader;
-
   private final Props props;
   private final SessionCache sessionCache;
   private final List<ObjectName> registeredMBeans = new ArrayList<>();
-
+  //queuedThreadPool is mainly used to monitor jetty threadpool.
+  private QueuedThreadPool queuedThreadPool;
   private Map<String, TriggerPlugin> triggerPlugins;
   private MBeanServer mbeanServer;
 
-  public static AzkabanWebServer getInstance() {
-    return app;
-  }
-
   /**
    * Constructor usually called by tomcat AzkabanServletContext to create the
    * initial server
@@ -184,345 +160,56 @@ public class AzkabanWebServer extends AzkabanServer {
   }
 
   @Inject
-  public AzkabanWebServer(Server server, Props props) throws Exception {
+  public AzkabanWebServer(final Server server, final Props props) throws Exception {
     this.props = requireNonNull(props);
-    this.server = server;
-
-    velocityEngine = configureVelocityEngine(props.getBoolean(VELOCITY_DEV_MODE_PARAM, false));
-    sessionCache = new SessionCache(props);
-    userManager = loadUserManager(props);
-
-    // TODO remove hack. Move injection to constructor
-    executorManager = SERVICE_PROVIDER.getInstance(ExecutorManager.class);
-    projectManager = SERVICE_PROVIDER.getInstance(ProjectManager.class);
-    triggerManager = SERVICE_PROVIDER.getInstance(TriggerManager.class);
-
-    loadBuiltinCheckersAndActions();
-
-    // load all trigger agents here
-    scheduleManager = loadScheduleManager(triggerManager);
-
-    String triggerPluginDir =
-        props.getString("trigger.plugin.dir", "plugins/triggers");
-
-    loadPluginCheckersAndActions(triggerPluginDir);
-
-    baseClassLoader = this.getClassLoader();
-
-    // Setup time zone
-    if (props.containsKey(DEFAULT_TIMEZONE_ID)) {
-      String timezone = props.getString(DEFAULT_TIMEZONE_ID);
-      System.setProperty("user.timezone", timezone);
-      TimeZone.setDefault(TimeZone.getTimeZone(timezone));
-      DateTimeZone.setDefault(DateTimeZone.forID(timezone));
-      logger.info("Setting timezone to " + timezone);
-    }
-
-    configureMBeanServer();
-  }
-
-  private void startWebMetrics() throws Exception {
-
-    MetricRegistry registry = MetricsManager.INSTANCE.getRegistry();
-
-    // The number of idle threads in Jetty thread pool
-    MetricsUtility.addGauge("JETTY-NumIdleThreads", registry, queuedThreadPool::getIdleThreads);
-
-    // The number of threads in Jetty thread pool. The formula is:
-    // threads = idleThreads + busyThreads
-    MetricsUtility.addGauge("JETTY-NumTotalThreads", registry, queuedThreadPool::getThreads);
-
-    // The number of requests queued in the Jetty thread pool.
-    MetricsUtility.addGauge("JETTY-NumQueueSize", registry, queuedThreadPool::getQueueSize);
-
-    MetricsUtility.addGauge("WEB-NumQueuedFlows", registry, executorManager::getQueuedFlowSize);
-    /**
-     * TODO: Currently {@link ExecutorManager#getRunningFlows()} includes both running and non-dispatched flows.
-     * Originally we would like to do a subtraction between getRunningFlows and {@link ExecutorManager#getQueuedFlowSize()},
-     * in order to have the correct runnable flows.
-     * However, both getRunningFlows and getQueuedFlowSize are not synchronized, such that we can not make
-     * a thread safe subtraction. We need to fix this in the future.
-     */
-    MetricsUtility.addGauge("WEB-NumRunningFlows", registry, () -> executorManager.getRunningFlows().size());
-
-    logger.info("starting reporting Web Server Metrics");
-    MetricsManager.INSTANCE.startReporting("AZ-WEB", props);
-  }
-
-  private void setTriggerPlugins(Map<String, TriggerPlugin> triggerPlugins) {
-    this.triggerPlugins = triggerPlugins;
-  }
-
-  private UserManager loadUserManager(Props props) {
-    Class<?> userManagerClass = props.getClass(USER_MANAGER_CLASS_PARAM, null);
-    UserManager manager;
-    if (userManagerClass != null && userManagerClass.getConstructors().length > 0) {
-      logger.info("Loading user manager class " + userManagerClass.getName());
-      try {
-        Constructor<?> userManagerConstructor = userManagerClass.getConstructor(Props.class);
-        manager = (UserManager) userManagerConstructor.newInstance(props);
-      } catch (Exception e) {
-        logger.error("Could not instantiate UserManager " + userManagerClass.getName());
-        throw new RuntimeException(e);
-      }
-    } else {
-      manager = new XmlUserManager(props);
-    }
-    return manager;
-  }
-
-  private ScheduleManager loadScheduleManager(TriggerManager tm)
-      throws Exception {
-    logger.info("Loading trigger based scheduler");
-    ScheduleLoader loader =
-        new TriggerBasedScheduleLoader(tm, ScheduleManager.triggerSource);
-    return new ScheduleManager(loader);
-  }
-
-  private void loadBuiltinCheckersAndActions() {
-    logger.info("Loading built-in checker and action types");
-    ExecuteFlowAction.setExecutorManager(executorManager);
-    ExecuteFlowAction.setProjectManager(projectManager);
-    ExecuteFlowAction.setTriggerManager(triggerManager);
-    KillExecutionAction.setExecutorManager(executorManager);
-    CreateTriggerAction.setTriggerManager(triggerManager);
-    ExecutionChecker.setExecutorManager(executorManager);
-
-    triggerManager.registerCheckerType(BasicTimeChecker.type, BasicTimeChecker.class);
-    triggerManager.registerCheckerType(SlaChecker.type, SlaChecker.class);
-    triggerManager.registerCheckerType(ExecutionChecker.type, ExecutionChecker.class);
-    triggerManager.registerActionType(ExecuteFlowAction.type, ExecuteFlowAction.class);
-    triggerManager.registerActionType(KillExecutionAction.type, KillExecutionAction.class);
-    triggerManager.registerActionType(SlaAlertAction.type, SlaAlertAction.class);
-    triggerManager.registerActionType(CreateTriggerAction.type, CreateTriggerAction.class);
-  }
-
-  private void loadPluginCheckersAndActions(String pluginPath) {
-    logger.info("Loading plug-in checker and action types");
-    File triggerPluginPath = new File(pluginPath);
-    if (!triggerPluginPath.exists()) {
-      logger.error("plugin path " + pluginPath + " doesn't exist!");
-      return;
-    }
-
-    ClassLoader parentLoader = this.getClassLoader();
-    File[] pluginDirs = triggerPluginPath.listFiles();
-    ArrayList<String> jarPaths = new ArrayList<String>();
-    for (File pluginDir : pluginDirs) {
-      if (!pluginDir.exists()) {
-        logger.error("Error! Trigger plugin path " + pluginDir.getPath()
-            + " doesn't exist.");
-        continue;
-      }
-
-      if (!pluginDir.isDirectory()) {
-        logger.error("The plugin path " + pluginDir + " is not a directory.");
-        continue;
-      }
-
-      // Load the conf directory
-      File propertiesDir = new File(pluginDir, "conf");
-      Props pluginProps = null;
-      if (propertiesDir.exists() && propertiesDir.isDirectory()) {
-        File propertiesFile = new File(propertiesDir, "plugin.properties");
-        File propertiesOverrideFile =
-            new File(propertiesDir, "override.properties");
-
-        if (propertiesFile.exists()) {
-          if (propertiesOverrideFile.exists()) {
-            pluginProps =
-                PropsUtils.loadProps(null, propertiesFile,
-                    propertiesOverrideFile);
-          } else {
-            pluginProps = PropsUtils.loadProps(null, propertiesFile);
-          }
-        } else {
-          logger.error("Plugin conf file " + propertiesFile + " not found.");
-          continue;
-        }
-      } else {
-        logger.error("Plugin conf path " + propertiesDir + " not found.");
-        continue;
-      }
-
-      List<String> extLibClasspath =
-          pluginProps.getStringList("trigger.external.classpaths",
-              (List<String>) null);
-
-      String pluginClass = pluginProps.getString("trigger.class");
-      if (pluginClass == null) {
-        logger.error("Trigger class is not set.");
-      } else {
-        logger.error("Plugin class " + pluginClass);
-      }
-
-      URLClassLoader urlClassLoader = null;
-      File libDir = new File(pluginDir, "lib");
-      if (libDir.exists() && libDir.isDirectory()) {
-        File[] files = libDir.listFiles();
-
-        ArrayList<URL> urls = new ArrayList<URL>();
-        for (int i = 0; i < files.length; ++i) {
-          try {
-            URL url = files[i].toURI().toURL();
-            urls.add(url);
-          } catch (MalformedURLException e) {
-            logger.error(e);
-          }
-        }
-        if (extLibClasspath != null) {
-          for (String extLib : extLibClasspath) {
-            try {
-              File file = new File(pluginDir, extLib);
-              URL url = file.toURI().toURL();
-              urls.add(url);
-            } catch (MalformedURLException e) {
-              logger.error(e);
-            }
-          }
-        }
-
-        urlClassLoader =
-            new URLClassLoader(urls.toArray(new URL[urls.size()]), parentLoader);
-      } else {
-        logger.error("Library path " + propertiesDir + " not found.");
-        continue;
-      }
-
-      Class<?> triggerClass = null;
-      try {
-        triggerClass = urlClassLoader.loadClass(pluginClass);
-      } catch (ClassNotFoundException e) {
-        logger.error("Class " + pluginClass + " not found.");
-        continue;
-      }
-
-      String source = FileIOUtils.getSourcePathFromClass(triggerClass);
-      logger.info("Source jar " + source);
-      jarPaths.add("jar:file:" + source);
-
-      try {
-        Utils.invokeStaticMethod(urlClassLoader, pluginClass,
-            "initiateCheckerTypes", pluginProps, app);
-      } catch (Exception e) {
-        logger.error("Unable to initiate checker types for " + pluginClass);
-        continue;
-      }
-
-      try {
-        Utils.invokeStaticMethod(urlClassLoader, pluginClass,
-            "initiateActionTypes", pluginProps, app);
-      } catch (Exception e) {
-        logger.error("Unable to initiate action types for " + pluginClass);
-        continue;
-      }
-
-    }
-  }
-
-  /**
-   * Returns the web session cache.
-   *
-   * @return
-   */
-  @Override
-  public SessionCache getSessionCache() {
-    return sessionCache;
-  }
-
-  /**
-   * Returns the velocity engine for pages to use.
-   *
-   * @return
-   */
-  @Override
-  public VelocityEngine getVelocityEngine() {
-    return velocityEngine;
-  }
-
-  @Override
-  public UserManager getUserManager() {
-    return userManager;
-  }
-
-  public ProjectManager getProjectManager() {
-    return projectManager;
-  }
-
-  public ExecutorManager getExecutorManager() {
-    return executorManager;
-  }
-
-  public ScheduleManager getScheduleManager() {
-    return scheduleManager;
-  }
-
-  public TriggerManager getTriggerManager() {
-    return triggerManager;
-  }
-
-  /**
-   * Creates and configures the velocity engine.
-   *
-   * @param devMode
-   * @return
-   */
-  private VelocityEngine configureVelocityEngine(final boolean devMode) {
-    VelocityEngine engine = new VelocityEngine();
-    engine.setProperty("resource.loader", "classpath, jar");
-    engine.setProperty("classpath.resource.loader.class",
-        ClasspathResourceLoader.class.getName());
-    engine.setProperty("classpath.resource.loader.cache", !devMode);
-    engine.setProperty("classpath.resource.loader.modificationCheckInterval",
-        5L);
-    engine.setProperty("jar.resource.loader.class",
-        JarResourceLoader.class.getName());
-    engine.setProperty("jar.resource.loader.cache", !devMode);
-    engine.setProperty("resource.manager.logwhenfound", false);
-    engine.setProperty("input.encoding", "UTF-8");
-    engine.setProperty("output.encoding", "UTF-8");
-    engine.setProperty("directive.set.null.allowed", true);
-    engine.setProperty("resource.manager.logwhenfound", false);
-    engine.setProperty("velocimacro.permissions.allow.inline", true);
-    engine.setProperty("velocimacro.library.autoreload", devMode);
-    engine.setProperty("velocimacro.library",
-        "/azkaban/webapp/servlet/velocity/macros.vm");
-    engine.setProperty(
-        "velocimacro.permissions.allow.inline.to.replace.global", true);
-    engine.setProperty("velocimacro.arguments.strict", true);
-    engine.setProperty("runtime.log.invalid.references", devMode);
-    engine.setProperty("runtime.log.logsystem.class", Log4JLogChute.class);
-    engine.setProperty("runtime.log.logsystem.log4j.logger",
-        Logger.getLogger("org.apache.velocity.Logger"));
-    engine.setProperty("parser.pool.size", 3);
-    return engine;
-  }
+    this.server = server;
 
-  public ClassLoader getClassLoader() {
-    return baseClassLoader;
+    this.velocityEngine = configureVelocityEngine(props.getBoolean(VELOCITY_DEV_MODE_PARAM, false));
+    this.sessionCache = new SessionCache(props);
+    this.userManager = loadUserManager(props);
+
+    // TODO remove hack. Move injection to constructor
+    this.executorManager = SERVICE_PROVIDER.getInstance(ExecutorManager.class);
+    this.projectManager = SERVICE_PROVIDER.getInstance(ProjectManager.class);
+    this.triggerManager = SERVICE_PROVIDER.getInstance(TriggerManager.class);
+
+    loadBuiltinCheckersAndActions();
+
+    // load all trigger agents here
+    this.scheduleManager = loadScheduleManager(this.triggerManager);
+
+    final String triggerPluginDir =
+        props.getString("trigger.plugin.dir", "plugins/triggers");
+
+    loadPluginCheckersAndActions(triggerPluginDir);
+
+    this.baseClassLoader = this.getClassLoader();
+
+    // Setup time zone
+    if (props.containsKey(DEFAULT_TIMEZONE_ID)) {
+      final String timezone = props.getString(DEFAULT_TIMEZONE_ID);
+      System.setProperty("user.timezone", timezone);
+      TimeZone.setDefault(TimeZone.getTimeZone(timezone));
+      DateTimeZone.setDefault(DateTimeZone.forID(timezone));
+      logger.info("Setting timezone to " + timezone);
+    }
+
+    configureMBeanServer();
   }
 
-  /**
-   * Returns the global azkaban properties
-   *
-   * @return
-   */
-  @Override
-  public Props getServerProps() {
-    return props;
+  public static AzkabanWebServer getInstance() {
+    return app;
   }
 
   /**
    * Azkaban using Jetty
-   *
-   * @param args
    */
-  public static void main(String[] args) throws Exception {
+  public static void main(final String[] args) throws Exception {
     // Redirect all std out and err messages into log4j
     StdOutErrRedirect.redirectOutAndErrToLog();
 
     logger.info("Starting Jetty Azkaban Web Server...");
-    Props props = AzkabanServer.loadProps(args);
+    final Props props = AzkabanServer.loadProps(args);
 
     if (props == null) {
       logger.error("Azkaban Properties not loaded. Exiting..");
@@ -530,13 +217,14 @@ public class AzkabanWebServer extends AzkabanServer {
     }
 
     /* Initialize Guice Injector */
-    final Injector injector = Guice.createInjector(new AzkabanCommonModule(props), new AzkabanWebServerModule());
+    final Injector injector = Guice
+        .createInjector(new AzkabanCommonModule(props), new AzkabanWebServerModule());
     SERVICE_PROVIDER.setInjector(injector);
 
     launch(injector.getInstance(AzkabanWebServer.class));
   }
 
-  public static void launch(AzkabanWebServer webServer) throws Exception {
+  public static void launch(final AzkabanWebServer webServer) throws Exception {
     /* This creates the Web Server instance */
     app = webServer;
 
@@ -549,14 +237,14 @@ public class AzkabanWebServer extends AzkabanServer {
       public void run() {
         try {
           logTopMemoryConsumers();
-        } catch (Exception e) {
+        } catch (final Exception e) {
           logger.info(("Exception when logging top memory consumers"), e);
         }
 
         logger.info("Shutting down http server...");
         try {
           app.close();
-        } catch (Exception e) {
+        } catch (final Exception e) {
           logger.error("Error while shutting down http server.", e);
         }
         logger.info("kk thx bye.");
@@ -567,14 +255,14 @@ public class AzkabanWebServer extends AzkabanServer {
             && new File("/usr/bin/head").exists()) {
           logger.info("logging top memeory consumer");
 
-          java.lang.ProcessBuilder processBuilder =
+          final java.lang.ProcessBuilder processBuilder =
               new java.lang.ProcessBuilder("/bin/bash", "-c",
                   "/bin/ps aux --sort -rss | /usr/bin/head");
-          Process p = processBuilder.start();
+          final Process p = processBuilder.start();
           p.waitFor();
 
-          InputStream is = p.getInputStream();
-          java.io.BufferedReader reader =
+          final InputStream is = p.getInputStream();
+          final java.io.BufferedReader reader =
               new java.io.BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));
           String line = null;
           while ((line = reader.readLine()) != null) {
@@ -586,7 +274,8 @@ public class AzkabanWebServer extends AzkabanServer {
     });
   }
 
-  private static void prepareAndStartServer(Props azkabanSettings, Server server) throws Exception {
+  private static void prepareAndStartServer(final Props azkabanSettings, final Server server)
+      throws Exception {
     validateDatabaseVersion(azkabanSettings);
     configureRoutes(server, azkabanSettings);
 
@@ -596,16 +285,18 @@ public class AzkabanWebServer extends AzkabanServer {
     try {
       server.start();
       logger.info("Server started");
-    } catch (Exception e) {
+    } catch (final Exception e) {
       logger.warn(e);
       Utils.croak(e.getMessage(), 1);
     }
   }
 
-  private static void validateDatabaseVersion(Props azkabanSettings) throws IOException, SQLException {
-    boolean checkDB = azkabanSettings.getBoolean(AzkabanDatabaseSetup.DATABASE_CHECK_VERSION, false);
+  private static void validateDatabaseVersion(final Props azkabanSettings)
+      throws IOException, SQLException {
+    final boolean checkDB = azkabanSettings
+        .getBoolean(AzkabanDatabaseSetup.DATABASE_CHECK_VERSION, false);
     if (checkDB) {
-      AzkabanDatabaseSetup setup = new AzkabanDatabaseSetup(azkabanSettings);
+      final AzkabanDatabaseSetup setup = new AzkabanDatabaseSetup(azkabanSettings);
       setup.loadTableInfo();
       if (setup.needsUpdating()) {
         logger.error("Database is out of date.");
@@ -617,29 +308,31 @@ public class AzkabanWebServer extends AzkabanServer {
     }
   }
 
-  private static void configureRoutes(Server server, Props azkabanSettings) throws TriggerManagerException {
-    final int maxThreads = azkabanSettings.getInt("jetty.maxThreads", Constants.DEFAULT_JETTY_MAX_THREAD_COUNT);
+  private static void configureRoutes(final Server server, final Props azkabanSettings)
+      throws TriggerManagerException {
+    final int maxThreads = azkabanSettings
+        .getInt("jetty.maxThreads", Constants.DEFAULT_JETTY_MAX_THREAD_COUNT);
 
-    QueuedThreadPool httpThreadPool = new QueuedThreadPool(maxThreads);
+    final QueuedThreadPool httpThreadPool = new QueuedThreadPool(maxThreads);
     app.setThreadPool(httpThreadPool);
     server.setThreadPool(httpThreadPool);
 
-    String staticDir =
+    final String staticDir =
         azkabanSettings.getString("web.resource.dir", DEFAULT_STATIC_DIR);
     logger.info("Setting up web resource dir " + staticDir);
-    Context root = new Context(server, "/", Context.SESSIONS);
+    final Context root = new Context(server, "/", Context.SESSIONS);
     root.setMaxFormContentSize(MAX_FORM_CONTENT_SIZE);
 
-    String defaultServletPath =
+    final String defaultServletPath =
         azkabanSettings.getString("azkaban.default.servlet.path", "/index");
     root.setResourceBase(staticDir);
-    ServletHolder indexRedirect =
+    final ServletHolder indexRedirect =
         new ServletHolder(new IndexRedirectServlet(defaultServletPath));
     root.addServlet(indexRedirect, "/");
-    ServletHolder index = new ServletHolder(new ProjectServlet());
+    final ServletHolder index = new ServletHolder(new ProjectServlet());
     root.addServlet(index, "/index");
 
-    ServletHolder staticServlet = new ServletHolder(new DefaultServlet());
+    final ServletHolder staticServlet = new ServletHolder(new DefaultServlet());
     root.addServlet(staticServlet, "/css/*");
     root.addServlet(staticServlet, "/js/*");
     root.addServlet(staticServlet, "/images/*");
@@ -654,18 +347,18 @@ public class AzkabanWebServer extends AzkabanServer {
     root.addServlet(new ServletHolder(new TriggerManagerServlet()), "/triggers");
     root.addServlet(new ServletHolder(new StatsServlet()), "/stats");
 
-    ServletHolder restliHolder = new ServletHolder(new RestliServlet());
+    final ServletHolder restliHolder = new ServletHolder(new RestliServlet());
     restliHolder.setInitParameter("resourcePackages", "azkaban.restli");
     root.addServlet(restliHolder, "/restli/*");
 
-    String viewerPluginDir =
+    final String viewerPluginDir =
         azkabanSettings.getString("viewer.plugin.dir", "plugins/viewer");
     loadViewerPlugins(root, viewerPluginDir, app.getVelocityEngine());
 
     // triggerplugin
-    String triggerPluginDir =
+    final String triggerPluginDir =
         azkabanSettings.getString("trigger.plugin.dir", "plugins/triggers");
-    Map<String, TriggerPlugin> triggerPlugins =
+    final Map<String, TriggerPlugin> triggerPlugins =
         loadTriggerPlugins(root, triggerPluginDir, app);
     app.setTriggerPlugins(triggerPlugins);
     // always have basic time trigger
@@ -675,19 +368,19 @@ public class AzkabanWebServer extends AzkabanServer {
     root.setAttribute(Constants.AZKABAN_SERVLET_CONTEXT_KEY, app);
   }
 
-  private static Map<String, TriggerPlugin> loadTriggerPlugins(Context root,
-      String pluginPath, AzkabanWebServer azkabanWebApp) {
-    File triggerPluginPath = new File(pluginPath);
+  private static Map<String, TriggerPlugin> loadTriggerPlugins(final Context root,
+      final String pluginPath, final AzkabanWebServer azkabanWebApp) {
+    final File triggerPluginPath = new File(pluginPath);
     if (!triggerPluginPath.exists()) {
-      return new HashMap<String, TriggerPlugin>();
+      return new HashMap<>();
     }
 
-    Map<String, TriggerPlugin> installedTriggerPlugins =
-        new HashMap<String, TriggerPlugin>();
-    ClassLoader parentLoader = AzkabanWebServer.class.getClassLoader();
-    File[] pluginDirs = triggerPluginPath.listFiles();
-    ArrayList<String> jarPaths = new ArrayList<String>();
-    for (File pluginDir : pluginDirs) {
+    final Map<String, TriggerPlugin> installedTriggerPlugins =
+        new HashMap<>();
+    final ClassLoader parentLoader = AzkabanWebServer.class.getClassLoader();
+    final File[] pluginDirs = triggerPluginPath.listFiles();
+    final ArrayList<String> jarPaths = new ArrayList<>();
+    for (final File pluginDir : pluginDirs) {
       if (!pluginDir.exists()) {
         logger.error("Error! Trigger plugin path " + pluginDir.getPath()
             + " doesn't exist.");
@@ -700,11 +393,11 @@ public class AzkabanWebServer extends AzkabanServer {
       }
 
       // Load the conf directory
-      File propertiesDir = new File(pluginDir, "conf");
+      final File propertiesDir = new File(pluginDir, "conf");
       Props pluginProps = null;
       if (propertiesDir.exists() && propertiesDir.isDirectory()) {
-        File propertiesFile = new File(propertiesDir, "plugin.properties");
-        File propertiesOverrideFile =
+        final File propertiesFile = new File(propertiesDir, "plugin.properties");
+        final File propertiesOverrideFile =
             new File(propertiesDir, "override.properties");
 
         if (propertiesFile.exists()) {
@@ -724,12 +417,12 @@ public class AzkabanWebServer extends AzkabanServer {
         continue;
       }
 
-      String pluginName = pluginProps.getString("trigger.name");
-      List<String> extLibClasspath =
+      final String pluginName = pluginProps.getString("trigger.name");
+      final List<String> extLibClasspath =
           pluginProps.getStringList("trigger.external.classpaths",
               (List<String>) null);
 
-      String pluginClass = pluginProps.getString("trigger.class");
+      final String pluginClass = pluginProps.getString("trigger.class");
       if (pluginClass == null) {
         logger.error("Trigger class is not set.");
       } else {
@@ -737,26 +430,26 @@ public class AzkabanWebServer extends AzkabanServer {
       }
 
       URLClassLoader urlClassLoader = null;
-      File libDir = new File(pluginDir, "lib");
+      final File libDir = new File(pluginDir, "lib");
       if (libDir.exists() && libDir.isDirectory()) {
-        File[] files = libDir.listFiles();
+        final File[] files = libDir.listFiles();
 
-        ArrayList<URL> urls = new ArrayList<URL>();
+        final ArrayList<URL> urls = new ArrayList<>();
         for (int i = 0; i < files.length; ++i) {
           try {
-            URL url = files[i].toURI().toURL();
+            final URL url = files[i].toURI().toURL();
             urls.add(url);
-          } catch (MalformedURLException e) {
+          } catch (final MalformedURLException e) {
             logger.error(e);
           }
         }
         if (extLibClasspath != null) {
-          for (String extLib : extLibClasspath) {
+          for (final String extLib : extLibClasspath) {
             try {
-              File file = new File(pluginDir, extLib);
-              URL url = file.toURI().toURL();
+              final File file = new File(pluginDir, extLib);
+              final URL url = file.toURI().toURL();
               urls.add(url);
-            } catch (MalformedURLException e) {
+            } catch (final MalformedURLException e) {
               logger.error(e);
             }
           }
@@ -772,12 +465,12 @@ public class AzkabanWebServer extends AzkabanServer {
       Class<?> triggerClass = null;
       try {
         triggerClass = urlClassLoader.loadClass(pluginClass);
-      } catch (ClassNotFoundException e) {
+      } catch (final ClassNotFoundException e) {
         logger.error("Class " + pluginClass + " not found.");
         continue;
       }
 
-      String source = FileIOUtils.getSourcePathFromClass(triggerClass);
+      final String source = FileIOUtils.getSourcePathFromClass(triggerClass);
       logger.info("Source jar " + source);
       jarPaths.add("jar:file:" + source);
 
@@ -786,7 +479,7 @@ public class AzkabanWebServer extends AzkabanServer {
         constructor =
             triggerClass.getConstructor(String.class, Props.class,
                 Context.class, AzkabanWebServer.class);
-      } catch (NoSuchMethodException e) {
+      } catch (final NoSuchMethodException e) {
         logger.error("Constructor not found in " + pluginClass);
         continue;
       }
@@ -796,7 +489,7 @@ public class AzkabanWebServer extends AzkabanServer {
         obj =
             constructor.newInstance(pluginName, pluginProps, root,
                 azkabanWebApp);
-      } catch (Exception e) {
+      } catch (final Exception e) {
         logger.error(e);
       }
 
@@ -805,34 +498,30 @@ public class AzkabanWebServer extends AzkabanServer {
         continue;
       }
 
-      TriggerPlugin plugin = (TriggerPlugin) obj;
+      final TriggerPlugin plugin = (TriggerPlugin) obj;
       installedTriggerPlugins.put(pluginName, plugin);
     }
 
     // Velocity needs the jar resource paths to be set.
-    String jarResourcePath = StringUtils.join(jarPaths, ", ");
+    final String jarResourcePath = StringUtils.join(jarPaths, ", ");
     logger.info("Setting jar resource path " + jarResourcePath);
-    VelocityEngine ve = azkabanWebApp.getVelocityEngine();
+    final VelocityEngine ve = azkabanWebApp.getVelocityEngine();
     ve.addProperty("jar.resource.loader.path", jarResourcePath);
 
     return installedTriggerPlugins;
   }
 
-  public Map<String, TriggerPlugin> getTriggerPlugins() {
-    return triggerPlugins;
-  }
-
-  private static void loadViewerPlugins(Context root, String pluginPath,
-      VelocityEngine ve) {
-    File viewerPluginPath = new File(pluginPath);
+  private static void loadViewerPlugins(final Context root, final String pluginPath,
+      final VelocityEngine ve) {
+    final File viewerPluginPath = new File(pluginPath);
     if (!viewerPluginPath.exists()) {
       return;
     }
 
-    ClassLoader parentLoader = AzkabanWebServer.class.getClassLoader();
-    File[] pluginDirs = viewerPluginPath.listFiles();
-    ArrayList<String> jarPaths = new ArrayList<String>();
-    for (File pluginDir : pluginDirs) {
+    final ClassLoader parentLoader = AzkabanWebServer.class.getClassLoader();
+    final File[] pluginDirs = viewerPluginPath.listFiles();
+    final ArrayList<String> jarPaths = new ArrayList<>();
+    for (final File pluginDir : pluginDirs) {
       if (!pluginDir.exists()) {
         logger.error("Error viewer plugin path " + pluginDir.getPath()
             + " doesn't exist.");
@@ -845,11 +534,11 @@ public class AzkabanWebServer extends AzkabanServer {
       }
 
       // Load the conf directory
-      File propertiesDir = new File(pluginDir, "conf");
+      final File propertiesDir = new File(pluginDir, "conf");
       Props pluginProps = null;
       if (propertiesDir.exists() && propertiesDir.isDirectory()) {
-        File propertiesFile = new File(propertiesDir, "plugin.properties");
-        File propertiesOverrideFile =
+        final File propertiesFile = new File(propertiesDir, "plugin.properties");
+        final File propertiesOverrideFile =
             new File(propertiesDir, "override.properties");
 
         if (propertiesFile.exists()) {
@@ -869,16 +558,16 @@ public class AzkabanWebServer extends AzkabanServer {
         continue;
       }
 
-      String pluginName = pluginProps.getString("viewer.name");
-      String pluginWebPath = pluginProps.getString("viewer.path");
-      String pluginJobTypes = pluginProps.getString("viewer.jobtypes", null);
-      int pluginOrder = pluginProps.getInt("viewer.order", 0);
-      boolean pluginHidden = pluginProps.getBoolean("viewer.hidden", false);
-      List<String> extLibClasspath =
+      final String pluginName = pluginProps.getString("viewer.name");
+      final String pluginWebPath = pluginProps.getString("viewer.path");
+      final String pluginJobTypes = pluginProps.getString("viewer.jobtypes", null);
+      final int pluginOrder = pluginProps.getInt("viewer.order", 0);
+      final boolean pluginHidden = pluginProps.getBoolean("viewer.hidden", false);
+      final List<String> extLibClasspath =
           pluginProps.getStringList("viewer.external.classpaths",
               (List<String>) null);
 
-      String pluginClass = pluginProps.getString("viewer.servlet.class");
+      final String pluginClass = pluginProps.getString("viewer.servlet.class");
       if (pluginClass == null) {
         logger.error("Viewer class is not set.");
       } else {
@@ -886,42 +575,42 @@ public class AzkabanWebServer extends AzkabanServer {
       }
 
       URLClassLoader urlClassLoader = null;
-      File libDir = new File(pluginDir, "lib");
+      final File libDir = new File(pluginDir, "lib");
       if (libDir.exists() && libDir.isDirectory()) {
-        File[] files = libDir.listFiles();
+        final File[] files = libDir.listFiles();
 
-        ArrayList<URL> urls = new ArrayList<URL>();
+        final ArrayList<URL> urls = new ArrayList<>();
         for (int i = 0; i < files.length; ++i) {
           try {
-            URL url = files[i].toURI().toURL();
+            final URL url = files[i].toURI().toURL();
             urls.add(url);
-          } catch (MalformedURLException e) {
+          } catch (final MalformedURLException e) {
             logger.error(e);
           }
         }
 
         // Load any external libraries.
         if (extLibClasspath != null) {
-          for (String extLib : extLibClasspath) {
-            File extLibFile = new File(pluginDir, extLib);
+          for (final String extLib : extLibClasspath) {
+            final File extLibFile = new File(pluginDir, extLib);
             if (extLibFile.exists()) {
               if (extLibFile.isDirectory()) {
                 // extLibFile is a directory; load all the files in the
                 // directory.
-                File[] extLibFiles = extLibFile.listFiles();
+                final File[] extLibFiles = extLibFile.listFiles();
                 for (int i = 0; i < extLibFiles.length; ++i) {
                   try {
-                    URL url = extLibFiles[i].toURI().toURL();
+                    final URL url = extLibFiles[i].toURI().toURL();
                     urls.add(url);
-                  } catch (MalformedURLException e) {
+                  } catch (final MalformedURLException e) {
                     logger.error(e);
                   }
                 }
               } else { // extLibFile is a file
                 try {
-                  URL url = extLibFile.toURI().toURL();
+                  final URL url = extLibFile.toURI().toURL();
                   urls.add(url);
-                } catch (MalformedURLException e) {
+                } catch (final MalformedURLException e) {
                   logger.error(e);
                 }
               }
@@ -944,19 +633,19 @@ public class AzkabanWebServer extends AzkabanServer {
       Class<?> viewerClass = null;
       try {
         viewerClass = urlClassLoader.loadClass(pluginClass);
-      } catch (ClassNotFoundException e) {
+      } catch (final ClassNotFoundException e) {
         logger.error("Class " + pluginClass + " not found.");
         continue;
       }
 
-      String source = FileIOUtils.getSourcePathFromClass(viewerClass);
+      final String source = FileIOUtils.getSourcePathFromClass(viewerClass);
       logger.info("Source jar " + source);
       jarPaths.add("jar:file:" + source);
 
       Constructor<?> constructor = null;
       try {
         constructor = viewerClass.getConstructor(Props.class);
-      } catch (NoSuchMethodException e) {
+      } catch (final NoSuchMethodException e) {
         logger.error("Constructor not found in " + pluginClass);
         continue;
       }
@@ -964,7 +653,7 @@ public class AzkabanWebServer extends AzkabanServer {
       Object obj = null;
       try {
         obj = constructor.newInstance(pluginProps);
-      } catch (Exception e) {
+      } catch (final Exception e) {
         logger.error(e);
         logger.error(e.getCause());
       }
@@ -974,7 +663,7 @@ public class AzkabanWebServer extends AzkabanServer {
         continue;
       }
 
-      AbstractAzkabanServlet avServlet = (AbstractAzkabanServlet) obj;
+      final AbstractAzkabanServlet avServlet = (AbstractAzkabanServlet) obj;
       root.addServlet(new ServletHolder(avServlet), "/" + pluginWebPath + "/*");
       PluginRegistry.getRegistry().register(
           new ViewerPlugin(pluginName, pluginWebPath, pluginOrder,
@@ -982,18 +671,16 @@ public class AzkabanWebServer extends AzkabanServer {
     }
 
     // Velocity needs the jar resource paths to be set.
-    String jarResourcePath = StringUtils.join(jarPaths, ", ");
+    final String jarResourcePath = StringUtils.join(jarPaths, ", ");
     logger.info("Setting jar resource path " + jarResourcePath);
     ve.addProperty("jar.resource.loader.path", jarResourcePath);
   }
 
   /**
    * Loads the Azkaban property file from the AZKABAN_HOME conf directory
-   *
-   * @return
    */
   private static Props loadConfigurationFromAzkabanHome() {
-    String azkabanHome = System.getenv("AZKABAN_HOME");
+    final String azkabanHome = System.getenv("AZKABAN_HOME");
 
     if (azkabanHome == null) {
       logger.error("AZKABAN_HOME not set. Will try default.");
@@ -1006,7 +693,7 @@ public class AzkabanWebServer extends AzkabanServer {
       return null;
     }
 
-    File confPath = new File(azkabanHome, DEFAULT_CONF_PATH);
+    final File confPath = new File(azkabanHome, DEFAULT_CONF_PATH);
     if (!confPath.exists() || !confPath.isDirectory() || !confPath.canRead()) {
       logger
           .error(azkabanHome + " does not contain a readable conf directory.");
@@ -1016,28 +703,319 @@ public class AzkabanWebServer extends AzkabanServer {
     return loadAzkabanConfigurationFromDirectory(confPath);
   }
 
+  private void startWebMetrics() throws Exception {
+
+    final MetricRegistry registry = MetricsManager.INSTANCE.getRegistry();
+
+    // The number of idle threads in Jetty thread pool
+    MetricsUtility
+        .addGauge("JETTY-NumIdleThreads", registry, this.queuedThreadPool::getIdleThreads);
+
+    // The number of threads in Jetty thread pool. The formula is:
+    // threads = idleThreads + busyThreads
+    MetricsUtility.addGauge("JETTY-NumTotalThreads", registry, this.queuedThreadPool::getThreads);
+
+    // The number of requests queued in the Jetty thread pool.
+    MetricsUtility.addGauge("JETTY-NumQueueSize", registry, this.queuedThreadPool::getQueueSize);
+
+    MetricsUtility
+        .addGauge("WEB-NumQueuedFlows", registry, this.executorManager::getQueuedFlowSize);
+    /**
+     * TODO: Currently {@link ExecutorManager#getRunningFlows()} includes both running and non-dispatched flows.
+     * Originally we would like to do a subtraction between getRunningFlows and {@link ExecutorManager#getQueuedFlowSize()},
+     * in order to have the correct runnable flows.
+     * However, both getRunningFlows and getQueuedFlowSize are not synchronized, such that we can not make
+     * a thread safe subtraction. We need to fix this in the future.
+     */
+    MetricsUtility
+        .addGauge("WEB-NumRunningFlows", registry,
+            () -> this.executorManager.getRunningFlows().size());
+
+    logger.info("starting reporting Web Server Metrics");
+    MetricsManager.INSTANCE.startReporting("AZ-WEB", this.props);
+  }
+
+  private UserManager loadUserManager(final Props props) {
+    final Class<?> userManagerClass = props.getClass(USER_MANAGER_CLASS_PARAM, null);
+    final UserManager manager;
+    if (userManagerClass != null && userManagerClass.getConstructors().length > 0) {
+      logger.info("Loading user manager class " + userManagerClass.getName());
+      try {
+        final Constructor<?> userManagerConstructor = userManagerClass.getConstructor(Props.class);
+        manager = (UserManager) userManagerConstructor.newInstance(props);
+      } catch (final Exception e) {
+        logger.error("Could not instantiate UserManager " + userManagerClass.getName());
+        throw new RuntimeException(e);
+      }
+    } else {
+      manager = new XmlUserManager(props);
+    }
+    return manager;
+  }
+
+  private ScheduleManager loadScheduleManager(final TriggerManager tm)
+      throws Exception {
+    logger.info("Loading trigger based scheduler");
+    final ScheduleLoader loader =
+        new TriggerBasedScheduleLoader(tm, ScheduleManager.triggerSource);
+    return new ScheduleManager(loader);
+  }
+
+  private void loadBuiltinCheckersAndActions() {
+    logger.info("Loading built-in checker and action types");
+    ExecuteFlowAction.setExecutorManager(this.executorManager);
+    ExecuteFlowAction.setProjectManager(this.projectManager);
+    ExecuteFlowAction.setTriggerManager(this.triggerManager);
+    KillExecutionAction.setExecutorManager(this.executorManager);
+    CreateTriggerAction.setTriggerManager(this.triggerManager);
+    ExecutionChecker.setExecutorManager(this.executorManager);
+
+    this.triggerManager.registerCheckerType(BasicTimeChecker.type, BasicTimeChecker.class);
+    this.triggerManager.registerCheckerType(SlaChecker.type, SlaChecker.class);
+    this.triggerManager.registerCheckerType(ExecutionChecker.type, ExecutionChecker.class);
+    this.triggerManager.registerActionType(ExecuteFlowAction.type, ExecuteFlowAction.class);
+    this.triggerManager.registerActionType(KillExecutionAction.type, KillExecutionAction.class);
+    this.triggerManager.registerActionType(SlaAlertAction.type, SlaAlertAction.class);
+    this.triggerManager.registerActionType(CreateTriggerAction.type, CreateTriggerAction.class);
+  }
+
+  private void loadPluginCheckersAndActions(final String pluginPath) {
+    logger.info("Loading plug-in checker and action types");
+    final File triggerPluginPath = new File(pluginPath);
+    if (!triggerPluginPath.exists()) {
+      logger.error("plugin path " + pluginPath + " doesn't exist!");
+      return;
+    }
+
+    final ClassLoader parentLoader = this.getClassLoader();
+    final File[] pluginDirs = triggerPluginPath.listFiles();
+    final ArrayList<String> jarPaths = new ArrayList<>();
+    for (final File pluginDir : pluginDirs) {
+      if (!pluginDir.exists()) {
+        logger.error("Error! Trigger plugin path " + pluginDir.getPath()
+            + " doesn't exist.");
+        continue;
+      }
+
+      if (!pluginDir.isDirectory()) {
+        logger.error("The plugin path " + pluginDir + " is not a directory.");
+        continue;
+      }
+
+      // Load the conf directory
+      final File propertiesDir = new File(pluginDir, "conf");
+      Props pluginProps = null;
+      if (propertiesDir.exists() && propertiesDir.isDirectory()) {
+        final File propertiesFile = new File(propertiesDir, "plugin.properties");
+        final File propertiesOverrideFile =
+            new File(propertiesDir, "override.properties");
+
+        if (propertiesFile.exists()) {
+          if (propertiesOverrideFile.exists()) {
+            pluginProps =
+                PropsUtils.loadProps(null, propertiesFile,
+                    propertiesOverrideFile);
+          } else {
+            pluginProps = PropsUtils.loadProps(null, propertiesFile);
+          }
+        } else {
+          logger.error("Plugin conf file " + propertiesFile + " not found.");
+          continue;
+        }
+      } else {
+        logger.error("Plugin conf path " + propertiesDir + " not found.");
+        continue;
+      }
+
+      final List<String> extLibClasspath =
+          pluginProps.getStringList("trigger.external.classpaths",
+              (List<String>) null);
+
+      final String pluginClass = pluginProps.getString("trigger.class");
+      if (pluginClass == null) {
+        logger.error("Trigger class is not set.");
+      } else {
+        logger.error("Plugin class " + pluginClass);
+      }
+
+      URLClassLoader urlClassLoader = null;
+      final File libDir = new File(pluginDir, "lib");
+      if (libDir.exists() && libDir.isDirectory()) {
+        final File[] files = libDir.listFiles();
+
+        final ArrayList<URL> urls = new ArrayList<>();
+        for (int i = 0; i < files.length; ++i) {
+          try {
+            final URL url = files[i].toURI().toURL();
+            urls.add(url);
+          } catch (final MalformedURLException e) {
+            logger.error(e);
+          }
+        }
+        if (extLibClasspath != null) {
+          for (final String extLib : extLibClasspath) {
+            try {
+              final File file = new File(pluginDir, extLib);
+              final URL url = file.toURI().toURL();
+              urls.add(url);
+            } catch (final MalformedURLException e) {
+              logger.error(e);
+            }
+          }
+        }
+
+        urlClassLoader =
+            new URLClassLoader(urls.toArray(new URL[urls.size()]), parentLoader);
+      } else {
+        logger.error("Library path " + propertiesDir + " not found.");
+        continue;
+      }
+
+      Class<?> triggerClass = null;
+      try {
+        triggerClass = urlClassLoader.loadClass(pluginClass);
+      } catch (final ClassNotFoundException e) {
+        logger.error("Class " + pluginClass + " not found.");
+        continue;
+      }
+
+      final String source = FileIOUtils.getSourcePathFromClass(triggerClass);
+      logger.info("Source jar " + source);
+      jarPaths.add("jar:file:" + source);
+
+      try {
+        Utils.invokeStaticMethod(urlClassLoader, pluginClass,
+            "initiateCheckerTypes", pluginProps, app);
+      } catch (final Exception e) {
+        logger.error("Unable to initiate checker types for " + pluginClass);
+        continue;
+      }
+
+      try {
+        Utils.invokeStaticMethod(urlClassLoader, pluginClass,
+            "initiateActionTypes", pluginProps, app);
+      } catch (final Exception e) {
+        logger.error("Unable to initiate action types for " + pluginClass);
+        continue;
+      }
+
+    }
+  }
+
+  /**
+   * Returns the web session cache.
+   */
+  @Override
+  public SessionCache getSessionCache() {
+    return this.sessionCache;
+  }
+
+  /**
+   * Returns the velocity engine for pages to use.
+   */
+  @Override
+  public VelocityEngine getVelocityEngine() {
+    return this.velocityEngine;
+  }
+
+  @Override
+  public UserManager getUserManager() {
+    return this.userManager;
+  }
+
+  public ProjectManager getProjectManager() {
+    return this.projectManager;
+  }
+
+  public ExecutorManager getExecutorManager() {
+    return this.executorManager;
+  }
+
+  public ScheduleManager getScheduleManager() {
+    return this.scheduleManager;
+  }
+
+  public TriggerManager getTriggerManager() {
+    return this.triggerManager;
+  }
+
+  /**
+   * Creates and configures the velocity engine.
+   */
+  private VelocityEngine configureVelocityEngine(final boolean devMode) {
+    final VelocityEngine engine = new VelocityEngine();
+    engine.setProperty("resource.loader", "classpath, jar");
+    engine.setProperty("classpath.resource.loader.class",
+        ClasspathResourceLoader.class.getName());
+    engine.setProperty("classpath.resource.loader.cache", !devMode);
+    engine.setProperty("classpath.resource.loader.modificationCheckInterval",
+        5L);
+    engine.setProperty("jar.resource.loader.class",
+        JarResourceLoader.class.getName());
+    engine.setProperty("jar.resource.loader.cache", !devMode);
+    engine.setProperty("resource.manager.logwhenfound", false);
+    engine.setProperty("input.encoding", "UTF-8");
+    engine.setProperty("output.encoding", "UTF-8");
+    engine.setProperty("directive.set.null.allowed", true);
+    engine.setProperty("resource.manager.logwhenfound", false);
+    engine.setProperty("velocimacro.permissions.allow.inline", true);
+    engine.setProperty("velocimacro.library.autoreload", devMode);
+    engine.setProperty("velocimacro.library",
+        "/azkaban/webapp/servlet/velocity/macros.vm");
+    engine.setProperty(
+        "velocimacro.permissions.allow.inline.to.replace.global", true);
+    engine.setProperty("velocimacro.arguments.strict", true);
+    engine.setProperty("runtime.log.invalid.references", devMode);
+    engine.setProperty("runtime.log.logsystem.class", Log4JLogChute.class);
+    engine.setProperty("runtime.log.logsystem.log4j.logger",
+        Logger.getLogger("org.apache.velocity.Logger"));
+    engine.setProperty("parser.pool.size", 3);
+    return engine;
+  }
+
+  public ClassLoader getClassLoader() {
+    return this.baseClassLoader;
+  }
+
+  /**
+   * Returns the global azkaban properties
+   */
+  @Override
+  public Props getServerProps() {
+    return this.props;
+  }
+
+  public Map<String, TriggerPlugin> getTriggerPlugins() {
+    return this.triggerPlugins;
+  }
+
+  private void setTriggerPlugins(final Map<String, TriggerPlugin> triggerPlugins) {
+    this.triggerPlugins = triggerPlugins;
+  }
+
   private void configureMBeanServer() {
     logger.info("Registering MBeans...");
-    mbeanServer = ManagementFactory.getPlatformMBeanServer();
+    this.mbeanServer = ManagementFactory.getPlatformMBeanServer();
 
-    registerMbean("jetty", new JmxJettyServer(server));
-    registerMbean("triggerManager", new JmxTriggerManager(triggerManager));
-    if (executorManager instanceof ExecutorManager) {
+    registerMbean("jetty", new JmxJettyServer(this.server));
+    registerMbean("triggerManager", new JmxTriggerManager(this.triggerManager));
+    if (this.executorManager instanceof ExecutorManager) {
       registerMbean("executorManager", new JmxExecutorManager(
-          (ExecutorManager) executorManager));
+          (ExecutorManager) this.executorManager));
     }
 
     // Register Log4J loggers as JMX beans so the log level can be
     // updated via JConsole or Java VisualVM
-    HierarchyDynamicMBean log4jMBean = new HierarchyDynamicMBean();
+    final HierarchyDynamicMBean log4jMBean = new HierarchyDynamicMBean();
     registerMbean("log4jmxbean", log4jMBean);
-    ObjectName accessLogLoggerObjName =
+    final ObjectName accessLogLoggerObjName =
         log4jMBean.addLoggerMBean(AZKABAN_ACCESS_LOGGER_NAME);
 
     if (accessLogLoggerObjName == null) {
       System.out
-          .println("************* loginLoggerObjName is null, make sure there is a logger with name "
-              + AZKABAN_ACCESS_LOGGER_NAME);
+          .println(
+              "************* loginLoggerObjName is null, make sure there is a logger with name "
+                  + AZKABAN_ACCESS_LOGGER_NAME);
     } else {
       System.out.println("******** loginLoggerObjName: "
           + accessLogLoggerObjName.getCanonicalName());
@@ -1046,61 +1024,61 @@ public class AzkabanWebServer extends AzkabanServer {
 
   public void close() {
     try {
-      for (ObjectName name : registeredMBeans) {
-        mbeanServer.unregisterMBean(name);
+      for (final ObjectName name : this.registeredMBeans) {
+        this.mbeanServer.unregisterMBean(name);
         logger.info("Jmx MBean " + name.getCanonicalName() + " unregistered.");
       }
-    } catch (Exception e) {
+    } catch (final Exception e) {
       logger.error("Failed to cleanup MBeanServer", e);
     }
-    scheduleManager.shutdown();
-    executorManager.shutdown();
+    this.scheduleManager.shutdown();
+    this.executorManager.shutdown();
     try {
-      server.stop();
-    } catch (Exception e) {
+      this.server.stop();
+    } catch (final Exception e) {
       // Catch all while closing server
       logger.error(e);
     }
-    server.destroy();
+    this.server.destroy();
   }
 
-  private void registerMbean(String name, Object mbean) {
-    Class<?> mbeanClass = mbean.getClass();
-    ObjectName mbeanName;
+  private void registerMbean(final String name, final Object mbean) {
+    final Class<?> mbeanClass = mbean.getClass();
+    final ObjectName mbeanName;
     try {
       mbeanName = new ObjectName(mbeanClass.getName() + ":name=" + name);
-      mbeanServer.registerMBean(mbean, mbeanName);
+      this.mbeanServer.registerMBean(mbean, mbeanName);
       logger.info("Bean " + mbeanClass.getCanonicalName() + " registered.");
-      registeredMBeans.add(mbeanName);
-    } catch (Exception e) {
+      this.registeredMBeans.add(mbeanName);
+    } catch (final Exception e) {
       logger.error("Error registering mbean " + mbeanClass.getCanonicalName(),
           e);
     }
   }
 
   public List<ObjectName> getMbeanNames() {
-    return registeredMBeans;
+    return this.registeredMBeans;
   }
 
-  public MBeanInfo getMBeanInfo(ObjectName name) {
+  public MBeanInfo getMBeanInfo(final ObjectName name) {
     try {
-      return mbeanServer.getMBeanInfo(name);
-    } catch (Exception e) {
+      return this.mbeanServer.getMBeanInfo(name);
+    } catch (final Exception e) {
       logger.error(e);
       return null;
     }
   }
 
-  public Object getMBeanAttribute(ObjectName name, String attribute) {
+  public Object getMBeanAttribute(final ObjectName name, final String attribute) {
     try {
-      return mbeanServer.getAttribute(name, attribute);
-    } catch (Exception e) {
+      return this.mbeanServer.getAttribute(name, attribute);
+    } catch (final Exception e) {
       logger.error(e);
       return null;
     }
   }
 
-  private void setThreadPool(QueuedThreadPool queuedThreadPool) {
+  private void setThreadPool(final QueuedThreadPool queuedThreadPool) {
     this.queuedThreadPool = queuedThreadPool;
   }
 }
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/AzkabanWebServerModule.java b/azkaban-web-server/src/main/java/azkaban/webapp/AzkabanWebServerModule.java
index 7a244a9..de4effa 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/AzkabanWebServerModule.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/AzkabanWebServerModule.java
@@ -22,11 +22,12 @@ import com.google.inject.Scopes;
 import org.mortbay.jetty.Server;
 
 /**
- * This Guice module is currently a one place container for all bindings in the current module. This is intended to
- * help during the migration process to Guice. Once this class starts growing we can move towards more modular
- * structuring of Guice components.
+ * This Guice module is currently a one place container for all bindings in the current module. This
+ * is intended to help during the migration process to Guice. Once this class starts growing we can
+ * move towards more modular structuring of Guice components.
  */
 public class AzkabanWebServerModule extends AbstractModule {
+
   @Override
   protected void configure() {
     bind(Server.class).toProvider(WebServerProvider.class);
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/plugin/PluginRegistry.java b/azkaban-web-server/src/main/java/azkaban/webapp/plugin/PluginRegistry.java
index bcb0758..b4a26d1 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/plugin/PluginRegistry.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/plugin/PluginRegistry.java
@@ -31,46 +31,46 @@ public class PluginRegistry {
   public Map<String, TreeSet<ViewerPlugin>> jobTypeViewerPlugins;
 
   private PluginRegistry() {
-    viewerPlugins = new TreeSet<ViewerPlugin>(ViewerPlugin.COMPARATOR);
-    jobTypeViewerPlugins = new HashMap<String, TreeSet<ViewerPlugin>>();
+    this.viewerPlugins = new TreeSet<>(ViewerPlugin.COMPARATOR);
+    this.jobTypeViewerPlugins = new HashMap<>();
   }
 
-  public void register(ViewerPlugin plugin) {
-    viewerPlugins.add(plugin);
-    List<String> jobTypes = plugin.getJobTypes();
+  public static PluginRegistry getRegistry() {
+    if (registry == null) {
+      registry = new PluginRegistry();
+    }
+    return registry;
+  }
+
+  public void register(final ViewerPlugin plugin) {
+    this.viewerPlugins.add(plugin);
+    final List<String> jobTypes = plugin.getJobTypes();
     if (jobTypes == null) {
       return;
     }
 
-    for (String jobType : jobTypes) {
+    for (final String jobType : jobTypes) {
       TreeSet<ViewerPlugin> plugins = null;
-      if (!jobTypeViewerPlugins.containsKey(jobType)) {
-        plugins = new TreeSet<ViewerPlugin>(ViewerPlugin.COMPARATOR);
+      if (!this.jobTypeViewerPlugins.containsKey(jobType)) {
+        plugins = new TreeSet<>(ViewerPlugin.COMPARATOR);
         plugins.add(plugin);
-        jobTypeViewerPlugins.put(jobType, plugins);
+        this.jobTypeViewerPlugins.put(jobType, plugins);
       } else {
-        plugins = jobTypeViewerPlugins.get(jobType);
+        plugins = this.jobTypeViewerPlugins.get(jobType);
         plugins.add(plugin);
       }
     }
   }
 
   public List<ViewerPlugin> getViewerPlugins() {
-    return new ArrayList<ViewerPlugin>(viewerPlugins);
+    return new ArrayList<>(this.viewerPlugins);
   }
 
-  public List<ViewerPlugin> getViewerPluginsForJobType(String jobType) {
-    TreeSet<ViewerPlugin> plugins = jobTypeViewerPlugins.get(jobType);
+  public List<ViewerPlugin> getViewerPluginsForJobType(final String jobType) {
+    final TreeSet<ViewerPlugin> plugins = this.jobTypeViewerPlugins.get(jobType);
     if (plugins == null) {
       return null;
     }
-    return new ArrayList<ViewerPlugin>(plugins);
-  }
-
-  public static PluginRegistry getRegistry() {
-    if (registry == null) {
-      registry = new PluginRegistry();
-    }
-    return registry;
+    return new ArrayList<>(plugins);
   }
 }
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/plugin/ViewerPlugin.java b/azkaban-web-server/src/main/java/azkaban/webapp/plugin/ViewerPlugin.java
index 6d84c43..66b5f3d 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/plugin/ViewerPlugin.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/plugin/ViewerPlugin.java
@@ -21,25 +21,25 @@ import java.util.Comparator;
 import java.util.List;
 
 public class ViewerPlugin {
-  private final String pluginName;
-  private final String pluginPath;
-  private final int order;
-  private boolean hidden;
-  private final List<String> jobTypes;
 
   public static final Comparator<ViewerPlugin> COMPARATOR =
       new Comparator<ViewerPlugin>() {
         @Override
-        public int compare(ViewerPlugin o1, ViewerPlugin o2) {
+        public int compare(final ViewerPlugin o1, final ViewerPlugin o2) {
           if (o1.getOrder() != o2.getOrder()) {
             return o1.getOrder() - o2.getOrder();
           }
           return o1.getPluginName().compareTo(o2.getPluginName());
         }
       };
+  private final String pluginName;
+  private final String pluginPath;
+  private final int order;
+  private final List<String> jobTypes;
+  private boolean hidden;
 
-  public ViewerPlugin(String pluginName, String pluginPath, int order,
-      boolean hidden, String jobTypes) {
+  public ViewerPlugin(final String pluginName, final String pluginPath, final int order,
+      final boolean hidden, final String jobTypes) {
     this.pluginName = pluginName;
     this.pluginPath = pluginPath;
     this.order = order;
@@ -48,31 +48,31 @@ public class ViewerPlugin {
   }
 
   public String getPluginName() {
-    return pluginName;
+    return this.pluginName;
   }
 
   public String getPluginPath() {
-    return pluginPath;
+    return this.pluginPath;
   }
 
   public int getOrder() {
-    return order;
+    return this.order;
   }
 
   public boolean isHidden() {
-    return hidden;
+    return this.hidden;
   }
 
-  public void setHidden(boolean hidden) {
+  public void setHidden(final boolean hidden) {
     this.hidden = hidden;
   }
 
-  protected List<String> parseJobTypes(String jobTypesStr) {
+  protected List<String> parseJobTypes(final String jobTypesStr) {
     if (jobTypesStr == null) {
       return null;
     }
-    String[] parts = jobTypesStr.split(",");
-    List<String> jobTypes = new ArrayList<String>();
+    final String[] parts = jobTypesStr.split(",");
+    final List<String> jobTypes = new ArrayList<>();
     for (int i = 0; i < parts.length; ++i) {
       jobTypes.add(parts[i].trim());
     }
@@ -80,6 +80,6 @@ public class ViewerPlugin {
   }
 
   public List<String> getJobTypes() {
-    return jobTypes;
+    return this.jobTypes;
   }
 }
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/SchedulerStatistics.java b/azkaban-web-server/src/main/java/azkaban/webapp/SchedulerStatistics.java
index ea4dabd..9f72ee0 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/SchedulerStatistics.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/SchedulerStatistics.java
@@ -16,23 +16,23 @@
 
 package azkaban.webapp;
 
-import java.io.File;
-import java.util.List;
-import java.util.HashMap;
-import java.util.Map;
-
 import azkaban.executor.ExecutableFlow;
 import azkaban.executor.ExecutorManagerAdapter;
 import azkaban.executor.ExecutorManagerException;
 import azkaban.executor.Status;
 import azkaban.scheduler.Schedule;
 import azkaban.scheduler.ScheduleManager;
-import azkaban.scheduler.ScheduleStatisticManager;
 import azkaban.scheduler.ScheduleManagerException;
+import azkaban.scheduler.ScheduleStatisticManager;
+import java.io.File;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 public class SchedulerStatistics {
+
   public static Map<String, Object> getStatistics(
-      int scheduleId, AzkabanWebServer server)
+      final int scheduleId, final AzkabanWebServer server)
       throws ScheduleManagerException {
     if (ScheduleStatisticManager.getCacheDirectory() == null) {
       ScheduleStatisticManager.setCacheFolder(
@@ -50,15 +50,15 @@ public class SchedulerStatistics {
   }
 
   private static Map<String, Object> calculateStats(
-      int scheduleId, AzkabanWebServer server)
+      final int scheduleId, final AzkabanWebServer server)
       throws ScheduleManagerException {
-    Map<String, Object> data = new HashMap<String, Object>();
-    ExecutorManagerAdapter executorManager = server.getExecutorManager();
-    ScheduleManager scheduleManager = server.getScheduleManager();
-    Schedule schedule = scheduleManager.getSchedule(scheduleId);
+    final Map<String, Object> data = new HashMap<>();
+    final ExecutorManagerAdapter executorManager = server.getExecutorManager();
+    final ScheduleManager scheduleManager = server.getScheduleManager();
+    final Schedule schedule = scheduleManager.getSchedule(scheduleId);
 
     try {
-      List<ExecutableFlow> executables = executorManager.getExecutableFlows(
+      final List<ExecutableFlow> executables = executorManager.getExecutableFlows(
           schedule.getProjectId(), schedule.getFlowName(), 0,
           ScheduleStatisticManager.STAT_NUMBERS, Status.SUCCEEDED);
 
@@ -70,8 +70,8 @@ public class SchedulerStatistics {
         min = 0;
         max = 0;
       } else {
-        for (ExecutableFlow flow : executables) {
-          long time = flow.getEndTime() - flow.getStartTime();
+        for (final ExecutableFlow flow : executables) {
+          final long time = flow.getEndTime() - flow.getStartTime();
           average += time;
           if (time < min) {
             min = time;
@@ -86,7 +86,7 @@ public class SchedulerStatistics {
       data.put("average", average);
       data.put("min", min);
       data.put("max", max);
-    } catch (ExecutorManagerException e) {
+    } catch (final ExecutorManagerException e) {
       e.printStackTrace();
     }
 
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
index 69f4edd..381cf77 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
@@ -16,55 +16,51 @@
 
 package azkaban.webapp.servlet;
 
+import azkaban.server.AzkabanServer;
+import azkaban.server.HttpRequestUtils;
+import azkaban.server.session.Session;
+import azkaban.utils.JSONUtils;
+import azkaban.utils.Props;
+import azkaban.utils.WebUtils;
+import azkaban.webapp.AzkabanWebServer;
+import azkaban.webapp.plugin.PluginRegistry;
+import azkaban.webapp.plugin.TriggerPlugin;
+import azkaban.webapp.plugin.ViewerPlugin;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.TimeZone;
-
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import org.joda.time.DateTime;
 
-import azkaban.server.AzkabanServer;
-import azkaban.server.HttpRequestUtils;
-import azkaban.server.session.Session;
-import azkaban.utils.Props;
-import azkaban.utils.JSONUtils;
-import azkaban.utils.WebUtils;
-import azkaban.webapp.AzkabanWebServer;
-import azkaban.webapp.plugin.PluginRegistry;
-import azkaban.webapp.plugin.ViewerPlugin;
-import azkaban.webapp.plugin.TriggerPlugin;
-
 /**
  * Base Servlet for pages
  */
 public abstract class AbstractAzkabanServlet extends HttpServlet {
-  private static final String AZKABAN_SUCCESS_MESSAGE =
-      "azkaban.success.message";
-  private static final String AZKABAN_WARN_MESSAGE =
-      "azkaban.warn.message";
-  private static final String AZKABAN_FAILURE_MESSAGE =
-      "azkaban.failure.message";
 
-  private static final long serialVersionUID = -1;
   public static final String DEFAULT_LOG_URL_PREFIX =
       "predefined_log_url_prefix";
   public static final String LOG_URL_PREFIX = "log_url_prefix";
   public static final String HTML_TYPE = "text/html";
   public static final String XML_MIME_TYPE = "application/xhtml+xml";
   public static final String JSON_MIME_TYPE = "application/json";
-
-  public static final String jarVersion = AbstractAzkabanServlet.class.getPackage().getImplementationVersion();
+  public static final String jarVersion = AbstractAzkabanServlet.class.getPackage()
+      .getImplementationVersion();
   protected static final WebUtils utils = new WebUtils();
-
+  private static final String AZKABAN_SUCCESS_MESSAGE =
+      "azkaban.success.message";
+  private static final String AZKABAN_WARN_MESSAGE =
+      "azkaban.warn.message";
+  private static final String AZKABAN_FAILURE_MESSAGE =
+      "azkaban.failure.message";
+  private static final long serialVersionUID = -1;
   private AzkabanServer application;
   private String name;
   private String label;
@@ -74,135 +70,139 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
   private List<TriggerPlugin> triggerPlugins;
 
   /**
+   * Retrieve the Azkaban application
+   */
+  public static AzkabanWebServer getApp(final ServletConfig config) {
+    final AzkabanWebServer app =
+        (AzkabanWebServer) config.getServletContext().getAttribute(
+            AzkabanServletContextListener.AZKABAN_SERVLET_CONTEXT_KEY);
+
+    if (app == null) {
+      throw new IllegalStateException(
+          "No batch application is defined in the servlet context!");
+    } else {
+      return app;
+    }
+  }
+
+  public static String createJsonResponse(final String status, final String message,
+      final String action, final Map<String, Object> params) {
+    final HashMap<String, Object> response = new HashMap<>();
+    response.put("status", status);
+    if (message != null) {
+      response.put("message", message);
+    }
+    if (action != null) {
+      response.put("action", action);
+    }
+    if (params != null) {
+      response.putAll(params);
+    }
+
+    return JSONUtils.toJSON(response);
+  }
+
+  /**
    * To retrieve the application for the servlet
-   *
-   * @return
    */
   public AzkabanServer getApplication() {
-    return application;
+    return this.application;
   }
 
   @Override
-  public void init(ServletConfig config) throws ServletException {
-    application =
+  public void init(final ServletConfig config) throws ServletException {
+    this.application =
         (AzkabanServer) config.getServletContext().getAttribute(
             AzkabanServletContextListener.AZKABAN_SERVLET_CONTEXT_KEY);
 
-    if (application == null) {
+    if (this.application == null) {
       throw new IllegalStateException(
           "No batch application is defined in the servlet context!");
     }
 
-    Props props = application.getServerProps();
-    name = props.getString("azkaban.name", "");
-    label = props.getString("azkaban.label", "");
-    color = props.getString("azkaban.color", "#FF0000");
+    final Props props = this.application.getServerProps();
+    this.name = props.getString("azkaban.name", "");
+    this.label = props.getString("azkaban.label", "");
+    this.color = props.getString("azkaban.color", "#FF0000");
 
-    if (application instanceof AzkabanWebServer) {
-      AzkabanWebServer server = (AzkabanWebServer) application;
-      viewerPlugins = PluginRegistry.getRegistry().getViewerPlugins();
-      triggerPlugins =
-          new ArrayList<TriggerPlugin>(server.getTriggerPlugins().values());
+    if (this.application instanceof AzkabanWebServer) {
+      final AzkabanWebServer server = (AzkabanWebServer) this.application;
+      this.viewerPlugins = PluginRegistry.getRegistry().getViewerPlugins();
+      this.triggerPlugins =
+          new ArrayList<>(server.getTriggerPlugins().values());
     }
   }
 
   /**
    * Checks for the existance of the parameter in the request
-   *
-   * @param request
-   * @param param
-   * @return
    */
-  public boolean hasParam(HttpServletRequest request, String param) {
+  public boolean hasParam(final HttpServletRequest request, final String param) {
     return HttpRequestUtils.hasParam(request, param);
   }
 
   /**
    * Retrieves the param from the http servlet request. Will throw an exception
    * if not found
-   *
-   * @param request
-   * @param name
-   * @return
-   * @throws ServletException
    */
-  public String getParam(HttpServletRequest request, String name)
+  public String getParam(final HttpServletRequest request, final String name)
       throws ServletException {
     return HttpRequestUtils.getParam(request, name);
   }
 
   /**
    * Retrieves the param from the http servlet request.
-   *
-   * @param request
-   * @param name
-   * @param default
-   *
-   * @return
    */
-  public String getParam(HttpServletRequest request, String name,
-      String defaultVal) {
+  public String getParam(final HttpServletRequest request, final String name,
+      final String defaultVal) {
     return HttpRequestUtils.getParam(request, name, defaultVal);
   }
 
   /**
    * Returns the param and parses it into an int. Will throw an exception if not
    * found, or a parse error if the type is incorrect.
-   *
-   * @param request
-   * @param name
-   * @return
-   * @throws ServletException
    */
-  public int getIntParam(HttpServletRequest request, String name)
+  public int getIntParam(final HttpServletRequest request, final String name)
       throws ServletException {
     return HttpRequestUtils.getIntParam(request, name);
   }
 
-  public int getIntParam(HttpServletRequest request, String name, int defaultVal) {
+  public int getIntParam(final HttpServletRequest request, final String name,
+      final int defaultVal) {
     return HttpRequestUtils.getIntParam(request, name, defaultVal);
   }
 
-  public long getLongParam(HttpServletRequest request, String name)
+  public long getLongParam(final HttpServletRequest request, final String name)
       throws ServletException {
     return HttpRequestUtils.getLongParam(request, name);
   }
 
-  public long getLongParam(HttpServletRequest request, String name,
-      long defaultVal) {
+  public long getLongParam(final HttpServletRequest request, final String name,
+      final long defaultVal) {
     return HttpRequestUtils.getLongParam(request, name, defaultVal);
   }
 
-  public Map<String, String> getParamGroup(HttpServletRequest request,
-      String groupName) throws ServletException {
+  public Map<String, String> getParamGroup(final HttpServletRequest request,
+      final String groupName) throws ServletException {
     return HttpRequestUtils.getParamGroup(request, groupName);
   }
 
   /**
    * Returns the session value of the request.
-   *
-   * @param request
-   * @param key
-   * @param value
    */
-  protected void setSessionValue(HttpServletRequest request, String key,
-      Object value) {
+  protected void setSessionValue(final HttpServletRequest request, final String key,
+      final Object value) {
     request.getSession(true).setAttribute(key, value);
   }
 
   /**
    * Adds a session value to the request
-   *
-   * @param request
-   * @param key
-   * @param value
    */
-  @SuppressWarnings({ "unchecked", "rawtypes" })
-  protected void addSessionValue(HttpServletRequest request, String key,
-      Object value) {
+  protected void addSessionValue(final HttpServletRequest request, final String key,
+      final Object value) {
     List l = (List) request.getSession(true).getAttribute(key);
-    if (l == null)
+    if (l == null) {
       l = new ArrayList();
+    }
     l.add(value);
     request.getSession(true).setAttribute(key, l);
   }
@@ -210,13 +210,10 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
   /**
    * Sets an error message in azkaban.failure.message in the cookie. This will
    * be used by the web client javascript to somehow display the message
-   *
-   * @param response
-   * @param errorMsg
    */
-  protected void setErrorMessageInCookie(HttpServletResponse response,
-      String errorMsg) {
-    Cookie cookie = new Cookie(AZKABAN_FAILURE_MESSAGE, errorMsg);
+  protected void setErrorMessageInCookie(final HttpServletResponse response,
+      final String errorMsg) {
+    final Cookie cookie = new Cookie(AZKABAN_FAILURE_MESSAGE, errorMsg);
     cookie.setPath("/");
     response.addCookie(cookie);
   }
@@ -224,13 +221,10 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
   /**
    * Sets a warning message in azkaban.warn.message in the cookie. This will
    * be used by the web client javascript to somehow display the message
-   *
-   * @param response
-   * @param warnMsg
    */
-  protected void setWarnMessageInCookie(HttpServletResponse response,
-      String errorMsg) {
-    Cookie cookie = new Cookie(AZKABAN_WARN_MESSAGE, errorMsg);
+  protected void setWarnMessageInCookie(final HttpServletResponse response,
+      final String errorMsg) {
+    final Cookie cookie = new Cookie(AZKABAN_WARN_MESSAGE, errorMsg);
     cookie.setPath("/");
     response.addCookie(cookie);
   }
@@ -238,25 +232,19 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
   /**
    * Sets a message in azkaban.success.message in the cookie. This will be used
    * by the web client javascript to somehow display the message
-   *
-   * @param response
-   * @param errorMsg
    */
-  protected void setSuccessMessageInCookie(HttpServletResponse response,
-      String message) {
-    Cookie cookie = new Cookie(AZKABAN_SUCCESS_MESSAGE, message);
+  protected void setSuccessMessageInCookie(final HttpServletResponse response,
+      final String message) {
+    final Cookie cookie = new Cookie(AZKABAN_SUCCESS_MESSAGE, message);
     cookie.setPath("/");
     response.addCookie(cookie);
   }
 
   /**
    * Retrieves a success message from a cookie. azkaban.success.message
-   *
-   * @param request
-   * @return
    */
-  protected String getSuccessMessageFromCookie(HttpServletRequest request) {
-    Cookie cookie = getCookieByName(request, AZKABAN_SUCCESS_MESSAGE);
+  protected String getSuccessMessageFromCookie(final HttpServletRequest request) {
+    final Cookie cookie = getCookieByName(request, AZKABAN_SUCCESS_MESSAGE);
 
     if (cookie == null) {
       return null;
@@ -266,12 +254,9 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
 
   /**
    * Retrieves a warn message from a cookie. azkaban.warn.message
-   *
-   * @param request
-   * @return
    */
-  protected String getWarnMessageFromCookie(HttpServletRequest request) {
-    Cookie cookie = getCookieByName(request, AZKABAN_WARN_MESSAGE);
+  protected String getWarnMessageFromCookie(final HttpServletRequest request) {
+    final Cookie cookie = getCookieByName(request, AZKABAN_WARN_MESSAGE);
 
     if (cookie == null) {
       return null;
@@ -281,12 +266,9 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
 
   /**
    * Retrieves a success message from a cookie. azkaban.failure.message
-   *
-   * @param request
-   * @return
    */
-  protected String getErrorMessageFromCookie(HttpServletRequest request) {
-    Cookie cookie = getCookieByName(request, AZKABAN_FAILURE_MESSAGE);
+  protected String getErrorMessageFromCookie(final HttpServletRequest request) {
+    final Cookie cookie = getCookieByName(request, AZKABAN_FAILURE_MESSAGE);
     if (cookie == null) {
       return null;
     }
@@ -297,14 +279,11 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
   /**
    * Retrieves a cookie by name. Potential issue in performance if a lot of
    * cookie variables are used.
-   *
-   * @param request
-   * @return
    */
-  protected Cookie getCookieByName(HttpServletRequest request, String name) {
-    Cookie[] cookies = request.getCookies();
+  protected Cookie getCookieByName(final HttpServletRequest request, final String name) {
+    final Cookie[] cookies = request.getCookies();
     if (cookies != null) {
-      for (Cookie cookie : cookies) {
+      for (final Cookie cookie : cookies) {
         if (name.equals(cookie.getName())) {
           return cookie;
         }
@@ -316,19 +295,14 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
 
   /**
    * Creates a new velocity page to use. With session.
-   *
-   * @param req
-   * @param resp
-   * @param template
-   * @return
    */
-  protected Page newPage(HttpServletRequest req, HttpServletResponse resp,
-      Session session, String template) {
-    Page page = new Page(req, resp, getApplication().getVelocityEngine(), template);
+  protected Page newPage(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session, final String template) {
+    final Page page = new Page(req, resp, getApplication().getVelocityEngine(), template);
     page.add("version", jarVersion);
-    page.add("azkaban_name", name);
-    page.add("azkaban_label", label);
-    page.add("azkaban_color", color);
+    page.add("azkaban_name", this.name);
+    page.add("azkaban_label", this.label);
+    page.add("azkaban_color", this.color);
     page.add("utils", utils);
     page.add("timezone", TimeZone.getDefault().getID());
     page.add("currentTime", (new DateTime()).getMillis());
@@ -337,29 +311,29 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
     }
     page.add("context", req.getContextPath());
 
-    String errorMsg = getErrorMessageFromCookie(req);
+    final String errorMsg = getErrorMessageFromCookie(req);
     page.add("error_message", errorMsg == null || errorMsg.isEmpty() ? "null"
         : errorMsg);
     setErrorMessageInCookie(resp, null);
 
-    String warnMsg = getWarnMessageFromCookie(req);
+    final String warnMsg = getWarnMessageFromCookie(req);
     page.add("warn_message", warnMsg == null || warnMsg.isEmpty() ? "null"
         : warnMsg);
     setWarnMessageInCookie(resp, null);
 
-    String successMsg = getSuccessMessageFromCookie(req);
+    final String successMsg = getSuccessMessageFromCookie(req);
     page.add("success_message",
         successMsg == null || successMsg.isEmpty() ? "null" : successMsg);
     setSuccessMessageInCookie(resp, null);
 
     // @TODO, allow more than one type of viewer. For time sake, I only install
     // the first one
-    if (viewerPlugins != null && !viewerPlugins.isEmpty()) {
-      page.add("viewers", viewerPlugins);
+    if (this.viewerPlugins != null && !this.viewerPlugins.isEmpty()) {
+      page.add("viewers", this.viewerPlugins);
     }
 
-    if (triggerPlugins != null && !triggerPlugins.isEmpty()) {
-      page.add("triggerPlugins", triggerPlugins);
+    if (this.triggerPlugins != null && !this.triggerPlugins.isEmpty()) {
+      page.add("triggerPlugins", this.triggerPlugins);
     }
 
     return page;
@@ -367,34 +341,29 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
 
   /**
    * Creates a new velocity page to use.
-   *
-   * @param req
-   * @param resp
-   * @param template
-   * @return
    */
-  protected Page newPage(HttpServletRequest req, HttpServletResponse resp,
-      String template) {
-    Page page = new Page(req, resp, getApplication().getVelocityEngine(), template);
+  protected Page newPage(final HttpServletRequest req, final HttpServletResponse resp,
+      final String template) {
+    final Page page = new Page(req, resp, getApplication().getVelocityEngine(), template);
     page.add("version", jarVersion);
-    page.add("azkaban_name", name);
-    page.add("azkaban_label", label);
-    page.add("azkaban_color", color);
+    page.add("azkaban_name", this.name);
+    page.add("azkaban_label", this.label);
+    page.add("azkaban_color", this.color);
     page.add("timezone", TimeZone.getDefault().getID());
     page.add("currentTime", (new DateTime()).getMillis());
     page.add("context", req.getContextPath());
 
     // @TODO, allow more than one type of viewer. For time sake, I only install
     // the first one
-    if (viewerPlugins != null && !viewerPlugins.isEmpty()) {
-      page.add("viewers", viewerPlugins);
-      ViewerPlugin plugin = viewerPlugins.get(0);
+    if (this.viewerPlugins != null && !this.viewerPlugins.isEmpty()) {
+      page.add("viewers", this.viewerPlugins);
+      final ViewerPlugin plugin = this.viewerPlugins.get(0);
       page.add("viewerName", plugin.getPluginName());
       page.add("viewerPath", plugin.getPluginPath());
     }
 
-    if (triggerPlugins != null && !triggerPlugins.isEmpty()) {
-      page.add("triggers", triggerPlugins);
+    if (this.triggerPlugins != null && !this.triggerPlugins.isEmpty()) {
+      page.add("triggers", this.triggerPlugins);
     }
 
     return page;
@@ -402,55 +371,15 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
 
   /**
    * Writes json out to the stream.
-   *
-   * @param resp
-   * @param obj
-   * @throws IOException
    */
-  protected void writeJSON(HttpServletResponse resp, Object obj)
+  protected void writeJSON(final HttpServletResponse resp, final Object obj)
       throws IOException {
     writeJSON(resp, obj, false);
   }
 
-  protected void writeJSON(HttpServletResponse resp, Object obj, boolean pretty)
+  protected void writeJSON(final HttpServletResponse resp, final Object obj, final boolean pretty)
       throws IOException {
     resp.setContentType(JSON_MIME_TYPE);
     JSONUtils.toJSON(obj, resp.getOutputStream(), true);
   }
-
-  /**
-   * Retrieve the Azkaban application
-   *
-   * @param config
-   * @return
-   */
-  public static AzkabanWebServer getApp(ServletConfig config) {
-    AzkabanWebServer app =
-        (AzkabanWebServer) config.getServletContext().getAttribute(
-            AzkabanServletContextListener.AZKABAN_SERVLET_CONTEXT_KEY);
-
-    if (app == null) {
-      throw new IllegalStateException(
-          "No batch application is defined in the servlet context!");
-    } else {
-      return app;
-    }
-  }
-
-  public static String createJsonResponse(String status, String message,
-      String action, Map<String, Object> params) {
-    HashMap<String, Object> response = new HashMap<String, Object>();
-    response.put("status", status);
-    if (message != null) {
-      response.put("message", message);
-    }
-    if (action != null) {
-      response.put("action", action);
-    }
-    if (params != null) {
-      response.putAll(params);
-    }
-
-    return JSONUtils.toJSON(response);
-  }
 }
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/AzkabanServletContextListener.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/AzkabanServletContextListener.java
index 33462ef..4372ed6 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/AzkabanServletContextListener.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/AzkabanServletContextListener.java
@@ -16,15 +16,15 @@
 
 package azkaban.webapp.servlet;
 
+import azkaban.webapp.AzkabanWebServer;
 import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletContextListener;
 
-import azkaban.webapp.AzkabanWebServer;
-
 /**
  * A ServletContextListener that loads the batch application
  */
 public class AzkabanServletContextListener implements ServletContextListener {
+
   public static final String AZKABAN_SERVLET_CONTEXT_KEY = "azkaban_app";
 
   private AzkabanWebServer app;
@@ -33,7 +33,7 @@ public class AzkabanServletContextListener implements ServletContextListener {
    * Delete the app
    */
   @Override
-  public void contextDestroyed(ServletContextEvent event) {
+  public void contextDestroyed(final ServletContextEvent event) {
     this.app = null;
   }
 
@@ -41,10 +41,10 @@ public class AzkabanServletContextListener implements ServletContextListener {
    * Load the app for use in non jetty containers.
    */
   @Override
-  public void contextInitialized(ServletContextEvent event) {
+  public void contextInitialized(final ServletContextEvent event) {
     try {
       this.app = new AzkabanWebServer();
-    } catch (Exception e) {
+    } catch (final Exception e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
     }
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ExecutorServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ExecutorServlet.java
index 30b2c4f..6479c8d 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ExecutorServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ExecutorServlet.java
@@ -45,26 +45,24 @@ import azkaban.utils.FlowUtils;
 import azkaban.utils.Pair;
 import azkaban.utils.Props;
 import azkaban.webapp.AzkabanWebServer;
+import azkaban.webapp.WebMetrics;
 import azkaban.webapp.plugin.PluginRegistry;
 import azkaban.webapp.plugin.ViewerPlugin;
-import azkaban.webapp.WebMetrics;
-
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.log4j.Logger;
 
 
 public class ExecutorServlet extends LoginAbstractAzkabanServlet {
+
   private static final Logger LOGGER =
       Logger.getLogger(ExecutorServlet.class.getName());
   private static final long serialVersionUID = 1L;
@@ -75,19 +73,19 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
   private UserManager userManager;
 
   @Override
-  public void init(ServletConfig config) throws ServletException {
+  public void init(final ServletConfig config) throws ServletException {
     super.init(config);
-    AzkabanWebServer server = (AzkabanWebServer) getApplication();
-    userManager = server.getUserManager();
-    projectManager = server.getProjectManager();
-    executorManager = server.getExecutorManager();
-    scheduleManager = server.getScheduleManager();
-    velocityHelper = new ExecutorVelocityHelper();
+    final AzkabanWebServer server = (AzkabanWebServer) getApplication();
+    this.userManager = server.getUserManager();
+    this.projectManager = server.getProjectManager();
+    this.executorManager = server.getExecutorManager();
+    this.scheduleManager = server.getScheduleManager();
+    this.velocityHelper = new ExecutorVelocityHelper();
   }
 
   @Override
-  protected void handleGet(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws ServletException, IOException {
+  protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws ServletException, IOException {
     if (hasParam(req, "ajax")) {
       handleAJAXAction(req, resp, session);
     } else if (hasParam(req, "execid")) {
@@ -101,19 +99,19 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     }
   }
 
-  private void handleAJAXAction(HttpServletRequest req,
-      HttpServletResponse resp, Session session) throws ServletException,
+  private void handleAJAXAction(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) throws ServletException,
       IOException {
-    HashMap<String, Object> ret = new HashMap<String, Object>();
-    String ajaxName = getParam(req, "ajax");
+    final HashMap<String, Object> ret = new HashMap<>();
+    final String ajaxName = getParam(req, "ajax");
 
     if (hasParam(req, "execid")) {
-      int execid = getIntParam(req, "execid");
+      final int execid = getIntParam(req, "execid");
       ExecutableFlow exFlow = null;
 
       try {
-        exFlow = executorManager.getExecutableFlow(execid);
-      } catch (ExecutorManagerException e) {
+        exFlow = this.executorManager.getExecutableFlow(execid);
+      } catch (final ExecutorManagerException e) {
         ret.put("error",
             "Error fetching execution '" + execid + "': " + e.getMessage());
       }
@@ -145,8 +143,8 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
         }
       }
     } else if (ajaxName.equals("fetchscheduledflowgraph")) {
-      String projectName = getParam(req, "project");
-      String flowName = getParam(req, "flow");
+      final String projectName = getParam(req, "project");
+      final String flowName = getParam(req, "flow");
       ajaxFetchScheduledFlowGraph(projectName, flowName, ret, session.getUser());
     } else if (ajaxName.equals("reloadExecutors")) {
       ajaxReloadExecutors(req, resp, ret, session.getUser());
@@ -155,17 +153,17 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     } else if (ajaxName.equals("disableQueueProcessor")) {
       ajaxUpdateQueueProcessor(req, resp, ret, session.getUser(), false);
     } else if (ajaxName.equals("getRunning")) {
-      String projectName = getParam(req, "project");
-      String flowName = getParam(req, "flow");
+      final String projectName = getParam(req, "project");
+      final String flowName = getParam(req, "flow");
       ajaxGetFlowRunning(req, resp, ret, session.getUser(), projectName,
           flowName);
     } else if (ajaxName.equals("flowInfo")) {
-      String projectName = getParam(req, "project");
-      String flowName = getParam(req, "flow");
+      final String projectName = getParam(req, "project");
+      final String flowName = getParam(req, "flow");
       ajaxFetchFlowInfo(req, resp, ret, session.getUser(), projectName,
           flowName);
     } else {
-      String projectName = getParam(req, "project");
+      final String projectName = getParam(req, "project");
 
       ret.put("project", projectName);
       if (ajaxName.equals("executeFlow")) {
@@ -183,50 +181,51 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
    * disables queueProcessor if @param status is false.
    * </pre>
    */
-  private void ajaxUpdateQueueProcessor(HttpServletRequest req,
-    HttpServletResponse resp, HashMap<String, Object> returnMap, User user,
-    boolean enableQueue) {
+  private void ajaxUpdateQueueProcessor(final HttpServletRequest req,
+      final HttpServletResponse resp, final HashMap<String, Object> returnMap, final User user,
+      final boolean enableQueue) {
     boolean wasSuccess = false;
-    if (HttpRequestUtils.hasPermission(userManager, user, Type.ADMIN)) {
+    if (HttpRequestUtils.hasPermission(this.userManager, user, Type.ADMIN)) {
       try {
         if (enableQueue) {
-          executorManager.enableQueueProcessorThread();
+          this.executorManager.enableQueueProcessorThread();
         } else {
-          executorManager.disableQueueProcessorThread();
+          this.executorManager.disableQueueProcessorThread();
         }
         returnMap.put(ConnectorParams.STATUS_PARAM,
-          ConnectorParams.RESPONSE_SUCCESS);
+            ConnectorParams.RESPONSE_SUCCESS);
         wasSuccess = true;
-      } catch (ExecutorManagerException e) {
+      } catch (final ExecutorManagerException e) {
         returnMap.put(ConnectorParams.RESPONSE_ERROR, e.getMessage());
       }
     } else {
       returnMap.put(ConnectorParams.RESPONSE_ERROR,
-        "Only Admins are allowed to update queue processor");
+          "Only Admins are allowed to update queue processor");
     }
     if (!wasSuccess) {
       returnMap.put(ConnectorParams.STATUS_PARAM,
-        ConnectorParams.RESPONSE_ERROR);
+          ConnectorParams.RESPONSE_ERROR);
     }
   }
 
-  private void ajaxFetchScheduledFlowGraph(String projectName, String flowName,
-      HashMap<String, Object> ret, User user) throws ServletException {
-    Project project =
+  private void ajaxFetchScheduledFlowGraph(final String projectName, final String flowName,
+      final HashMap<String, Object> ret, final User user) throws ServletException {
+    final Project project =
         getProjectAjaxByPermission(ret, projectName, user, Type.EXECUTE);
     if (project == null) {
       ret.put("error", "Project '" + projectName + "' doesn't exist.");
       return;
     }
     try {
-      Schedule schedule = scheduleManager.getSchedule(project.getId(), flowName);
-      ExecutionOptions executionOptions = schedule != null ? schedule.getExecutionOptions() : new ExecutionOptions();
-      Flow flow = project.getFlow(flowName);
+      final Schedule schedule = this.scheduleManager.getSchedule(project.getId(), flowName);
+      final ExecutionOptions executionOptions =
+          schedule != null ? schedule.getExecutionOptions() : new ExecutionOptions();
+      final Flow flow = project.getFlow(flowName);
       if (flow == null) {
         ret.put("error", "Flow '" + flowName + "' cannot be found in project " + project);
         return;
       }
-      ExecutableFlow exFlow = new ExecutableFlow(project, flow);
+      final ExecutableFlow exFlow = new ExecutableFlow(project, flow);
       exFlow.setExecutionOptions(executionOptions);
       ret.put("submitTime", exFlow.getSubmitTime());
       ret.put("submitUser", exFlow.getSubmitUser());
@@ -234,55 +233,55 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
       ret.put("projectId", exFlow.getProjectId());
       ret.put("project", project.getName());
       FlowUtils.applyDisabledJobs(executionOptions.getDisabledJobs(), exFlow);
-      Map<String, Object> flowObj = getExecutableNodeInfo(exFlow);
+      final Map<String, Object> flowObj = getExecutableNodeInfo(exFlow);
       ret.putAll(flowObj);
-    } catch(ScheduleManagerException ex) {
+    } catch (final ScheduleManagerException ex) {
       throw new ServletException(ex);
     }
   }
 
   /* Reloads executors from DB and azkaban.properties via executorManager */
-  private void ajaxReloadExecutors(HttpServletRequest req,
-    HttpServletResponse resp, HashMap<String, Object> returnMap, User user) {
+  private void ajaxReloadExecutors(final HttpServletRequest req,
+      final HttpServletResponse resp, final HashMap<String, Object> returnMap, final User user) {
     boolean wasSuccess = false;
-    if (HttpRequestUtils.hasPermission(userManager, user, Type.ADMIN)) {
+    if (HttpRequestUtils.hasPermission(this.userManager, user, Type.ADMIN)) {
       try {
-        executorManager.setupExecutors();
+        this.executorManager.setupExecutors();
         returnMap.put(ConnectorParams.STATUS_PARAM,
-          ConnectorParams.RESPONSE_SUCCESS);
+            ConnectorParams.RESPONSE_SUCCESS);
         wasSuccess = true;
-      } catch (ExecutorManagerException e) {
+      } catch (final ExecutorManagerException e) {
         returnMap.put(ConnectorParams.RESPONSE_ERROR,
-          "Failed to refresh the executors " + e.getMessage());
+            "Failed to refresh the executors " + e.getMessage());
       }
     } else {
       returnMap.put(ConnectorParams.RESPONSE_ERROR,
-        "Only Admins are allowed to refresh the executors");
+          "Only Admins are allowed to refresh the executors");
     }
     if (!wasSuccess) {
       returnMap.put(ConnectorParams.STATUS_PARAM,
-        ConnectorParams.RESPONSE_ERROR);
+          ConnectorParams.RESPONSE_ERROR);
     }
   }
 
   @Override
-  protected void handlePost(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws ServletException, IOException {
+  protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws ServletException, IOException {
     if (hasParam(req, "ajax")) {
       handleAJAXAction(req, resp, session);
     }
   }
 
-  private void handleExecutionJobDetailsPage(HttpServletRequest req,
-      HttpServletResponse resp, Session session) throws ServletException,
+  private void handleExecutionJobDetailsPage(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) throws ServletException,
       IOException {
-    Page page =
+    final Page page =
         newPage(req, resp, session,
             "azkaban/webapp/servlet/velocity/jobdetailspage.vm");
-    User user = session.getUser();
-    int execId = getIntParam(req, "execid");
-    String jobId = getParam(req, "job");
-    int attempt = getIntParam(req, "attempt", 0);
+    final User user = session.getUser();
+    final int execId = getIntParam(req, "execid");
+    final String jobId = getParam(req, "job");
+    final int attempt = getIntParam(req, "attempt", 0);
     page.add("execid", execId);
     page.add("jobid", jobId);
     page.add("attempt", attempt);
@@ -290,7 +289,7 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     ExecutableFlow flow = null;
     ExecutableNode node = null;
     try {
-      flow = executorManager.getExecutableFlow(execId);
+      flow = this.executorManager.getExecutableFlow(execId);
       if (flow == null) {
         page.add("errorMsg", "Error loading executing flow " + execId
             + ": not found.");
@@ -305,18 +304,18 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
         return;
       }
 
-      List<ViewerPlugin> jobViewerPlugins =
+      final List<ViewerPlugin> jobViewerPlugins =
           PluginRegistry.getRegistry().getViewerPluginsForJobType(
               node.getType());
       page.add("jobViewerPlugins", jobViewerPlugins);
-    } catch (ExecutorManagerException e) {
+    } catch (final ExecutorManagerException e) {
       page.add("errorMsg", "Error loading executing flow: " + e.getMessage());
       page.render();
       return;
     }
 
-    int projectId = flow.getProjectId();
-    Project project =
+    final int projectId = flow.getProjectId();
+    final Project project =
         getProjectPageByPermission(page, projectId, user, Type.READ);
     if (project == null) {
       page.render();
@@ -331,66 +330,66 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     page.render();
   }
 
-  private void handleExecutionsPage(HttpServletRequest req,
-      HttpServletResponse resp, Session session) throws ServletException,
+  private void handleExecutionsPage(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) throws ServletException,
       IOException {
-    Page page =
+    final Page page =
         newPage(req, resp, session,
             "azkaban/webapp/servlet/velocity/executionspage.vm");
 
-    List<Pair<ExecutableFlow, Executor>> runningFlows =
-      executorManager.getActiveFlowsWithExecutor();
+    final List<Pair<ExecutableFlow, Executor>> runningFlows =
+        this.executorManager.getActiveFlowsWithExecutor();
     page.add("runningFlows", runningFlows.isEmpty() ? null : runningFlows);
 
-    List<ExecutableFlow> finishedFlows =
-        executorManager.getRecentlyFinishedFlows();
+    final List<ExecutableFlow> finishedFlows =
+        this.executorManager.getRecentlyFinishedFlows();
     page.add("recentlyFinished", finishedFlows.isEmpty() ? null : finishedFlows);
-    page.add("vmutils", velocityHelper);
+    page.add("vmutils", this.velocityHelper);
     page.render();
   }
 
-  private void handleExecutionFlowPage(HttpServletRequest req,
-      HttpServletResponse resp, Session session) throws ServletException,
+  private void handleExecutionFlowPage(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) throws ServletException,
       IOException {
-    Page page =
+    final Page page =
         newPage(req, resp, session,
             "azkaban/webapp/servlet/velocity/executingflowpage.vm");
-    User user = session.getUser();
-    int execId = getIntParam(req, "execid");
+    final User user = session.getUser();
+    final int execId = getIntParam(req, "execid");
     page.add("execid", execId);
 
     ExecutableFlow flow = null;
     try {
-      flow = executorManager.getExecutableFlow(execId);
+      flow = this.executorManager.getExecutableFlow(execId);
       if (flow == null) {
         page.add("errorMsg", "Error loading executing flow " + execId
             + " not found.");
         page.render();
         return;
       }
-    } catch (ExecutorManagerException e) {
+    } catch (final ExecutorManagerException e) {
       page.add("errorMsg", "Error loading executing flow: " + e.getMessage());
       page.render();
       return;
     }
 
-    int projectId = flow.getProjectId();
-    Project project =
+    final int projectId = flow.getProjectId();
+    final Project project =
         getProjectPageByPermission(page, projectId, user, Type.READ);
     if (project == null) {
       page.render();
       return;
     }
 
-    Props props = getApplication().getServerProps();
-    String execExternalLinkURL = ExternalLinkUtils.getExternalAnalyzerOnReq(props, req);
+    final Props props = getApplication().getServerProps();
+    final String execExternalLinkURL = ExternalLinkUtils.getExternalAnalyzerOnReq(props, req);
 
-    if(execExternalLinkURL.length() > 0) {
+    if (execExternalLinkURL.length() > 0) {
       page.add("executionExternalLinkURL", execExternalLinkURL);
       LOGGER.debug("Added an External analyzer to the page");
       LOGGER.debug("External analyzer url: " + execExternalLinkURL);
 
-      String execExternalLinkLabel =
+      final String execExternalLinkLabel =
           props.getString(Constants.ConfigurationKeys.AZKABAN_SERVER_EXTERNAL_ANALYZER_LABEL,
               "External Analyzer");
       page.add("executionExternalLinkLabel", execExternalLinkLabel);
@@ -404,9 +403,9 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     page.render();
   }
 
-  protected Project getProjectPageByPermission(Page page, int projectId,
-      User user, Permission.Type type) {
-    Project project = projectManager.getProject(projectId);
+  protected Project getProjectPageByPermission(final Page page, final int projectId,
+      final User user, final Permission.Type type) {
+    final Project project = this.projectManager.getProject(projectId);
 
     if (project == null) {
       page.add("errorMsg", "Project " + project + " not found.");
@@ -421,9 +420,9 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     return null;
   }
 
-  protected Project getProjectAjaxByPermission(Map<String, Object> ret,
-      String projectName, User user, Permission.Type type) {
-    Project project = projectManager.getProject(projectName);
+  protected Project getProjectAjaxByPermission(final Map<String, Object> ret,
+      final String projectName, final User user, final Permission.Type type) {
+    final Project project = this.projectManager.getProject(projectName);
 
     if (project == null) {
       ret.put("error", "Project '" + project + "' not found.");
@@ -438,9 +437,9 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     return null;
   }
 
-  protected Project getProjectAjaxByPermission(Map<String, Object> ret,
-      int projectId, User user, Permission.Type type) {
-    Project project = projectManager.getProject(projectId);
+  protected Project getProjectAjaxByPermission(final Map<String, Object> ret,
+      final int projectId, final User user, final Permission.Type type) {
+    final Project project = this.projectManager.getProject(projectId);
 
     if (project == null) {
       ret.put("error", "Project '" + project + "' not found.");
@@ -455,10 +454,10 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     return null;
   }
 
-  private void ajaxRestartFailed(HttpServletRequest req,
-      HttpServletResponse resp, HashMap<String, Object> ret, User user,
-      ExecutableFlow exFlow) throws ServletException {
-    Project project =
+  private void ajaxRestartFailed(final HttpServletRequest req,
+      final HttpServletResponse resp, final HashMap<String, Object> ret, final User user,
+      final ExecutableFlow exFlow) throws ServletException {
+    final Project project =
         getProjectAjaxByPermission(ret, exFlow.getProjectId(), user,
             Type.EXECUTE);
     if (project == null) {
@@ -472,39 +471,33 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     }
 
     try {
-      executorManager.retryFailures(exFlow, user.getUserId());
-    } catch (ExecutorManagerException e) {
+      this.executorManager.retryFailures(exFlow, user.getUserId());
+    } catch (final ExecutorManagerException e) {
       ret.put("error", e.getMessage());
     }
   }
 
   /**
    * Gets the logs through plain text stream to reduce memory overhead.
-   *
-   * @param req
-   * @param resp
-   * @param user
-   * @param exFlow
-   * @throws ServletException
    */
-  private void ajaxFetchExecFlowLogs(HttpServletRequest req,
-      HttpServletResponse resp, HashMap<String, Object> ret, User user,
-      ExecutableFlow exFlow) throws ServletException {
-    long startMs = System.currentTimeMillis();
-    Project project =
+  private void ajaxFetchExecFlowLogs(final HttpServletRequest req,
+      final HttpServletResponse resp, final HashMap<String, Object> ret, final User user,
+      final ExecutableFlow exFlow) throws ServletException {
+    final long startMs = System.currentTimeMillis();
+    final Project project =
         getProjectAjaxByPermission(ret, exFlow.getProjectId(), user, Type.READ);
     if (project == null) {
       return;
     }
 
-    int offset = this.getIntParam(req, "offset");
-    int length = this.getIntParam(req, "length");
+    final int offset = this.getIntParam(req, "offset");
+    final int length = this.getIntParam(req, "length");
 
     resp.setCharacterEncoding("utf-8");
 
     try {
-      LogData data =
-          executorManager.getExecutableFlowLog(exFlow, offset, length);
+      final LogData data =
+          this.executorManager.getExecutableFlowLog(exFlow, offset, length);
       if (data == null) {
         ret.put("length", 0);
         ret.put("offset", offset);
@@ -514,7 +507,7 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
         ret.put("offset", data.getOffset());
         ret.put("data", StringEscapeUtils.escapeHtml(data.getData()));
       }
-    } catch (ExecutorManagerException e) {
+    } catch (final ExecutorManagerException e) {
       throw new ServletException(e);
     }
 
@@ -529,39 +522,33 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
 
   /**
    * Gets the logs through ajax plain text stream to reduce memory overhead.
-   *
-   * @param req
-   * @param resp
-   * @param user
-   * @param exFlow
-   * @throws ServletException
    */
-  private void ajaxFetchJobLogs(HttpServletRequest req,
-      HttpServletResponse resp, HashMap<String, Object> ret, User user,
-      ExecutableFlow exFlow) throws ServletException {
-    Project project =
+  private void ajaxFetchJobLogs(final HttpServletRequest req,
+      final HttpServletResponse resp, final HashMap<String, Object> ret, final User user,
+      final ExecutableFlow exFlow) throws ServletException {
+    final Project project =
         getProjectAjaxByPermission(ret, exFlow.getProjectId(), user, Type.READ);
     if (project == null) {
       return;
     }
 
-    int offset = this.getIntParam(req, "offset");
-    int length = this.getIntParam(req, "length");
+    final int offset = this.getIntParam(req, "offset");
+    final int length = this.getIntParam(req, "length");
 
-    String jobId = this.getParam(req, "jobId");
+    final String jobId = this.getParam(req, "jobId");
     resp.setCharacterEncoding("utf-8");
 
     try {
-      ExecutableNode node = exFlow.getExecutableNodePath(jobId);
+      final ExecutableNode node = exFlow.getExecutableNodePath(jobId);
       if (node == null) {
         ret.put("error",
             "Job " + jobId + " doesn't exist in " + exFlow.getExecutionId());
         return;
       }
 
-      int attempt = this.getIntParam(req, "attempt", node.getAttempt());
-      LogData data =
-          executorManager.getExecutionJobLog(exFlow, jobId, offset, length,
+      final int attempt = this.getIntParam(req, "attempt", node.getAttempt());
+      final LogData data =
+          this.executorManager.getExecutionJobLog(exFlow, jobId, offset, length,
               attempt);
       if (data == null) {
         ret.put("length", 0);
@@ -572,51 +559,51 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
         ret.put("offset", data.getOffset());
         ret.put("data", StringEscapeUtils.escapeHtml(data.getData()));
       }
-    } catch (ExecutorManagerException e) {
+    } catch (final ExecutorManagerException e) {
       throw new ServletException(e);
     }
   }
 
-  private void ajaxFetchJobStats(HttpServletRequest req,
-      HttpServletResponse resp, HashMap<String, Object> ret, User user,
-      ExecutableFlow exFlow) throws ServletException {
-    Project project =
+  private void ajaxFetchJobStats(final HttpServletRequest req,
+      final HttpServletResponse resp, final HashMap<String, Object> ret, final User user,
+      final ExecutableFlow exFlow) throws ServletException {
+    final Project project =
         getProjectAjaxByPermission(ret, exFlow.getProjectId(), user, Type.READ);
     if (project == null) {
       return;
     }
 
-    String jobId = this.getParam(req, "jobid");
+    final String jobId = this.getParam(req, "jobid");
     resp.setCharacterEncoding("utf-8");
 
     try {
-      ExecutableNode node = exFlow.getExecutableNodePath(jobId);
+      final ExecutableNode node = exFlow.getExecutableNodePath(jobId);
       if (node == null) {
         ret.put("error",
             "Job " + jobId + " doesn't exist in " + exFlow.getExecutionId());
         return;
       }
 
-      List<Object> jsonObj =
-          executorManager
+      final List<Object> jsonObj =
+          this.executorManager
               .getExecutionJobStats(exFlow, jobId, node.getAttempt());
       ret.put("jobStats", jsonObj);
-    } catch (ExecutorManagerException e) {
+    } catch (final ExecutorManagerException e) {
       ret.put("error", "Error retrieving stats for job " + jobId);
       return;
     }
   }
 
-  private void ajaxFetchFlowInfo(HttpServletRequest req,
-      HttpServletResponse resp, HashMap<String, Object> ret, User user,
-      String projectName, String flowId) throws ServletException {
-    Project project =
+  private void ajaxFetchFlowInfo(final HttpServletRequest req,
+      final HttpServletResponse resp, final HashMap<String, Object> ret, final User user,
+      final String projectName, final String flowId) throws ServletException {
+    final Project project =
         getProjectAjaxByPermission(ret, projectName, user, Type.READ);
     if (project == null) {
       return;
     }
 
-    Flow flow = project.getFlow(flowId);
+    final Flow flow = project.getFlow(flowId);
     if (flow == null) {
       ret.put("error", "Error loading flow. Flow " + flowId
           + " doesn't exist in " + projectName);
@@ -628,14 +615,14 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
 
     Schedule sflow = null;
     try {
-      for (Schedule sched : scheduleManager.getSchedules()) {
+      for (final Schedule sched : this.scheduleManager.getSchedules()) {
         if (sched.getProjectId() == project.getId()
             && sched.getFlowName().equals(flowId)) {
           sflow = sched;
           break;
         }
       }
-    } catch (ScheduleManagerException e) {
+    } catch (final ScheduleManagerException e) {
       // TODO Auto-generated catch block
       throw new ServletException(e);
     }
@@ -645,40 +632,40 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     }
   }
 
-  private void ajaxFetchExecutableFlowInfo(HttpServletRequest req,
-      HttpServletResponse resp, HashMap<String, Object> ret, User user,
-      ExecutableFlow exflow) throws ServletException {
-    Project project =
+  private void ajaxFetchExecutableFlowInfo(final HttpServletRequest req,
+      final HttpServletResponse resp, final HashMap<String, Object> ret, final User user,
+      final ExecutableFlow exflow) throws ServletException {
+    final Project project =
         getProjectAjaxByPermission(ret, exflow.getProjectId(), user, Type.READ);
     if (project == null) {
       return;
     }
 
-    Flow flow = project.getFlow(exflow.getFlowId());
+    final Flow flow = project.getFlow(exflow.getFlowId());
     if (flow == null) {
       ret.put("error", "Error loading flow. Flow " + exflow.getFlowId()
           + " doesn't exist in " + exflow.getProjectId());
       return;
     }
 
-    ExecutionOptions options = exflow.getExecutionOptions();
+    final ExecutionOptions options = exflow.getExecutionOptions();
 
     ret.put("successEmails", options.getSuccessEmails());
     ret.put("failureEmails", options.getFailureEmails());
     ret.put("flowParam", options.getFlowParameters());
 
-    FailureAction action = options.getFailureAction();
+    final FailureAction action = options.getFailureAction();
     String failureAction = null;
     switch (action) {
-    case FINISH_CURRENTLY_RUNNING:
-      failureAction = "finishCurrent";
-      break;
-    case CANCEL_ALL:
-      failureAction = "cancelImmediately";
-      break;
-    case FINISH_ALL_POSSIBLE:
-      failureAction = "finishPossible";
-      break;
+      case FINISH_CURRENTLY_RUNNING:
+        failureAction = "finishCurrent";
+        break;
+      case CANCEL_ALL:
+        failureAction = "cancelImmediately";
+        break;
+      case FINISH_ALL_POSSIBLE:
+        failureAction = "finishPossible";
+        break;
     }
     ret.put("failureAction", failureAction);
 
@@ -693,18 +680,18 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     ret.put("pipelineExecution", options.getPipelineExecutionId());
     ret.put("queueLevel", options.getQueueLevel());
 
-    HashMap<String, String> nodeStatus = new HashMap<String, String>();
-    for (ExecutableNode node : exflow.getExecutableNodes()) {
+    final HashMap<String, String> nodeStatus = new HashMap<>();
+    for (final ExecutableNode node : exflow.getExecutableNodes()) {
       nodeStatus.put(node.getId(), node.getStatus().toString());
     }
     ret.put("nodeStatus", nodeStatus);
     ret.put("disabled", options.getDisabledJobs());
   }
 
-  private void ajaxCancelFlow(HttpServletRequest req, HttpServletResponse resp,
-      HashMap<String, Object> ret, User user, ExecutableFlow exFlow)
+  private void ajaxCancelFlow(final HttpServletRequest req, final HttpServletResponse resp,
+      final HashMap<String, Object> ret, final User user, final ExecutableFlow exFlow)
       throws ServletException {
-    Project project =
+    final Project project =
         getProjectAjaxByPermission(ret, exFlow.getProjectId(), user,
             Type.EXECUTE);
     if (project == null) {
@@ -712,32 +699,32 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     }
 
     try {
-      executorManager.cancelFlow(exFlow, user.getUserId());
-    } catch (ExecutorManagerException e) {
+      this.executorManager.cancelFlow(exFlow, user.getUserId());
+    } catch (final ExecutorManagerException e) {
       ret.put("error", e.getMessage());
     }
   }
 
-  private void ajaxGetFlowRunning(HttpServletRequest req,
-      HttpServletResponse resp, HashMap<String, Object> ret, User user,
-      String projectId, String flowId) throws ServletException {
-    Project project =
+  private void ajaxGetFlowRunning(final HttpServletRequest req,
+      final HttpServletResponse resp, final HashMap<String, Object> ret, final User user,
+      final String projectId, final String flowId) throws ServletException {
+    final Project project =
         getProjectAjaxByPermission(ret, projectId, user, Type.EXECUTE);
     if (project == null) {
       return;
     }
 
-    List<Integer> refs =
-        executorManager.getRunningFlows(project.getId(), flowId);
+    final List<Integer> refs =
+        this.executorManager.getRunningFlows(project.getId(), flowId);
     if (!refs.isEmpty()) {
       ret.put("execIds", refs);
     }
   }
 
-  private void ajaxPauseFlow(HttpServletRequest req, HttpServletResponse resp,
-      HashMap<String, Object> ret, User user, ExecutableFlow exFlow)
+  private void ajaxPauseFlow(final HttpServletRequest req, final HttpServletResponse resp,
+      final HashMap<String, Object> ret, final User user, final ExecutableFlow exFlow)
       throws ServletException {
-    Project project =
+    final Project project =
         getProjectAjaxByPermission(ret, exFlow.getProjectId(), user,
             Type.EXECUTE);
     if (project == null) {
@@ -745,16 +732,16 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     }
 
     try {
-      executorManager.pauseFlow(exFlow, user.getUserId());
-    } catch (ExecutorManagerException e) {
+      this.executorManager.pauseFlow(exFlow, user.getUserId());
+    } catch (final ExecutorManagerException e) {
       ret.put("error", e.getMessage());
     }
   }
 
-  private void ajaxResumeFlow(HttpServletRequest req, HttpServletResponse resp,
-      HashMap<String, Object> ret, User user, ExecutableFlow exFlow)
+  private void ajaxResumeFlow(final HttpServletRequest req, final HttpServletResponse resp,
+      final HashMap<String, Object> ret, final User user, final ExecutableFlow exFlow)
       throws ServletException {
-    Project project =
+    final Project project =
         getProjectAjaxByPermission(ret, exFlow.getProjectId(), user,
             Type.EXECUTE);
     if (project == null) {
@@ -762,22 +749,22 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     }
 
     try {
-      executorManager.resumeFlow(exFlow, user.getUserId());
-    } catch (ExecutorManagerException e) {
+      this.executorManager.resumeFlow(exFlow, user.getUserId());
+    } catch (final ExecutorManagerException e) {
       ret.put("resume", e.getMessage());
     }
   }
 
-  private Map<String, Object> getExecutableFlowUpdateInfo(ExecutableNode node,
-      long lastUpdateTime) {
-    HashMap<String, Object> nodeObj = new HashMap<String, Object>();
+  private Map<String, Object> getExecutableFlowUpdateInfo(final ExecutableNode node,
+      final long lastUpdateTime) {
+    final HashMap<String, Object> nodeObj = new HashMap<>();
     if (node instanceof ExecutableFlowBase) {
-      ExecutableFlowBase base = (ExecutableFlowBase) node;
-      ArrayList<Map<String, Object>> nodeList =
-          new ArrayList<Map<String, Object>>();
+      final ExecutableFlowBase base = (ExecutableFlowBase) node;
+      final ArrayList<Map<String, Object>> nodeList =
+          new ArrayList<>();
 
-      for (ExecutableNode subNode : base.getExecutableNodes()) {
-        Map<String, Object> subNodeObj =
+      for (final ExecutableNode subNode : base.getExecutableNodes()) {
+        final Map<String, Object> subNodeObj =
             getExecutableFlowUpdateInfo(subNode, lastUpdateTime);
         if (!subNodeObj.isEmpty()) {
           nodeList.add(subNodeObj);
@@ -806,8 +793,8 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     return nodeObj;
   }
 
-  private Map<String, Object> getExecutableNodeInfo(ExecutableNode node) {
-    HashMap<String, Object> nodeObj = new HashMap<String, Object>();
+  private Map<String, Object> getExecutableNodeInfo(final ExecutableNode node) {
+    final HashMap<String, Object> nodeObj = new HashMap<>();
     nodeObj.put("id", node.getId());
     nodeObj.put("status", node.getStatus());
     nodeObj.put("startTime", node.getStartTime());
@@ -826,12 +813,12 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     }
 
     if (node instanceof ExecutableFlowBase) {
-      ExecutableFlowBase base = (ExecutableFlowBase) node;
-      ArrayList<Map<String, Object>> nodeList =
-          new ArrayList<Map<String, Object>>();
+      final ExecutableFlowBase base = (ExecutableFlowBase) node;
+      final ArrayList<Map<String, Object>> nodeList =
+          new ArrayList<>();
 
-      for (ExecutableNode subNode : base.getExecutableNodes()) {
-        Map<String, Object> subNodeObj = getExecutableNodeInfo(subNode);
+      for (final ExecutableNode subNode : base.getExecutableNodes()) {
+        final Map<String, Object> subNodeObj = getExecutableNodeInfo(subNode);
         if (!subNodeObj.isEmpty()) {
           nodeList.add(subNodeObj);
         }
@@ -845,19 +832,19 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     return nodeObj;
   }
 
-  private void ajaxFetchExecutableFlowUpdate(HttpServletRequest req,
-      HttpServletResponse resp, HashMap<String, Object> ret, User user,
-      ExecutableFlow exFlow) throws ServletException {
-    Long lastUpdateTime = Long.parseLong(getParam(req, "lastUpdateTime"));
+  private void ajaxFetchExecutableFlowUpdate(final HttpServletRequest req,
+      final HttpServletResponse resp, final HashMap<String, Object> ret, final User user,
+      final ExecutableFlow exFlow) throws ServletException {
+    final Long lastUpdateTime = Long.parseLong(getParam(req, "lastUpdateTime"));
     System.out.println("Fetching " + exFlow.getExecutionId());
 
-    Project project =
+    final Project project =
         getProjectAjaxByPermission(ret, exFlow.getProjectId(), user, Type.READ);
     if (project == null) {
       return;
     }
 
-    Map<String, Object> map =
+    final Map<String, Object> map =
         getExecutableFlowUpdateInfo(exFlow, lastUpdateTime);
     map.put("status", exFlow.getStatus());
     map.put("startTime", exFlow.getStartTime());
@@ -866,12 +853,12 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     ret.putAll(map);
   }
 
-  private void ajaxFetchExecutableFlow(HttpServletRequest req,
-      HttpServletResponse resp, HashMap<String, Object> ret, User user,
-      ExecutableFlow exFlow) throws ServletException {
+  private void ajaxFetchExecutableFlow(final HttpServletRequest req,
+      final HttpServletResponse resp, final HashMap<String, Object> ret, final User user,
+      final ExecutableFlow exFlow) throws ServletException {
     System.out.println("Fetching " + exFlow.getExecutionId());
 
-    Project project =
+    final Project project =
         getProjectAjaxByPermission(ret, exFlow.getProjectId(), user, Type.READ);
     if (project == null) {
       return;
@@ -883,17 +870,17 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     ret.put("projectId", exFlow.getProjectId());
     ret.put("project", project.getName());
 
-    Map<String, Object> flowObj = getExecutableNodeInfo(exFlow);
+    final Map<String, Object> flowObj = getExecutableNodeInfo(exFlow);
     ret.putAll(flowObj);
   }
 
-  private void ajaxAttemptExecuteFlow(HttpServletRequest req,
-      HttpServletResponse resp, HashMap<String, Object> ret, User user)
+  private void ajaxAttemptExecuteFlow(final HttpServletRequest req,
+      final HttpServletResponse resp, final HashMap<String, Object> ret, final User user)
       throws ServletException {
-    String projectName = getParam(req, "project");
-    String flowId = getParam(req, "flow");
+    final String projectName = getParam(req, "project");
+    final String flowId = getParam(req, "flow");
 
-    Project project =
+    final Project project =
         getProjectAjaxByPermission(ret, projectName, user, Type.EXECUTE);
     if (project == null) {
       ret.put("error", "Project '" + projectName + "' doesn't exist.");
@@ -901,7 +888,7 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     }
 
     ret.put("flow", flowId);
-    Flow flow = project.getFlow(flowId);
+    final Flow flow = project.getFlow(flowId);
     if (flow == null) {
       ret.put("error", "Flow '" + flowId + "' cannot be found in project "
           + project);
@@ -911,13 +898,13 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     ajaxExecuteFlow(req, resp, ret, user);
   }
 
-  private void ajaxExecuteFlow(HttpServletRequest req,
-      HttpServletResponse resp, HashMap<String, Object> ret, User user)
+  private void ajaxExecuteFlow(final HttpServletRequest req,
+      final HttpServletResponse resp, final HashMap<String, Object> ret, final User user)
       throws ServletException {
-    String projectName = getParam(req, "project");
-    String flowId = getParam(req, "flow");
+    final String projectName = getParam(req, "project");
+    final String flowId = getParam(req, "flow");
 
-    Project project =
+    final Project project =
         getProjectAjaxByPermission(ret, projectName, user, Type.EXECUTE);
     if (project == null) {
       ret.put("error", "Project '" + projectName + "' doesn't exist.");
@@ -925,18 +912,18 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     }
 
     ret.put("flow", flowId);
-    Flow flow = project.getFlow(flowId);
+    final Flow flow = project.getFlow(flowId);
     if (flow == null) {
       ret.put("error", "Flow '" + flowId + "' cannot be found in project "
           + project);
       return;
     }
 
-    ExecutableFlow exflow = new ExecutableFlow(project, flow);
+    final ExecutableFlow exflow = new ExecutableFlow(project, flow);
     exflow.setSubmitUser(user.getUserId());
     exflow.addAllProxyUsers(project.getProxyUsers());
 
-    ExecutionOptions options = HttpRequestUtils.parseFlowOptions(req);
+    final ExecutionOptions options = HttpRequestUtils.parseFlowOptions(req);
     exflow.setExecutionOptions(options);
     if (!options.isFailureEmailsOverridden()) {
       options.setFailureEmails(flow.getFailureEmails());
@@ -947,11 +934,11 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
     options.setMailCreator(flow.getMailCreator());
 
     try {
-      HttpRequestUtils.filterAdminOnlyFlowParams(userManager, options, user);
-      String message =
-          executorManager.submitExecutableFlow(exflow, user.getUserId());
+      HttpRequestUtils.filterAdminOnlyFlowParams(this.userManager, options, user);
+      final String message =
+          this.executorManager.submitExecutableFlow(exflow, user.getUserId());
       ret.put("message", message);
-    } catch (Exception e) {
+    } catch (final Exception e) {
       e.printStackTrace();
       ret.put("error",
           "Error submitting flow " + exflow.getFlowId() + ". " + e.getMessage());
@@ -961,8 +948,9 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
   }
 
   public class ExecutorVelocityHelper {
-    public String getProjectName(int id) {
-      Project project = projectManager.getProject(id);
+
+    public String getProjectName(final int id) {
+      final Project project = ExecutorServlet.this.projectManager.getProject(id);
       if (project == null) {
         return String.valueOf(id);
       }
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/HistoryServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/HistoryServlet.java
index ba76dd6..7563760 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/HistoryServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/HistoryServlet.java
@@ -16,25 +16,22 @@
 
 package azkaban.webapp.servlet;
 
+import azkaban.executor.ExecutableFlow;
+import azkaban.executor.ExecutorManagerAdapter;
+import azkaban.executor.ExecutorManagerException;
+import azkaban.project.Project;
+import azkaban.project.ProjectManager;
+import azkaban.server.session.Session;
+import azkaban.webapp.AzkabanWebServer;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
-
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import org.joda.time.format.DateTimeFormat;
 
-import azkaban.executor.ExecutableFlow;
-import azkaban.executor.ExecutorManagerAdapter;
-import azkaban.executor.ExecutorManagerException;
-import azkaban.project.Project;
-import azkaban.project.ProjectManager;
-import azkaban.server.session.Session;
-import azkaban.webapp.AzkabanWebServer;
-
 public class HistoryServlet extends LoginAbstractAzkabanServlet {
 
   private static final String FILTER_BY_DATE_PATTERN = "MM/dd/yyyy hh:mm aa";
@@ -44,17 +41,17 @@ public class HistoryServlet extends LoginAbstractAzkabanServlet {
   private ExecutorVMHelper vmHelper;
 
   @Override
-  public void init(ServletConfig config) throws ServletException {
+  public void init(final ServletConfig config) throws ServletException {
     super.init(config);
-    AzkabanWebServer server = (AzkabanWebServer) getApplication();
-    executorManager = server.getExecutorManager();
-    projectManager = server.getProjectManager();
-    vmHelper = new ExecutorVMHelper();
+    final AzkabanWebServer server = (AzkabanWebServer) getApplication();
+    this.executorManager = server.getExecutorManager();
+    this.projectManager = server.getProjectManager();
+    this.vmHelper = new ExecutorVMHelper();
   }
 
   @Override
-  protected void handleGet(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws ServletException, IOException {
+  protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws ServletException, IOException {
 
     if (hasParam(req, "ajax")) {
       handleAJAXAction(req, resp, session);
@@ -67,11 +64,11 @@ public class HistoryServlet extends LoginAbstractAzkabanServlet {
     }
   }
 
-  private void handleAJAXAction(HttpServletRequest req,
-      HttpServletResponse resp, Session session) throws ServletException,
+  private void handleAJAXAction(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) throws ServletException,
       IOException {
-    HashMap<String, Object> ret = new HashMap<String, Object>();
-    String ajaxName = getParam(req, "ajax");
+    final HashMap<String, Object> ret = new HashMap<>();
+    final String ajaxName = getParam(req, "ajax");
 
     if (ajaxName.equals("fetch")) {
       fetchHistoryData(req, resp, ret);
@@ -82,62 +79,62 @@ public class HistoryServlet extends LoginAbstractAzkabanServlet {
     }
   }
 
-  private void fetchHistoryData(HttpServletRequest req,
-      HttpServletResponse resp, HashMap<String, Object> ret)
+  private void fetchHistoryData(final HttpServletRequest req,
+      final HttpServletResponse resp, final HashMap<String, Object> ret)
       throws ServletException {
   }
 
-  private void handleHistoryPage(HttpServletRequest req,
-      HttpServletResponse resp, Session session) throws ServletException {
-    Page page =
+  private void handleHistoryPage(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) throws ServletException {
+    final Page page =
         newPage(req, resp, session,
             "azkaban/webapp/servlet/velocity/historypage.vm");
     int pageNum = getIntParam(req, "page", 1);
-    int pageSize = getIntParam(req, "size", 16);
-    page.add("vmutils", vmHelper);
+    final int pageSize = getIntParam(req, "size", 16);
+    page.add("vmutils", this.vmHelper);
 
     if (pageNum < 0) {
       pageNum = 1;
     }
     List<ExecutableFlow> history = null;
     if (hasParam(req, "advfilter")) {
-      String projContain = getParam(req, "projcontain");
-      String flowContain = getParam(req, "flowcontain");
-      String userContain = getParam(req, "usercontain");
-      int status = getIntParam(req, "status");
-      String begin = getParam(req, "begin");
+      final String projContain = getParam(req, "projcontain");
+      final String flowContain = getParam(req, "flowcontain");
+      final String userContain = getParam(req, "usercontain");
+      final int status = getIntParam(req, "status");
+      final String begin = getParam(req, "begin");
 
-      long beginTime =
+      final long beginTime =
           begin == "" ? -1 : DateTimeFormat.forPattern(FILTER_BY_DATE_PATTERN)
               .parseDateTime(begin).getMillis();
-      String end = getParam(req, "end");
+      final String end = getParam(req, "end");
 
-      long endTime =
+      final long endTime =
           end == "" ? -1 : DateTimeFormat.forPattern(FILTER_BY_DATE_PATTERN)
               .parseDateTime(end).getMillis();
       try {
         history =
-            executorManager.getExecutableFlows(projContain, flowContain,
+            this.executorManager.getExecutableFlows(projContain, flowContain,
                 userContain, status, beginTime, endTime, (pageNum - 1)
                     * pageSize, pageSize);
-      } catch (ExecutorManagerException e) {
+      } catch (final ExecutorManagerException e) {
         page.add("error", e.getMessage());
       }
     } else if (hasParam(req, "search")) {
-      String searchTerm = getParam(req, "searchterm");
+      final String searchTerm = getParam(req, "searchterm");
       try {
         history =
-            executorManager.getExecutableFlows(searchTerm, (pageNum - 1)
+            this.executorManager.getExecutableFlows(searchTerm, (pageNum - 1)
                 * pageSize, pageSize);
-      } catch (ExecutorManagerException e) {
+      } catch (final ExecutorManagerException e) {
         page.add("error", e.getMessage());
       }
     } else {
       try {
         history =
-            executorManager.getExecutableFlows((pageNum - 1) * pageSize,
+            this.executorManager.getExecutableFlows((pageNum - 1) * pageSize,
                 pageSize);
-      } catch (ExecutorManagerException e) {
+      } catch (final ExecutorManagerException e) {
         e.printStackTrace();
       }
     }
@@ -192,21 +189,28 @@ public class HistoryServlet extends LoginAbstractAzkabanServlet {
     page.render();
   }
 
-  private void handleHistoryTimelinePage(HttpServletRequest req,
-      HttpServletResponse resp, Session session) {
+  private void handleHistoryTimelinePage(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) {
+  }
+
+  private void handleHistoryDayPage(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) {
   }
 
-  private void handleHistoryDayPage(HttpServletRequest req,
-      HttpServletResponse resp, Session session) {
+  @Override
+  protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws ServletException, IOException {
   }
 
   public static class PageSelection {
-    private int page;
-    private int size;
-    private boolean disabled;
+
+    private final int page;
+    private final int size;
+    private final boolean disabled;
     private boolean selected;
 
-    public PageSelection(int page, int size, boolean disabled, boolean selected) {
+    public PageSelection(final int page, final int size, final boolean disabled,
+        final boolean selected) {
       this.page = page;
       this.size = size;
       this.disabled = disabled;
@@ -214,34 +218,30 @@ public class HistoryServlet extends LoginAbstractAzkabanServlet {
     }
 
     public int getPage() {
-      return page;
+      return this.page;
     }
 
     public int getSize() {
-      return size;
+      return this.size;
     }
 
     public boolean getDisabled() {
-      return disabled;
+      return this.disabled;
     }
 
     public boolean isSelected() {
-      return selected;
+      return this.selected;
     }
 
-    public void setSelected(boolean selected) {
+    public void setSelected(final boolean selected) {
       this.selected = selected;
     }
   }
 
-  @Override
-  protected void handlePost(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws ServletException, IOException {
-  }
-
   public class ExecutorVMHelper {
-    public String getProjectName(int id) {
-      Project project = projectManager.getProject(id);
+
+    public String getProjectName(final int id) {
+      final Project project = HistoryServlet.this.projectManager.getProject(id);
       if (project == null) {
         return String.valueOf(id);
       }
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/IndexRedirectServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/IndexRedirectServlet.java
index 31153e5..bda1815 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/IndexRedirectServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/IndexRedirectServlet.java
@@ -16,22 +16,21 @@
 
 package azkaban.webapp.servlet;
 
+import azkaban.server.session.Session;
 import java.io.IOException;
-
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import azkaban.server.session.Session;
-
 /**
  * The main page
  */
 public class IndexRedirectServlet extends LoginAbstractAzkabanServlet {
+
   private static final long serialVersionUID = -1;
   private String defaultServletPath;
 
-  public IndexRedirectServlet(String defaultServletPath) {
+  public IndexRedirectServlet(final String defaultServletPath) {
     this.defaultServletPath = defaultServletPath;
     if (this.defaultServletPath.isEmpty()
         || this.defaultServletPath.equals("/")) {
@@ -40,14 +39,14 @@ public class IndexRedirectServlet extends LoginAbstractAzkabanServlet {
   }
 
   @Override
-  protected void handleGet(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws ServletException, IOException {
-    resp.sendRedirect(defaultServletPath);
+  protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws ServletException, IOException {
+    resp.sendRedirect(this.defaultServletPath);
   }
 
   @Override
-  protected void handlePost(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws ServletException, IOException {
-    resp.sendRedirect(defaultServletPath);
+  protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws ServletException, IOException {
+    resp.sendRedirect(this.defaultServletPath);
   }
 }
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/JMXHttpServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/JMXHttpServlet.java
index f1760a1..62dfc66 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/JMXHttpServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/JMXHttpServlet.java
@@ -16,11 +16,19 @@
 
 package azkaban.webapp.servlet;
 
+import azkaban.executor.ConnectorParams;
+import azkaban.executor.ExecutorManagerAdapter;
+import azkaban.server.session.Session;
+import azkaban.trigger.TriggerManager;
+import azkaban.user.Permission;
+import azkaban.user.Role;
+import azkaban.user.User;
+import azkaban.user.UserManager;
+import azkaban.webapp.AzkabanWebServer;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.TreeMap;
-
 import javax.management.MBeanAttributeInfo;
 import javax.management.MBeanInfo;
 import javax.management.ObjectName;
@@ -28,24 +36,14 @@ import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import org.apache.log4j.Logger;
 
-import azkaban.executor.ConnectorParams;
-import azkaban.executor.ExecutorManagerAdapter;
-import azkaban.server.session.Session;
-import azkaban.trigger.TriggerManager;
-import azkaban.user.Permission;
-import azkaban.user.Role;
-import azkaban.user.User;
-import azkaban.user.UserManager;
-import azkaban.webapp.AzkabanWebServer;
-
 /**
  * Limited set of jmx calls for when you cannot attach to the jvm
  */
 public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements
     ConnectorParams {
+
   /**
    *
    */
@@ -60,21 +58,21 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements
   private TriggerManager triggerManager;
 
   @Override
-  public void init(ServletConfig config) throws ServletException {
+  public void init(final ServletConfig config) throws ServletException {
     super.init(config);
 
-    server = (AzkabanWebServer) getApplication();
-    userManager = server.getUserManager();
-    executorManager = server.getExecutorManager();
+    this.server = (AzkabanWebServer) getApplication();
+    this.userManager = this.server.getUserManager();
+    this.executorManager = this.server.getExecutorManager();
 
-    triggerManager = server.getTriggerManager();
+    this.triggerManager = this.server.getTriggerManager();
   }
 
   @Override
-  protected void handleGet(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws ServletException, IOException {
+  protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws ServletException, IOException {
     if (hasParam(req, "ajax")) {
-      Map<String, Object> ret = new HashMap<String, Object>();
+      Map<String, Object> ret = new HashMap<>();
 
       if (!hasPermission(session.getUser(), Permission.Type.METRICS)) {
         ret.put("error", "User " + session.getUser().getUserId()
@@ -82,7 +80,7 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements
         this.writeJSON(resp, ret, true);
         return;
       }
-      String ajax = getParam(req, "ajax");
+      final String ajax = getParam(req, "ajax");
       if (JMX_GET_ALL_EXECUTOR_ATTRIBUTES.equals(ajax)) {
         if (!hasParam(req, JMX_MBEAN) || !hasParam(req, JMX_HOSTPORT)) {
           ret.put("error", "Parameters '" + JMX_MBEAN + "' and '"
@@ -91,31 +89,30 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements
           return;
         }
 
-        String hostPort = getParam(req, JMX_HOSTPORT);
-        String mbean = getParam(req, JMX_MBEAN);
-        Map<String, Object> result =
-            executorManager.callExecutorJMX(hostPort,
+        final String hostPort = getParam(req, JMX_HOSTPORT);
+        final String mbean = getParam(req, JMX_MBEAN);
+        final Map<String, Object> result =
+            this.executorManager.callExecutorJMX(hostPort,
                 JMX_GET_ALL_MBEAN_ATTRIBUTES, mbean);
         // order the attribute by name
-        for (Map.Entry<String, Object> entry : result.entrySet()) {
+        for (final Map.Entry<String, Object> entry : result.entrySet()) {
           if (entry.getValue() instanceof Map) {
-            @SuppressWarnings("unchecked")
-            Map<String, Object> entryValue = (Map<String, Object>) entry.getValue();
-            result.put(entry.getKey(), new TreeMap<String,Object>(entryValue));
+            final Map<String, Object> entryValue = (Map<String, Object>) entry.getValue();
+            result.put(entry.getKey(), new TreeMap<>(entryValue));
           }
         }
         ret = result;
       } else if (JMX_GET_MBEANS.equals(ajax)) {
-        ret.put("mbeans", server.getMbeanNames());
+        ret.put("mbeans", this.server.getMbeanNames());
       } else if (JMX_GET_MBEAN_INFO.equals(ajax)) {
         if (hasParam(req, JMX_MBEAN)) {
-          String mbeanName = getParam(req, JMX_MBEAN);
+          final String mbeanName = getParam(req, JMX_MBEAN);
           try {
-            ObjectName name = new ObjectName(mbeanName);
-            MBeanInfo info = server.getMBeanInfo(name);
+            final ObjectName name = new ObjectName(mbeanName);
+            final MBeanInfo info = this.server.getMBeanInfo(name);
             ret.put("attributes", info.getAttributes());
             ret.put("description", info.getDescription());
-          } catch (Exception e) {
+          } catch (final Exception e) {
             logger.error(e);
             ret.put("error", "'" + mbeanName + "' is not a valid mBean name");
           }
@@ -126,14 +123,14 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements
         if (!hasParam(req, JMX_MBEAN) || !hasParam(req, JMX_ATTRIBUTE)) {
           ret.put("error", "Parameters 'mbean' and 'attribute' must be set");
         } else {
-          String mbeanName = getParam(req, JMX_MBEAN);
-          String attribute = getParam(req, JMX_ATTRIBUTE);
+          final String mbeanName = getParam(req, JMX_MBEAN);
+          final String attribute = getParam(req, JMX_ATTRIBUTE);
 
           try {
-            ObjectName name = new ObjectName(mbeanName);
-            Object obj = server.getMBeanAttribute(name, attribute);
+            final ObjectName name = new ObjectName(mbeanName);
+            final Object obj = this.server.getMBeanAttribute(name, attribute);
             ret.put("value", obj);
-          } catch (Exception e) {
+          } catch (final Exception e) {
             logger.error(e);
             ret.put("error", "'" + mbeanName + "' is not a valid mBean name");
           }
@@ -142,31 +139,31 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements
         if (!hasParam(req, JMX_MBEAN)) {
           ret.put("error", "Parameters 'mbean' must be set");
         } else {
-          String mbeanName = getParam(req, JMX_MBEAN);
+          final String mbeanName = getParam(req, JMX_MBEAN);
           try {
-            ObjectName name = new ObjectName(mbeanName);
-            MBeanInfo info = server.getMBeanInfo(name);
+            final ObjectName name = new ObjectName(mbeanName);
+            final MBeanInfo info = this.server.getMBeanInfo(name);
 
-            MBeanAttributeInfo[] mbeanAttrs = info.getAttributes();
-            Map<String, Object> attributes = new TreeMap<String, Object>();
+            final MBeanAttributeInfo[] mbeanAttrs = info.getAttributes();
+            final Map<String, Object> attributes = new TreeMap<>();
 
-            for (MBeanAttributeInfo attrInfo : mbeanAttrs) {
-              Object obj = server.getMBeanAttribute(name, attrInfo.getName());
+            for (final MBeanAttributeInfo attrInfo : mbeanAttrs) {
+              final Object obj = this.server.getMBeanAttribute(name, attrInfo.getName());
               attributes.put(attrInfo.getName(), obj);
             }
 
             ret.put("attributes", attributes);
-          } catch (Exception e) {
+          } catch (final Exception e) {
             logger.error(e);
             ret.put("error", "'" + mbeanName + "' is not a valid mBean name");
           }
         }
       } else {
-        ret.put("commands", new String[] {
+        ret.put("commands", new String[]{
             JMX_GET_MBEANS,
             JMX_GET_MBEAN_INFO + "&" + JMX_MBEAN + "=<name>",
             JMX_GET_MBEAN_ATTRIBUTE + "&" + JMX_MBEAN + "=<name>&"
-                + JMX_ATTRIBUTE + "=<attributename>" });
+                + JMX_ATTRIBUTE + "=<attributename>"});
       }
       this.writeJSON(resp, ret, true);
     } else {
@@ -174,9 +171,9 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements
     }
   }
 
-  private void handleJMXPage(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws IOException {
-    Page page =
+  private void handleJMXPage(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws IOException {
+    final Page page =
         newPage(req, resp, session,
             "azkaban/webapp/servlet/velocity/jmxpage.vm");
 
@@ -187,25 +184,25 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements
       return;
     }
 
-    page.add("mbeans", server.getMbeanNames());
+    page.add("mbeans", this.server.getMbeanNames());
 
-    Map<String, Object> executorMBeans = new HashMap<String, Object>();
-    for (String hostPort : executorManager.getAllActiveExecutorServerHosts()) {
+    final Map<String, Object> executorMBeans = new HashMap<>();
+    for (final String hostPort : this.executorManager.getAllActiveExecutorServerHosts()) {
       try {
-        Map<String, Object> mbeans =
-            executorManager.callExecutorJMX(hostPort, JMX_GET_MBEANS, null);
+        final Map<String, Object> mbeans =
+            this.executorManager.callExecutorJMX(hostPort, JMX_GET_MBEANS, null);
 
         executorMBeans.put(hostPort, mbeans.get("mbeans"));
-      } catch (IOException e) {
+      } catch (final IOException e) {
         logger.error("Cannot contact executor " + hostPort, e);
       }
     }
 
     page.add("executorRemoteMBeans", executorMBeans);
 
-    Map<String, Object> triggerserverMBeans = new HashMap<String, Object>();
-    triggerserverMBeans.put(triggerManager.getJMX().getPrimaryServerHost(),
-        triggerManager.getJMX().getAllJMXMbeans());
+    final Map<String, Object> triggerserverMBeans = new HashMap<>();
+    triggerserverMBeans.put(this.triggerManager.getJMX().getPrimaryServerHost(),
+        this.triggerManager.getJMX().getAllJMXMbeans());
 
     page.add("triggerserverRemoteMBeans", triggerserverMBeans);
 
@@ -213,14 +210,14 @@ public class JMXHttpServlet extends LoginAbstractAzkabanServlet implements
   }
 
   @Override
-  protected void handlePost(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws ServletException, IOException {
+  protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws ServletException, IOException {
 
   }
 
-  protected boolean hasPermission(User user, Permission.Type type) {
-    for (String roleName : user.getRoles()) {
-      Role role = userManager.getRole(roleName);
+  protected boolean hasPermission(final User user, final Permission.Type type) {
+    for (final String roleName : user.getRoles()) {
+      final Role role = this.userManager.getRole(roleName);
       if (role.getPermission().isPermissionSet(type)
           || role.getPermission().isPermissionSet(Permission.Type.ADMIN)) {
         return true;
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/LoginAbstractAzkabanServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/LoginAbstractAzkabanServlet.java
index 3980d3f..f917316 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/LoginAbstractAzkabanServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/LoginAbstractAzkabanServlet.java
@@ -16,6 +16,15 @@
 
 package azkaban.webapp.servlet;
 
+import azkaban.project.Project;
+import azkaban.server.session.Session;
+import azkaban.user.Permission;
+import azkaban.user.Role;
+import azkaban.user.User;
+import azkaban.user.UserManager;
+import azkaban.user.UserManagerException;
+import azkaban.utils.StringUtils;
+import azkaban.utils.WebUtils;
 import azkaban.webapp.WebMetrics;
 import java.io.BufferedInputStream;
 import java.io.File;
@@ -26,27 +35,15 @@ import java.io.Writer;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
-
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
-import azkaban.utils.WebUtils;
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 import org.apache.commons.io.IOUtils;
 import org.apache.log4j.Logger;
 
-import azkaban.project.Project;
-import azkaban.server.session.Session;
-import azkaban.user.Permission;
-import azkaban.user.Role;
-import azkaban.user.User;
-import azkaban.user.UserManager;
-import azkaban.user.UserManagerException;
-import azkaban.utils.StringUtils;
-
 /**
  * Abstract Servlet that handles auto login when the session hasn't been
  * verified.
@@ -61,8 +58,9 @@ public abstract class LoginAbstractAzkabanServlet extends
   private static final String SESSION_ID_NAME = "azkaban.browser.session.id";
   private static final int DEFAULT_UPLOAD_DISK_SPOOL_SIZE = 20 * 1024 * 1024;
 
-  private static HashMap<String, String> contextType =
-      new HashMap<String, String>();
+  private static final HashMap<String, String> contextType =
+      new HashMap<>();
+
   static {
     contextType.put(".js", "application/javascript");
     contextType.put(".css", "text/css");
@@ -83,27 +81,27 @@ public abstract class LoginAbstractAzkabanServlet extends
   private boolean shouldLogRawUserAgent = false;
 
   @Override
-  public void init(ServletConfig config) throws ServletException {
+  public void init(final ServletConfig config) throws ServletException {
     super.init(config);
 
-    multipartParser = new MultipartParser(DEFAULT_UPLOAD_DISK_SPOOL_SIZE);
+    this.multipartParser = new MultipartParser(DEFAULT_UPLOAD_DISK_SPOOL_SIZE);
 
-    shouldLogRawUserAgent =
+    this.shouldLogRawUserAgent =
         getApplication().getServerProps().getBoolean("accesslog.raw.useragent",
             false);
   }
 
-  public void setResourceDirectory(File file) {
+  public void setResourceDirectory(final File file) {
     this.webResourceDirectory = file;
   }
 
   @Override
-  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+  protected void doGet(final HttpServletRequest req, final HttpServletResponse resp)
       throws ServletException, IOException {
 
     WebMetrics.INSTANCE.markWebGetCall();
     // Set session id
-    Session session = getSessionFromRequest(req);
+    final Session session = getSessionFromRequest(req);
     logRequest(req, session);
     if (hasParam(req, "logout")) {
       resp.sendRedirect(req.getContextPath());
@@ -125,7 +123,7 @@ public abstract class LoginAbstractAzkabanServlet extends
       handleGet(req, resp, session);
     } else {
       if (hasParam(req, "ajax")) {
-        HashMap<String, String> retVal = new HashMap<String, String>();
+        final HashMap<String, String> retVal = new HashMap<>();
         retVal.put("error", "session");
         this.writeJSON(resp, retVal);
       } else {
@@ -136,12 +134,9 @@ public abstract class LoginAbstractAzkabanServlet extends
 
   /**
    * Log out request - the format should be close to Apache access log format
-   *
-   * @param req
-   * @param session
    */
-  private void logRequest(HttpServletRequest req, Session session) {
-    StringBuilder buf = new StringBuilder();
+  private void logRequest(final HttpServletRequest req, final Session session) {
+    final StringBuilder buf = new StringBuilder();
     buf.append(getRealClientIpAddr(req)).append(" ");
     if (session != null && session.getUser() != null) {
       buf.append(session.getUser().getUserId()).append(" ");
@@ -159,8 +154,8 @@ public abstract class LoginAbstractAzkabanServlet extends
     }
     buf.append(req.getProtocol()).append("\" ");
 
-    String userAgent = req.getHeader("User-Agent");
-    if (shouldLogRawUserAgent) {
+    final String userAgent = req.getHeader("User-Agent");
+    if (this.shouldLogRawUserAgent) {
       buf.append(userAgent);
     } else {
       // simply log a short string to indicate browser or not
@@ -174,30 +169,30 @@ public abstract class LoginAbstractAzkabanServlet extends
     logger.info(buf.toString());
   }
 
-  private boolean handleFileGet(HttpServletRequest req, HttpServletResponse resp)
+  private boolean handleFileGet(final HttpServletRequest req, final HttpServletResponse resp)
       throws IOException {
-    if (webResourceDirectory == null) {
+    if (this.webResourceDirectory == null) {
       return false;
     }
 
     // Check if it's a resource
-    String prefix = req.getContextPath() + req.getServletPath();
-    String path = req.getRequestURI().substring(prefix.length());
-    int index = path.lastIndexOf('.');
+    final String prefix = req.getContextPath() + req.getServletPath();
+    final String path = req.getRequestURI().substring(prefix.length());
+    final int index = path.lastIndexOf('.');
     if (index == -1) {
       return false;
     }
 
-    String extension = path.substring(index);
+    final String extension = path.substring(index);
     if (contextType.containsKey(extension)) {
-      File file = new File(webResourceDirectory, path);
+      final File file = new File(this.webResourceDirectory, path);
       if (!file.exists() || !file.isFile()) {
         return false;
       }
 
       resp.setContentType(contextType.get(extension));
 
-      OutputStream output = resp.getOutputStream();
+      final OutputStream output = resp.getOutputStream();
       BufferedInputStream input = null;
       try {
         input = new BufferedInputStream(new FileInputStream(file));
@@ -214,26 +209,26 @@ public abstract class LoginAbstractAzkabanServlet extends
     return false;
   }
 
-  private String getRealClientIpAddr(HttpServletRequest req){
+  private String getRealClientIpAddr(final HttpServletRequest req) {
 
     // If some upstream device added an X-Forwarded-For header
     // use it for the client ip
     // This will support scenarios where load balancers or gateways
     // front the Azkaban web server and a changing Ip address invalidates
     // the session
-    HashMap<String, String> headers = new HashMap<>();
+    final HashMap<String, String> headers = new HashMap<>();
     headers.put(WebUtils.X_FORWARDED_FOR_HEADER,
-            req.getHeader(WebUtils.X_FORWARDED_FOR_HEADER.toLowerCase()));
+        req.getHeader(WebUtils.X_FORWARDED_FOR_HEADER.toLowerCase()));
 
-    WebUtils utils = new WebUtils();
+    final WebUtils utils = new WebUtils();
 
     return utils.getRealClientIpAddr(headers, req.getRemoteAddr());
   }
 
-  private Session getSessionFromRequest(HttpServletRequest req)
+  private Session getSessionFromRequest(final HttpServletRequest req)
       throws ServletException {
-    String remoteIp = getRealClientIpAddr(req);
-    Cookie cookie = getCookieByName(req, SESSION_ID_NAME);
+    final String remoteIp = getRealClientIpAddr(req);
+    final Cookie cookie = getCookieByName(req, SESSION_ID_NAME);
     String sessionId = null;
 
     if (cookie != null) {
@@ -246,12 +241,12 @@ public abstract class LoginAbstractAzkabanServlet extends
     return getSessionFromSessionId(sessionId, remoteIp);
   }
 
-  private Session getSessionFromSessionId(String sessionId, String remoteIp) {
+  private Session getSessionFromSessionId(final String sessionId, final String remoteIp) {
     if (sessionId == null) {
       return null;
     }
 
-    Session session = getApplication().getSessionCache().getSession(sessionId);
+    final Session session = getApplication().getSessionCache().getSession(sessionId);
     // Check if the IP's are equal. If not, we invalidate the sesson.
     if (session == null || !remoteIp.equals(session.getIp())) {
       return null;
@@ -260,14 +255,14 @@ public abstract class LoginAbstractAzkabanServlet extends
     return session;
   }
 
-  private void handleLogin(HttpServletRequest req, HttpServletResponse resp)
+  private void handleLogin(final HttpServletRequest req, final HttpServletResponse resp)
       throws ServletException, IOException {
     handleLogin(req, resp, null);
   }
 
-  private void handleLogin(HttpServletRequest req, HttpServletResponse resp,
-      String errorMsg) throws ServletException, IOException {
-    Page page = newPage(req, resp, "azkaban/webapp/servlet/velocity/login.vm");
+  private void handleLogin(final HttpServletRequest req, final HttpServletResponse resp,
+      final String errorMsg) throws ServletException, IOException {
+    final Page page = newPage(req, resp, "azkaban/webapp/servlet/velocity/login.vm");
     if (errorMsg != null) {
       page.add("errorMsg", errorMsg);
     }
@@ -276,7 +271,7 @@ public abstract class LoginAbstractAzkabanServlet extends
   }
 
   @Override
-  protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+  protected void doPost(final HttpServletRequest req, final HttpServletResponse resp)
       throws ServletException, IOException {
     Session session = getSessionFromRequest(req);
     WebMetrics.INSTANCE.markWebPostCall();
@@ -284,12 +279,12 @@ public abstract class LoginAbstractAzkabanServlet extends
 
     // Handle Multipart differently from other post messages
     if (ServletFileUpload.isMultipartContent(req)) {
-      Map<String, Object> params = multipartParser.parseMultipart(req);
+      final Map<String, Object> params = this.multipartParser.parseMultipart(req);
       if (session == null) {
         // See if the session id is properly set.
         if (params.containsKey("session.id")) {
-          String sessionId = (String) params.get("session.id");
-          String ip = getRealClientIpAddr(req);
+          final String sessionId = (String) params.get("session.id");
+          final String ip = getRealClientIpAddr(req);
 
           session = getSessionFromSessionId(sessionId, ip);
           if (session != null) {
@@ -304,13 +299,13 @@ public abstract class LoginAbstractAzkabanServlet extends
           return;
         }
 
-        String username = (String) params.get("username");
-        String password = (String) params.get("password");
-        String ip = getRealClientIpAddr(req);
+        final String username = (String) params.get("username");
+        final String password = (String) params.get("password");
+        final String ip = getRealClientIpAddr(req);
 
         try {
           session = createSession(username, password, ip);
-        } catch (UserManagerException e) {
+        } catch (final UserManagerException e) {
           writeResponse(resp, "Login error: " + e.getMessage());
           return;
         }
@@ -319,7 +314,7 @@ public abstract class LoginAbstractAzkabanServlet extends
       handleMultiformPost(req, resp, params, session);
     } else if (hasParam(req, "action")
         && getParam(req, "action").equals("login")) {
-      HashMap<String, Object> obj = new HashMap<String, Object>();
+      final HashMap<String, Object> obj = new HashMap<>();
       handleAjaxLoginAction(req, resp, obj);
       this.writeJSON(resp, obj);
     } else if (session == null) {
@@ -327,7 +322,7 @@ public abstract class LoginAbstractAzkabanServlet extends
         // If it's a post command with curl, we create a temporary session
         try {
           session = createSession(req);
-        } catch (UserManagerException e) {
+        } catch (final UserManagerException e) {
           writeResponse(resp, "Login error: " + e.getMessage());
         }
 
@@ -336,7 +331,7 @@ public abstract class LoginAbstractAzkabanServlet extends
         // There are no valid sessions and temporary logins, no we either pass
         // back a message or redirect.
         if (isAjaxCall(req)) {
-          String response =
+          final String response =
               createJsonResponse("error", "Invalid Session. Need to re-login",
                   "login", null);
           writeResponse(resp, response);
@@ -349,35 +344,35 @@ public abstract class LoginAbstractAzkabanServlet extends
     }
   }
 
-  private Session createSession(HttpServletRequest req)
+  private Session createSession(final HttpServletRequest req)
       throws UserManagerException, ServletException {
-    String username = getParam(req, "username");
-    String password = getParam(req, "password");
-    String ip = getRealClientIpAddr(req);
+    final String username = getParam(req, "username");
+    final String password = getParam(req, "password");
+    final String ip = getRealClientIpAddr(req);
 
     return createSession(username, password, ip);
   }
 
-  private Session createSession(String username, String password, String ip)
+  private Session createSession(final String username, final String password, final String ip)
       throws UserManagerException, ServletException {
-    UserManager manager = getApplication().getUserManager();
-    User user = manager.getUser(username, password);
+    final UserManager manager = getApplication().getUserManager();
+    final User user = manager.getUser(username, password);
 
-    String randomUID = UUID.randomUUID().toString();
-    Session session = new Session(randomUID, user, ip);
+    final String randomUID = UUID.randomUUID().toString();
+    final Session session = new Session(randomUID, user, ip);
 
     return session;
   }
 
-  protected boolean hasPermission(Project project, User user,
-      Permission.Type type) {
-    UserManager userManager = getApplication().getUserManager();
+  protected boolean hasPermission(final Project project, final User user,
+      final Permission.Type type) {
+    final UserManager userManager = getApplication().getUserManager();
     if (project.hasPermission(user, type)) {
       return true;
     }
 
-    for (String roleName : user.getRoles()) {
-      Role role = userManager.getRole(roleName);
+    for (final String roleName : user.getRoles()) {
+      final Role role = userManager.getRole(roleName);
       if (role.getPermission().isPermissionSet(type)
           || role.getPermission().isPermissionSet(Permission.Type.ADMIN)) {
         return true;
@@ -387,19 +382,19 @@ public abstract class LoginAbstractAzkabanServlet extends
     return false;
   }
 
-  protected void handleAjaxLoginAction(HttpServletRequest req,
-      HttpServletResponse resp, Map<String, Object> ret)
+  protected void handleAjaxLoginAction(final HttpServletRequest req,
+      final HttpServletResponse resp, final Map<String, Object> ret)
       throws ServletException {
     if (hasParam(req, "username") && hasParam(req, "password")) {
       Session session = null;
       try {
         session = createSession(req);
-      } catch (UserManagerException e) {
+      } catch (final UserManagerException e) {
         ret.put("error", "Incorrect Login. " + e.getMessage());
         return;
       }
 
-      Cookie cookie = new Cookie(SESSION_ID_NAME, session.getSessionId());
+      final Cookie cookie = new Cookie(SESSION_ID_NAME, session.getSessionId());
       cookie.setPath("/");
       resp.addCookie(cookie);
       getApplication().getSessionCache().addSession(session);
@@ -410,15 +405,15 @@ public abstract class LoginAbstractAzkabanServlet extends
     }
   }
 
-  protected void writeResponse(HttpServletResponse resp, String response)
+  protected void writeResponse(final HttpServletResponse resp, final String response)
       throws IOException {
-    Writer writer = resp.getWriter();
+    final Writer writer = resp.getWriter();
     writer.append(response);
     writer.flush();
   }
 
-  protected boolean isAjaxCall(HttpServletRequest req) throws ServletException {
-    String value = req.getHeader("X-Requested-With");
+  protected boolean isAjaxCall(final HttpServletRequest req) throws ServletException {
+    final String value = req.getHeader("X-Requested-With");
     if (value != null) {
       logger.info("has X-Requested-With " + value);
       return value.equals("XMLHttpRequest");
@@ -430,12 +425,6 @@ public abstract class LoginAbstractAzkabanServlet extends
   /**
    * The get request is handed off to the implementor after the user is logged
    * in.
-   *
-   * @param req
-   * @param resp
-   * @param session
-   * @throws ServletException
-   * @throws IOException
    */
   protected abstract void handleGet(HttpServletRequest req,
       HttpServletResponse resp, Session session) throws ServletException,
@@ -444,12 +433,6 @@ public abstract class LoginAbstractAzkabanServlet extends
   /**
    * The post request is handed off to the implementor after the user is logged
    * in.
-   *
-   * @param req
-   * @param resp
-   * @param session
-   * @throws ServletException
-   * @throws IOException
    */
   protected abstract void handlePost(HttpServletRequest req,
       HttpServletResponse resp, Session session) throws ServletException,
@@ -458,15 +441,9 @@ public abstract class LoginAbstractAzkabanServlet extends
   /**
    * The post request is handed off to the implementor after the user is logged
    * in.
-   *
-   * @param req
-   * @param resp
-   * @param session
-   * @throws ServletException
-   * @throws IOException
    */
-  protected void handleMultiformPost(HttpServletRequest req,
-      HttpServletResponse resp, Map<String, Object> multipart, Session session)
+  protected void handleMultiformPost(final HttpServletRequest req,
+      final HttpServletResponse resp, final Map<String, Object> multipart, final Session session)
       throws ServletException, IOException {
   }
 }
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/MultipartParser.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/MultipartParser.java
index 353b21e..8d4aa6b 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/MultipartParser.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/MultipartParser.java
@@ -20,10 +20,8 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
-
 import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.fileupload.FileUploadException;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
@@ -31,30 +29,30 @@ import org.apache.commons.fileupload.servlet.ServletFileUpload;
 
 public class MultipartParser {
 
-  private DiskFileItemFactory _uploadItemFactory;
+  private final DiskFileItemFactory _uploadItemFactory;
 
-  public MultipartParser(int spillToDiskSize) {
-    _uploadItemFactory = new DiskFileItemFactory();
-    _uploadItemFactory.setSizeThreshold(spillToDiskSize);
+  public MultipartParser(final int spillToDiskSize) {
+    this._uploadItemFactory = new DiskFileItemFactory();
+    this._uploadItemFactory.setSizeThreshold(spillToDiskSize);
   }
 
-  @SuppressWarnings("unchecked")
-  public Map<String, Object> parseMultipart(HttpServletRequest request)
+  public Map<String, Object> parseMultipart(final HttpServletRequest request)
       throws IOException, ServletException {
-    ServletFileUpload upload = new ServletFileUpload(_uploadItemFactory);
+    final ServletFileUpload upload = new ServletFileUpload(this._uploadItemFactory);
     List<FileItem> items = null;
     try {
       items = upload.parseRequest(request);
-    } catch (FileUploadException e) {
+    } catch (final FileUploadException e) {
       throw new ServletException(e);
     }
 
-    Map<String, Object> params = new HashMap<String, Object>();
-    for (FileItem item : items) {
-      if (item.isFormField())
+    final Map<String, Object> params = new HashMap<>();
+    for (final FileItem item : items) {
+      if (item.isFormField()) {
         params.put(item.getFieldName(), item.getString());
-      else
+      } else {
         params.put(item.getFieldName(), item);
+      }
     }
     return params;
   }
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/Page.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/Page.java
index cb8e06e..3a46763 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/Page.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/Page.java
@@ -16,21 +16,19 @@
 
 package azkaban.webapp.servlet;
 
+import azkaban.utils.Utils;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.VelocityEngine;
 import org.apache.velocity.tools.generic.EscapeTool;
 
-import azkaban.utils.Utils;
-
 /**
  * A page to display
  */
 public class Page {
+
   private static final String DEFAULT_MIME_TYPE = "text/html";
-  @SuppressWarnings("unused")
   private final HttpServletRequest request;
   private final HttpServletResponse response;
   private final VelocityEngine engine;
@@ -40,14 +38,9 @@ public class Page {
 
   /**
    * Creates a page and sets up the velocity engine to render
-   *
-   * @param request
-   * @param response
-   * @param engine
-   * @param template
    */
-  public Page(HttpServletRequest request, HttpServletResponse response,
-      VelocityEngine engine, String template) {
+  public Page(final HttpServletRequest request, final HttpServletResponse response,
+      final VelocityEngine engine, final String template) {
     this.request = Utils.nonNull(request);
     this.response = Utils.nonNull(response);
     this.engine = Utils.nonNull(engine);
@@ -63,11 +56,11 @@ public class Page {
    */
   public void render() {
     try {
-      response.setHeader("Content-type", "text/html; charset=UTF-8");
-      response.setCharacterEncoding("UTF-8");
-      response.setContentType(mimeType);
-      engine.mergeTemplate(template, "UTF-8", context, response.getWriter());
-    } catch (Exception e) {
+      this.response.setHeader("Content-type", "text/html; charset=UTF-8");
+      this.response.setCharacterEncoding("UTF-8");
+      this.response.setContentType(this.mimeType);
+      this.engine.mergeTemplate(this.template, "UTF-8", this.context, this.response.getWriter());
+    } catch (final Exception e) {
       throw new PageRenderException(e);
     }
   }
@@ -75,11 +68,11 @@ public class Page {
   /**
    * Adds variables to the velocity context.
    */
-  public void add(String name, Object value) {
-    context.put(name, value);
+  public void add(final String name, final Object value) {
+    this.context.put(name, value);
   }
 
-  public void setMimeType(String type) {
-    mimeType = type;
+  public void setMimeType(final String type) {
+    this.mimeType = type;
   }
 }
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/PageRenderException.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/PageRenderException.java
index 5b0c774..55c3ef1 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/PageRenderException.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/PageRenderException.java
@@ -20,9 +20,10 @@ package azkaban.webapp.servlet;
  * Thrown if there is an error rendering the page
  */
 public class PageRenderException extends RuntimeException {
+
   private static final long serialVersionUID = -1;
 
-  public PageRenderException(Throwable cause) {
+  public PageRenderException(final Throwable cause) {
     super(cause);
   }
 }
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
index 5a6137b..9e7106f 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
@@ -16,36 +16,6 @@
 
 package azkaban.webapp.servlet;
 
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.security.AccessControlException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-
 import azkaban.executor.ExecutableFlow;
 import azkaban.executor.ExecutableJobInfo;
 import azkaban.executor.ExecutorManagerAdapter;
@@ -78,8 +48,36 @@ import azkaban.utils.Props;
 import azkaban.utils.PropsUtils;
 import azkaban.utils.Utils;
 import azkaban.webapp.AzkabanWebServer;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.security.AccessControlException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
 
 public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
+
   private static final String APPLICATION_ZIP_MIME_TYPE = "application/zip";
   private static final long serialVersionUID = 1;
   private static final Logger logger = Logger
@@ -93,54 +91,51 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
 
   private static final String PROJECT_DOWNLOAD_BUFFER_SIZE_IN_BYTES =
       "project.download.buffer.size";
-
+  private static final Comparator<Flow> FLOW_ID_COMPARATOR = new Comparator<Flow>() {
+    @Override
+    public int compare(final Flow f1, final Flow f2) {
+      return f1.getId().compareTo(f2.getId());
+    }
+  };
   private ProjectManager projectManager;
   private ExecutorManagerAdapter executorManager;
   private ScheduleManager scheduleManager;
   private UserManager userManager;
   private int downloadBufferSize;
-
   private boolean lockdownCreateProjects = false;
   private boolean lockdownUploadProjects = false;
 
-  private static Comparator<Flow> FLOW_ID_COMPARATOR = new Comparator<Flow>() {
-    @Override
-    public int compare(Flow f1, Flow f2) {
-      return f1.getId().compareTo(f2.getId());
-    }
-  };
-
   @Override
-  public void init(ServletConfig config) throws ServletException {
+  public void init(final ServletConfig config) throws ServletException {
     super.init(config);
 
-    AzkabanWebServer server = (AzkabanWebServer) getApplication();
-    projectManager = server.getProjectManager();
-    executorManager = server.getExecutorManager();
-    scheduleManager = server.getScheduleManager();
-    userManager = server.getUserManager();
-    lockdownCreateProjects =
+    final AzkabanWebServer server = (AzkabanWebServer) getApplication();
+    this.projectManager = server.getProjectManager();
+    this.executorManager = server.getExecutorManager();
+    this.scheduleManager = server.getScheduleManager();
+    this.userManager = server.getUserManager();
+    this.lockdownCreateProjects =
         server.getServerProps().getBoolean(LOCKDOWN_CREATE_PROJECTS_KEY, false);
-    if (lockdownCreateProjects) {
+    if (this.lockdownCreateProjects) {
       logger.info("Creation of projects is locked down");
     }
 
-    lockdownUploadProjects =
+    this.lockdownUploadProjects =
         server.getServerProps().getBoolean(LOCKDOWN_UPLOAD_PROJECTS_KEY, false);
-    if (lockdownUploadProjects) {
+    if (this.lockdownUploadProjects) {
       logger.info("Uploading of projects is locked down");
     }
 
-    downloadBufferSize =
+    this.downloadBufferSize =
         server.getServerProps().getInt(PROJECT_DOWNLOAD_BUFFER_SIZE_IN_BYTES,
             8192);
 
-    logger.info("downloadBufferSize: " + downloadBufferSize);
+    logger.info("downloadBufferSize: " + this.downloadBufferSize);
   }
 
   @Override
-  protected void handleGet(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws ServletException, IOException {
+  protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws ServletException, IOException {
     if (hasParam(req, "project")) {
       if (hasParam(req, "ajax")) {
         handleAJAXAction(req, resp, session);
@@ -170,7 +165,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       handleReloadProjectWhitelist(req, resp, session);
     }
 
-    Page page =
+    final Page page =
         newPage(req, resp, session,
             "azkaban/webapp/servlet/velocity/projectpage.vm");
     page.add("errorMsg", "No project set.");
@@ -178,21 +173,21 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
   }
 
   @Override
-  protected void handleMultiformPost(HttpServletRequest req,
-      HttpServletResponse resp, Map<String, Object> params, Session session)
+  protected void handleMultiformPost(final HttpServletRequest req,
+      final HttpServletResponse resp, final Map<String, Object> params, final Session session)
       throws ServletException, IOException {
     // Looks like a duplicate, but this is a move away from the regular
     // multiform post + redirect
     // to a more ajax like command.
     if (params.containsKey("ajax")) {
-      String action = (String) params.get("ajax");
-      HashMap<String, String> ret = new HashMap<String, String>();
+      final String action = (String) params.get("ajax");
+      final HashMap<String, String> ret = new HashMap<>();
       if (action.equals("upload")) {
         ajaxHandleUpload(req, resp, ret, params, session);
       }
       this.writeJSON(resp, ret);
     } else if (params.containsKey("action")) {
-      String action = (String) params.get("action");
+      final String action = (String) params.get("action");
       if (action.equals("upload")) {
         handleUpload(req, resp, params, session);
       }
@@ -200,31 +195,31 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
   }
 
   @Override
-  protected void handlePost(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws ServletException, IOException {
+  protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws ServletException, IOException {
     if (hasParam(req, "action")) {
-      String action = getParam(req, "action");
+      final String action = getParam(req, "action");
       if (action.equals("create")) {
         handleCreate(req, resp, session);
       }
     }
   }
 
-  private void handleAJAXAction(HttpServletRequest req,
-      HttpServletResponse resp, Session session) throws ServletException,
+  private void handleAJAXAction(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) throws ServletException,
       IOException {
-    String projectName = getParam(req, "project");
-    User user = session.getUser();
+    final String projectName = getParam(req, "project");
+    final User user = session.getUser();
 
-    HashMap<String, Object> ret = new HashMap<>();
+    final HashMap<String, Object> ret = new HashMap<>();
     ret.put("project", projectName);
 
-    Project project = projectManager.getProject(projectName);
+    final Project project = this.projectManager.getProject(projectName);
     if (project == null) {
       ret.put("error", "Project " + projectName + " doesn't exist.");
     } else {
       ret.put("projectId", project.getId());
-      String ajaxName = getParam(req, "ajax");
+      final String ajaxName = getParam(req, "ajax");
       if (ajaxName.equals("getProjectId")) {
         // Do nothing, since projectId is added to all AJAX requests.
       } else if (ajaxName.equals("fetchProjectLogs")) {
@@ -307,8 +302,8 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     this.writeJSON(resp, ret);
   }
 
-  private boolean handleAjaxPermission(Project project, User user, Type type,
-      Map<String, Object> ret) {
+  private boolean handleAjaxPermission(final Project project, final User user, final Type type,
+      final Map<String, Object> ret) {
     if (hasPermission(project, user, type)) {
       return true;
     }
@@ -317,24 +312,24 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     return false;
   }
 
-  private void ajaxFetchProjectLogEvents(Project project,
-      HttpServletRequest req, HashMap<String, Object> ret) throws ServletException {
-    int num = this.getIntParam(req, "size", 1000);
-    int skip = this.getIntParam(req, "skip", 0);
+  private void ajaxFetchProjectLogEvents(final Project project,
+      final HttpServletRequest req, final HashMap<String, Object> ret) throws ServletException {
+    final int num = this.getIntParam(req, "size", 1000);
+    final int skip = this.getIntParam(req, "skip", 0);
 
-    List<ProjectLogEvent> logEvents;
+    final List<ProjectLogEvent> logEvents;
     try {
-      logEvents = projectManager.getProjectEventLogs(project, num, skip);
-    } catch (ProjectManagerException e) {
+      logEvents = this.projectManager.getProjectEventLogs(project, num, skip);
+    } catch (final ProjectManagerException e) {
       throw new ServletException(e);
     }
 
-    String[] columns = new String[] { "user", "time", "type", "message" };
+    final String[] columns = new String[]{"user", "time", "type", "message"};
     ret.put("columns", columns);
 
-    List<Object[]> eventData = new ArrayList<>();
-    for (ProjectLogEvent events : logEvents) {
-      Object[] entry = new Object[4];
+    final List<Object[]> eventData = new ArrayList<>();
+    for (final ProjectLogEvent events : logEvents) {
+      final Object[] entry = new Object[4];
       entry[0] = events.getUser();
       entry[1] = events.getTime();
       entry[2] = events.getType();
@@ -346,20 +341,20 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     ret.put("logData", eventData);
   }
 
-  private List<String> getFlowJobTypes(Flow flow) {
-    Set<String> jobTypeSet = new HashSet<String>();
-    for (Node node : flow.getNodes()) {
+  private List<String> getFlowJobTypes(final Flow flow) {
+    final Set<String> jobTypeSet = new HashSet<>();
+    for (final Node node : flow.getNodes()) {
       jobTypeSet.add(node.getType());
     }
-    List<String> jobTypes = new ArrayList<String>();
+    final List<String> jobTypes = new ArrayList<>();
     jobTypes.addAll(jobTypeSet);
     return jobTypes;
   }
 
-  private void ajaxFetchFlowDetails(Project project,
-      HashMap<String, Object> ret, HttpServletRequest req)
+  private void ajaxFetchFlowDetails(final Project project,
+      final HashMap<String, Object> ret, final HttpServletRequest req)
       throws ServletException {
-    String flowName = getParam(req, "flow");
+    final String flowName = getParam(req, "flow");
 
     Flow flow = null;
     try {
@@ -370,21 +365,21 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       }
 
       ret.put("jobTypes", getFlowJobTypes(flow));
-    } catch (AccessControlException e) {
+    } catch (final AccessControlException e) {
       ret.put("error", e.getMessage());
     }
   }
 
-  private void ajaxFetchLastSuccessfulFlowExecution(Project project,
-      HashMap<String, Object> ret, HttpServletRequest req)
+  private void ajaxFetchLastSuccessfulFlowExecution(final Project project,
+      final HashMap<String, Object> ret, final HttpServletRequest req)
       throws ServletException {
-    String flowId = getParam(req, "flow");
+    final String flowId = getParam(req, "flow");
     List<ExecutableFlow> exFlows = null;
     try {
       exFlows =
-          executorManager.getExecutableFlows(project.getId(), flowId, 0, 1,
+          this.executorManager.getExecutableFlows(project.getId(), flowId, 0, 1,
               Status.SUCCEEDED);
-    } catch (ExecutorManagerException e) {
+    } catch (final ExecutorManagerException e) {
       ret.put("error", "Error retrieving executable flows");
       return;
     }
@@ -400,20 +395,20 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     ret.put("execId", exFlows.get(0).getExecutionId());
   }
 
-  private void ajaxFetchFlowExecutions(Project project,
-      HashMap<String, Object> ret, HttpServletRequest req)
+  private void ajaxFetchFlowExecutions(final Project project,
+      final HashMap<String, Object> ret, final HttpServletRequest req)
       throws ServletException {
-    String flowId = getParam(req, "flow");
-    int from = Integer.valueOf(getParam(req, "start"));
-    int length = Integer.valueOf(getParam(req, "length"));
+    final String flowId = getParam(req, "flow");
+    final int from = Integer.valueOf(getParam(req, "start"));
+    final int length = Integer.valueOf(getParam(req, "length"));
 
-    ArrayList<ExecutableFlow> exFlows = new ArrayList<ExecutableFlow>();
+    final ArrayList<ExecutableFlow> exFlows = new ArrayList<>();
     int total = 0;
     try {
       total =
-          executorManager.getExecutableFlows(project.getId(), flowId, from,
+          this.executorManager.getExecutableFlows(project.getId(), flowId, from,
               length, exFlows);
-    } catch (ExecutorManagerException e) {
+    } catch (final ExecutorManagerException e) {
       ret.put("error", "Error retrieving executable flows");
     }
 
@@ -422,9 +417,9 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     ret.put("from", from);
     ret.put("length", length);
 
-    ArrayList<Object> history = new ArrayList<Object>();
-    for (ExecutableFlow flow : exFlows) {
-      HashMap<String, Object> flowInfo = new HashMap<String, Object>();
+    final ArrayList<Object> history = new ArrayList<>();
+    for (final ExecutableFlow flow : exFlows) {
+      final HashMap<String, Object> flowInfo = new HashMap<>();
       flowInfo.put("execId", flow.getExecutionId());
       flowInfo.put("flowId", flow.getFlowId());
       flowInfo.put("projectId", flow.getProjectId());
@@ -444,22 +439,16 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
    * Download project zip file from DB and send it back client.
    *
    * This method requires a project name and an optional project version.
-   *
-   * @param req
-   * @param resp
-   * @param session
-   * @throws ServletException
-   * @throws IOException
    */
-  private void handleDownloadProject(HttpServletRequest req,
-      HttpServletResponse resp, Session session) throws ServletException,
+  private void handleDownloadProject(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) throws ServletException,
       IOException {
 
-    User user = session.getUser();
-    String projectName = getParam(req, "project");
+    final User user = session.getUser();
+    final String projectName = getParam(req, "project");
     logger.info(user.getUserId() + " is downloading project: " + projectName);
 
-    Project project = projectManager.getProject(projectName);
+    final Project project = this.projectManager.getProject(projectName);
     if (project == null) {
       this.setErrorMessageInCookie(resp, "Project " + projectName
           + " doesn't exist.");
@@ -477,15 +466,15 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     OutputStream outStream = null;
     try {
       projectFileHandler =
-          projectManager.getProjectFileHandler(project, version);
+          this.projectManager.getProjectFileHandler(project, version);
       if (projectFileHandler == null) {
         this.setErrorMessageInCookie(resp, "Project " + projectName
             + " with version " + version + " doesn't exist");
         resp.sendRedirect(req.getContextPath());
         return;
       }
-      File projectZipFile = projectFileHandler.getLocalFile();
-      String logStr =
+      final File projectZipFile = projectFileHandler.getLocalFile();
+      final String logStr =
           String.format(
               "downloading project zip file for project \"%s\" at \"%s\""
                   + " size: %d type: %s  fileName: \"%s\"",
@@ -500,8 +489,8 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
 
       resp.setContentType(APPLICATION_ZIP_MIME_TYPE);
 
-      String headerKey = "Content-Disposition";
-      String headerValue =
+      final String headerKey = "Content-Disposition";
+      final String headerValue =
           String.format("attachment; filename=\"%s\"",
               projectFileHandler.getFileName());
       resp.setHeader(headerKey, headerValue);
@@ -512,14 +501,14 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
 
       outStream = resp.getOutputStream();
 
-      byte[] buffer = new byte[downloadBufferSize];
+      final byte[] buffer = new byte[this.downloadBufferSize];
       int bytesRead = -1;
 
       while ((bytesRead = inStream.read(buffer)) != -1) {
         outStream.write(buffer, 0, bytesRead);
       }
 
-    } catch (Throwable e) {
+    } catch (final Throwable e) {
       logger.error(
           "Encountered error while downloading project zip file for project: "
               + projectName + " by user: " + user.getUserId(), e);
@@ -539,27 +528,27 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
    * validate readiness of a project and user permission and use projectManager
    * to purge the project if things looks good
    **/
-  private void handlePurgeProject(HttpServletRequest req,
-      HttpServletResponse resp, Session session) throws ServletException,
+  private void handlePurgeProject(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) throws ServletException,
       IOException {
-    User user = session.getUser();
-    HashMap<String, Object> ret = new HashMap<String, Object>();
+    final User user = session.getUser();
+    final HashMap<String, Object> ret = new HashMap<>();
     boolean isOperationSuccessful = true;
 
     try {
       Project project = null;
-      String projectParam = getParam(req, "project");
+      final String projectParam = getParam(req, "project");
 
       if (StringUtils.isNumeric(projectParam)) {
-        project = projectManager.getProject(Integer.parseInt(projectParam)); // get
-                                                                             // project
-                                                                             // by
-                                                                             // Id
+        project = this.projectManager.getProject(Integer.parseInt(projectParam)); // get
+        // project
+        // by
+        // Id
       } else {
-        project = projectManager.getProject(projectParam); // get project by
-                                                           // name (name cannot
-                                                           // start
-                                                           // from ints)
+        project = this.projectManager.getProject(projectParam); // get project by
+        // name (name cannot
+        // start
+        // from ints)
       }
 
       // invalid project
@@ -570,7 +559,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
 
       // project is already deleted
       if (isOperationSuccessful
-          && projectManager.isActiveProject(project.getId())) {
+          && this.projectManager.isActiveProject(project.getId())) {
         ret.put("error", "Project " + project.getName()
             + " should be deleted before purging");
         isOperationSuccessful = false;
@@ -584,9 +573,9 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       }
 
       if (isOperationSuccessful) {
-        projectManager.purgeProject(project, user);
+        this.projectManager.purgeProject(project, user);
       }
-    } catch (Exception e) {
+    } catch (final Exception e) {
       ret.put("error", e.getMessage());
       isOperationSuccessful = false;
     }
@@ -595,13 +584,13 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     this.writeJSON(resp, ret);
   }
 
-  private void handleRemoveProject(HttpServletRequest req,
-      HttpServletResponse resp, Session session) throws ServletException,
+  private void handleRemoveProject(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) throws ServletException,
       IOException {
-    User user = session.getUser();
-    String projectName = getParam(req, "project");
+    final User user = session.getUser();
+    final String projectName = getParam(req, "project");
 
-    Project project = projectManager.getProject(projectName);
+    final Project project = this.projectManager.getProject(projectName);
     if (project == null) {
       this.setErrorMessageInCookie(resp, "Project " + projectName
           + " doesn't exist.");
@@ -619,14 +608,14 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     // Check if scheduled
     Schedule sflow = null;
     try {
-      for (Schedule flow : scheduleManager.getSchedules()) {
+      for (final Schedule flow : this.scheduleManager.getSchedules()) {
 
         if (flow.getProjectId() == project.getId()) {
           sflow = flow;
           break;
         }
       }
-    } catch (ScheduleManagerException e) {
+    } catch (final ScheduleManagerException e) {
       throw new ServletException(e);
     }
 
@@ -640,7 +629,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
 
     // Check if executing
     ExecutableFlow exflow = null;
-    for (ExecutableFlow flow : executorManager.getRunningFlows()) {
+    for (final ExecutableFlow flow : this.executorManager.getRunningFlows()) {
       if (flow.getProjectId() == project.getId()) {
         exflow = flow;
         break;
@@ -654,8 +643,8 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     }
 
     try {
-      projectManager.removeProject(project, user);
-    } catch (ProjectManagerException e) {
+      this.projectManager.removeProject(project, user);
+    } catch (final ProjectManagerException e) {
       this.setErrorMessageInCookie(resp, e.getMessage());
       resp.sendRedirect(req.getRequestURI() + "?project=" + projectName);
       return;
@@ -666,49 +655,49 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     resp.sendRedirect(req.getContextPath());
   }
 
-  private void ajaxChangeDescription(Project project,
-      HashMap<String, Object> ret, HttpServletRequest req, User user)
+  private void ajaxChangeDescription(final Project project,
+      final HashMap<String, Object> ret, final HttpServletRequest req, final User user)
       throws ServletException {
-    String description = getParam(req, "description");
+    final String description = getParam(req, "description");
     project.setDescription(description);
 
     try {
-      projectManager.updateProjectDescription(project, description, user);
-    } catch (ProjectManagerException e) {
+      this.projectManager.updateProjectDescription(project, description, user);
+    } catch (final ProjectManagerException e) {
       ret.put("error", e.getMessage());
     }
   }
 
-  private void ajaxFetchJobInfo(Project project, HashMap<String, Object> ret,
-      HttpServletRequest req) throws ServletException {
-    String flowName = getParam(req, "flowName");
-    String jobName = getParam(req, "jobName");
+  private void ajaxFetchJobInfo(final Project project, final HashMap<String, Object> ret,
+      final HttpServletRequest req) throws ServletException {
+    final String flowName = getParam(req, "flowName");
+    final String jobName = getParam(req, "jobName");
 
-    Flow flow = project.getFlow(flowName);
+    final Flow flow = project.getFlow(flowName);
     if (flow == null) {
       ret.put("error",
           "Flow " + flowName + " not found in project " + project.getName());
       return;
     }
 
-    Node node = flow.getNode(jobName);
+    final Node node = flow.getNode(jobName);
     if (node == null) {
       ret.put("error", "Job " + jobName + " not found in flow " + flowName);
       return;
     }
 
-    Props prop;
+    final Props prop;
     try {
-      prop = projectManager.getProperties(project, node.getJobSource());
-    } catch (ProjectManagerException e) {
+      prop = this.projectManager.getProperties(project, node.getJobSource());
+    } catch (final ProjectManagerException e) {
       ret.put("error", "Failed to retrieve job properties!");
       return;
     }
 
     Props overrideProp;
     try {
-      overrideProp = projectManager.getJobOverrideProperty(project, jobName);
-    } catch (ProjectManagerException e) {
+      overrideProp = this.projectManager.getJobOverrideProperty(project, jobName);
+    } catch (final ProjectManagerException e) {
       ret.put("error", "Failed to retrieve job override properties!");
       return;
     }
@@ -720,55 +709,54 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       overrideProp = new Props(prop);
     }
 
-    Map<String, String> generalParams = new HashMap<String, String>();
-    Map<String, String> overrideParams = new HashMap<String, String>();
-    for (String ps : prop.getKeySet()) {
+    final Map<String, String> generalParams = new HashMap<>();
+    final Map<String, String> overrideParams = new HashMap<>();
+    for (final String ps : prop.getKeySet()) {
       generalParams.put(ps, prop.getString(ps));
     }
-    for (String ops : overrideProp.getKeySet()) {
+    for (final String ops : overrideProp.getKeySet()) {
       overrideParams.put(ops, overrideProp.getString(ops));
     }
     ret.put("generalParams", generalParams);
     ret.put("overrideParams", overrideParams);
   }
 
-  private void ajaxSetJobOverrideProperty(Project project,
-      HashMap<String, Object> ret, HttpServletRequest req, User user)
+  private void ajaxSetJobOverrideProperty(final Project project,
+      final HashMap<String, Object> ret, final HttpServletRequest req, final User user)
       throws ServletException {
-    String flowName = getParam(req, "flowName");
-    String jobName = getParam(req, "jobName");
+    final String flowName = getParam(req, "flowName");
+    final String jobName = getParam(req, "jobName");
 
-    Flow flow = project.getFlow(flowName);
+    final Flow flow = project.getFlow(flowName);
     if (flow == null) {
       ret.put("error",
           "Flow " + flowName + " not found in project " + project.getName());
       return;
     }
 
-    Node node = flow.getNode(jobName);
+    final Node node = flow.getNode(jobName);
     if (node == null) {
       ret.put("error", "Job " + jobName + " not found in flow " + flowName);
       return;
     }
 
-    Map<String, String> jobParamGroup = this.getParamGroup(req, "jobOverride");
-    @SuppressWarnings("unchecked")
-    Props overrideParams = new Props(null, jobParamGroup);
+    final Map<String, String> jobParamGroup = this.getParamGroup(req, "jobOverride");
+    final Props overrideParams = new Props(null, jobParamGroup);
     try {
-      projectManager.setJobOverrideProperty(project, overrideParams, jobName, user);
-    } catch (ProjectManagerException e) {
+      this.projectManager.setJobOverrideProperty(project, overrideParams, jobName, user);
+    } catch (final ProjectManagerException e) {
       ret.put("error", "Failed to upload job override property");
     }
 
   }
 
-  private void ajaxFetchProjectFlows(Project project,
-      HashMap<String, Object> ret, HttpServletRequest req)
+  private void ajaxFetchProjectFlows(final Project project,
+      final HashMap<String, Object> ret, final HttpServletRequest req)
       throws ServletException {
-    ArrayList<Map<String, Object>> flowList =
-        new ArrayList<Map<String, Object>>();
-    for (Flow flow : project.getFlows()) {
-      HashMap<String, Object> flowObj = new HashMap<String, Object>();
+    final ArrayList<Map<String, Object>> flowList =
+        new ArrayList<>();
+    for (final Flow flow : project.getFlows()) {
+      final HashMap<String, Object> flowObj = new HashMap<>();
       flowObj.put("flowId", flow.getId());
       flowList.add(flowObj);
     }
@@ -776,21 +764,21 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     ret.put("flows", flowList);
   }
 
-  private void ajaxFetchFlowGraph(Project project, HashMap<String, Object> ret,
-      HttpServletRequest req) throws ServletException {
-    String flowId = getParam(req, "flow");
+  private void ajaxFetchFlowGraph(final Project project, final HashMap<String, Object> ret,
+      final HttpServletRequest req) throws ServletException {
+    final String flowId = getParam(req, "flow");
 
     fillFlowInfo(project, flowId, ret);
   }
 
-  private void fillFlowInfo(Project project, String flowId,
-      HashMap<String, Object> ret) {
-    Flow flow = project.getFlow(flowId);
+  private void fillFlowInfo(final Project project, final String flowId,
+      final HashMap<String, Object> ret) {
+    final Flow flow = project.getFlow(flowId);
 
-    ArrayList<Map<String, Object>> nodeList =
-        new ArrayList<Map<String, Object>>();
-    for (Node node : flow.getNodes()) {
-      HashMap<String, Object> nodeObj = new HashMap<String, Object>();
+    final ArrayList<Map<String, Object>> nodeList =
+        new ArrayList<>();
+    for (final Node node : flow.getNodes()) {
+      final HashMap<String, Object> nodeObj = new HashMap<>();
       nodeObj.put("id", node.getId());
       nodeObj.put("type", node.getType());
       if (node.getEmbeddedFlowId() != null) {
@@ -799,10 +787,10 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       }
 
       nodeList.add(nodeObj);
-      Set<Edge> inEdges = flow.getInEdges(node.getId());
+      final Set<Edge> inEdges = flow.getInEdges(node.getId());
       if (inEdges != null && !inEdges.isEmpty()) {
-        ArrayList<String> inEdgesList = new ArrayList<String>();
-        for (Edge edge : inEdges) {
+        final ArrayList<String> inEdgesList = new ArrayList<>();
+        for (final Edge edge : inEdges) {
           inEdgesList.add(edge.getSourceId());
         }
         Collections.sort(inEdgesList);
@@ -812,8 +800,8 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
 
     Collections.sort(nodeList, new Comparator<Map<String, Object>>() {
       @Override
-      public int compare(Map<String, Object> o1, Map<String, Object> o2) {
-        String id = (String) o1.get("id");
+      public int compare(final Map<String, Object> o1, final Map<String, Object> o2) {
+        final String id = (String) o1.get("id");
         return id.compareTo((String) o2.get("id"));
       }
     });
@@ -822,14 +810,14 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     ret.put("nodes", nodeList);
   }
 
-  private void ajaxFetchFlowNodeData(Project project,
-      HashMap<String, Object> ret, HttpServletRequest req)
+  private void ajaxFetchFlowNodeData(final Project project,
+      final HashMap<String, Object> ret, final HttpServletRequest req)
       throws ServletException {
-    String flowId = getParam(req, "flow");
-    Flow flow = project.getFlow(flowId);
+    final String flowId = getParam(req, "flow");
+    final Flow flow = project.getFlow(flowId);
 
-    String nodeId = getParam(req, "node");
-    Node node = flow.getNode(nodeId);
+    final String nodeId = getParam(req, "node");
+    final Node node = flow.getNode(nodeId);
 
     if (node == null) {
       ret.put("error", "Job " + nodeId + " doesn't exist.");
@@ -840,10 +828,10 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     ret.put("flow", flowId);
     ret.put("type", node.getType());
 
-    Props props;
+    final Props props;
     try {
-      props = projectManager.getProperties(project, node.getJobSource());
-    } catch (ProjectManagerException e) {
+      props = this.projectManager.getProperties(project, node.getJobSource());
+    } catch (final ProjectManagerException e) {
       ret.put("error", "Failed to upload job override property for " + nodeId);
       return;
     }
@@ -853,7 +841,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       return;
     }
 
-    Map<String, String> properties = PropsUtils.toStringMap(props, true);
+    final Map<String, String> properties = PropsUtils.toStringMap(props, true);
     ret.put("props", properties);
 
     if (node.getType().equals("flow")) {
@@ -863,31 +851,31 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     }
   }
 
-  private void ajaxFetchFlow(Project project, HashMap<String, Object> ret,
-      HttpServletRequest req) throws ServletException {
-    String flowId = getParam(req, "flow");
-    Flow flow = project.getFlow(flowId);
+  private void ajaxFetchFlow(final Project project, final HashMap<String, Object> ret,
+      final HttpServletRequest req) throws ServletException {
+    final String flowId = getParam(req, "flow");
+    final Flow flow = project.getFlow(flowId);
 
-    ArrayList<Node> flowNodes = new ArrayList<Node>(flow.getNodes());
+    final ArrayList<Node> flowNodes = new ArrayList<>(flow.getNodes());
     Collections.sort(flowNodes, NODE_LEVEL_COMPARATOR);
 
-    ArrayList<Object> nodeList = new ArrayList<Object>();
-    for (Node node : flowNodes) {
-      HashMap<String, Object> nodeObj = new HashMap<String, Object>();
+    final ArrayList<Object> nodeList = new ArrayList<>();
+    for (final Node node : flowNodes) {
+      final HashMap<String, Object> nodeObj = new HashMap<>();
       nodeObj.put("id", node.getId());
 
-      ArrayList<String> dependencies = new ArrayList<String>();
+      final ArrayList<String> dependencies = new ArrayList<>();
       Collection<Edge> collection = flow.getInEdges(node.getId());
       if (collection != null) {
-        for (Edge edge : collection) {
+        for (final Edge edge : collection) {
           dependencies.add(edge.getSourceId());
         }
       }
 
-      ArrayList<String> dependents = new ArrayList<String>();
+      final ArrayList<String> dependents = new ArrayList<>();
       collection = flow.getOutEdges(node.getId());
       if (collection != null) {
-        for (Edge edge : collection) {
+        for (final Edge edge : collection) {
           dependents.add(edge.getTargetId());
         }
       }
@@ -902,15 +890,15 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     ret.put("nodes", nodeList);
   }
 
-  private void ajaxAddProxyUser(Project project, HashMap<String, Object> ret,
-      HttpServletRequest req, User user) throws ServletException {
-    String name = getParam(req, "name");
+  private void ajaxAddProxyUser(final Project project, final HashMap<String, Object> ret,
+      final HttpServletRequest req, final User user) throws ServletException {
+    final String name = getParam(req, "name");
 
     logger.info("Adding proxy user " + name + " by " + user.getUserId());
-    if (userManager.validateProxyUser(name, user)) {
+    if (this.userManager.validateProxyUser(name, user)) {
       try {
-        projectManager.addProjectProxyUser(project, name, user);
-      } catch (ProjectManagerException e) {
+        this.projectManager.addProjectProxyUser(project, name, user);
+      } catch (final ProjectManagerException e) {
         ret.put("error", e.getMessage());
       }
     } else {
@@ -920,31 +908,31 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     }
   }
 
-  private void ajaxRemoveProxyUser(Project project,
-      HashMap<String, Object> ret, HttpServletRequest req, User user)
+  private void ajaxRemoveProxyUser(final Project project,
+      final HashMap<String, Object> ret, final HttpServletRequest req, final User user)
       throws ServletException {
-    String name = getParam(req, "name");
+    final String name = getParam(req, "name");
 
     logger.info("Removing proxy user " + name + " by " + user.getUserId());
 
     try {
-      projectManager.removeProjectProxyUser(project, name, user);
-    } catch (ProjectManagerException e) {
+      this.projectManager.removeProjectProxyUser(project, name, user);
+    } catch (final ProjectManagerException e) {
       ret.put("error", e.getMessage());
     }
   }
 
-  private void ajaxAddPermission(Project project, HashMap<String, Object> ret,
-      HttpServletRequest req, User user) throws ServletException {
-    String name = getParam(req, "name");
-    boolean group = Boolean.parseBoolean(getParam(req, "group"));
+  private void ajaxAddPermission(final Project project, final HashMap<String, Object> ret,
+      final HttpServletRequest req, final User user) throws ServletException {
+    final String name = getParam(req, "name");
+    final boolean group = Boolean.parseBoolean(getParam(req, "group"));
 
     if (group) {
       if (project.getGroupPermission(name) != null) {
         ret.put("error", "Group permission already exists.");
         return;
       }
-      if (!userManager.validateGroup(name)) {
+      if (!this.userManager.validateGroup(name)) {
         ret.put("error", "Group is invalid.");
         return;
       }
@@ -953,21 +941,21 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
         ret.put("error", "User permission already exists.");
         return;
       }
-      if (!userManager.validateUser(name)) {
+      if (!this.userManager.validateUser(name)) {
         ret.put("error", "User is invalid.");
         return;
       }
     }
 
-    boolean admin = Boolean.parseBoolean(getParam(req, "permissions[admin]"));
-    boolean read = Boolean.parseBoolean(getParam(req, "permissions[read]"));
-    boolean write = Boolean.parseBoolean(getParam(req, "permissions[write]"));
-    boolean execute =
+    final boolean admin = Boolean.parseBoolean(getParam(req, "permissions[admin]"));
+    final boolean read = Boolean.parseBoolean(getParam(req, "permissions[read]"));
+    final boolean write = Boolean.parseBoolean(getParam(req, "permissions[write]"));
+    final boolean execute =
         Boolean.parseBoolean(getParam(req, "permissions[execute]"));
-    boolean schedule =
+    final boolean schedule =
         Boolean.parseBoolean(getParam(req, "permissions[schedule]"));
 
-    Permission perm = new Permission();
+    final Permission perm = new Permission();
     if (admin) {
       perm.setPermission(Type.ADMIN, true);
     } else {
@@ -978,27 +966,27 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     }
 
     try {
-      projectManager.updateProjectPermission(project, name, perm, group, user);
-    } catch (ProjectManagerException e) {
+      this.projectManager.updateProjectPermission(project, name, perm, group, user);
+    } catch (final ProjectManagerException e) {
       ret.put("error", e.getMessage());
     }
   }
 
-  private void ajaxChangePermissions(Project project,
-      HashMap<String, Object> ret, HttpServletRequest req, User user)
+  private void ajaxChangePermissions(final Project project,
+      final HashMap<String, Object> ret, final HttpServletRequest req, final User user)
       throws ServletException {
-    boolean admin = Boolean.parseBoolean(getParam(req, "permissions[admin]"));
-    boolean read = Boolean.parseBoolean(getParam(req, "permissions[read]"));
-    boolean write = Boolean.parseBoolean(getParam(req, "permissions[write]"));
-    boolean execute =
+    final boolean admin = Boolean.parseBoolean(getParam(req, "permissions[admin]"));
+    final boolean read = Boolean.parseBoolean(getParam(req, "permissions[read]"));
+    final boolean write = Boolean.parseBoolean(getParam(req, "permissions[write]"));
+    final boolean execute =
         Boolean.parseBoolean(getParam(req, "permissions[execute]"));
-    boolean schedule =
+    final boolean schedule =
         Boolean.parseBoolean(getParam(req, "permissions[schedule]"));
 
-    boolean group = Boolean.parseBoolean(getParam(req, "group"));
+    final boolean group = Boolean.parseBoolean(getParam(req, "group"));
 
-    String name = getParam(req, "name");
-    Permission perm;
+    final String name = getParam(req, "name");
+    final Permission perm;
     if (group) {
       perm = project.getGroupPermission(name);
     } else {
@@ -1026,15 +1014,15 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       }
 
       try {
-        projectManager
+        this.projectManager
             .updateProjectPermission(project, name, perm, group, user);
-      } catch (ProjectManagerException e) {
+      } catch (final ProjectManagerException e) {
         ret.put("error", e.getMessage());
       }
     } else {
       try {
-        projectManager.removeProjectPermission(project, name, group, user);
-      } catch (ProjectManagerException e) {
+        this.projectManager.removeProjectPermission(project, name, group, user);
+      } catch (final ProjectManagerException e) {
         ret.put("error", e.getMessage());
       }
     }
@@ -1043,16 +1031,13 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
   /**
    * this only returns user permissions, but not group permissions and proxy
    * users
-   *
-   * @param project
-   * @param ret
    */
-  private void ajaxGetPermissions(Project project, HashMap<String, Object> ret) {
-    ArrayList<HashMap<String, Object>> permissions =
-        new ArrayList<HashMap<String, Object>>();
-    for (Pair<String, Permission> perm : project.getUserPermissions()) {
-      HashMap<String, Object> permObj = new HashMap<String, Object>();
-      String userId = perm.getFirst();
+  private void ajaxGetPermissions(final Project project, final HashMap<String, Object> ret) {
+    final ArrayList<HashMap<String, Object>> permissions =
+        new ArrayList<>();
+    for (final Pair<String, Permission> perm : project.getUserPermissions()) {
+      final HashMap<String, Object> permObj = new HashMap<>();
+      final String userId = perm.getFirst();
       permObj.put("username", userId);
       permObj.put("permission", perm.getSecond().toStringArray());
 
@@ -1062,13 +1047,13 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     ret.put("permissions", permissions);
   }
 
-  private void ajaxGetGroupPermissions(Project project,
-      HashMap<String, Object> ret) {
-    ArrayList<HashMap<String, Object>> permissions =
-        new ArrayList<HashMap<String, Object>>();
-    for (Pair<String, Permission> perm : project.getGroupPermissions()) {
-      HashMap<String, Object> permObj = new HashMap<String, Object>();
-      String userId = perm.getFirst();
+  private void ajaxGetGroupPermissions(final Project project,
+      final HashMap<String, Object> ret) {
+    final ArrayList<HashMap<String, Object>> permissions =
+        new ArrayList<>();
+    for (final Pair<String, Permission> perm : project.getGroupPermissions()) {
+      final HashMap<String, Object> permObj = new HashMap<>();
+      final String userId = perm.getFirst();
       permObj.put("username", userId);
       permObj.put("permission", perm.getSecond().toStringArray());
 
@@ -1078,23 +1063,23 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     ret.put("permissions", permissions);
   }
 
-  private void ajaxGetProxyUsers(Project project, HashMap<String, Object> ret) {
-    String[] proxyUsers = project.getProxyUsers().toArray(new String[0]);
+  private void ajaxGetProxyUsers(final Project project, final HashMap<String, Object> ret) {
+    final String[] proxyUsers = project.getProxyUsers().toArray(new String[0]);
     ret.put("proxyUsers", proxyUsers);
   }
 
-  private void handleProjectLogsPage(HttpServletRequest req,
-      HttpServletResponse resp, Session session) throws ServletException,
+  private void handleProjectLogsPage(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) throws ServletException,
       IOException {
-    Page page =
+    final Page page =
         newPage(req, resp, session,
             "azkaban/webapp/servlet/velocity/projectlogpage.vm");
-    String projectName = getParam(req, "project");
+    final String projectName = getParam(req, "project");
 
-    User user = session.getUser();
+    final User user = session.getUser();
     Project project = null;
     try {
-      project = projectManager.getProject(projectName);
+      project = this.projectManager.getProject(projectName);
       if (project == null) {
         page.add("errorMsg", "Project " + projectName + " doesn't exist.");
       } else {
@@ -1106,10 +1091,10 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
         page.add("project", project);
         page.add("admins", Utils.flattenToString(
             project.getUsersWithPermission(Type.ADMIN), ","));
-        Permission perm = this.getPermissionObject(project, user, Type.ADMIN);
+        final Permission perm = this.getPermissionObject(project, user, Type.ADMIN);
         page.add("userpermission", perm);
 
-        boolean adminPerm = perm.isPermissionSet(Type.ADMIN);
+        final boolean adminPerm = perm.isPermissionSet(Type.ADMIN);
         if (adminPerm) {
           page.add("admin", true);
         }
@@ -1121,31 +1106,31 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
           page.add("exec", false);
         }
       }
-    } catch (AccessControlException e) {
+    } catch (final AccessControlException e) {
       page.add("errorMsg", e.getMessage());
     }
 
-    int numBytes = 1024;
+    final int numBytes = 1024;
 
     // Really sucks if we do a lot of these because it'll eat up memory fast.
     // But it's expected that this won't be a heavily used thing. If it is,
     // then we'll revisit it to make it more stream friendly.
-    StringBuffer buffer = new StringBuffer(numBytes);
+    final StringBuffer buffer = new StringBuffer(numBytes);
     page.add("log", buffer.toString());
 
     page.render();
   }
 
-  private void handleJobHistoryPage(HttpServletRequest req,
-      HttpServletResponse resp, Session session) throws ServletException,
+  private void handleJobHistoryPage(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) throws ServletException,
       IOException {
-    Page page =
+    final Page page =
         newPage(req, resp, session,
             "azkaban/webapp/servlet/velocity/jobhistorypage.vm");
-    String projectName = getParam(req, "project");
-    User user = session.getUser();
+    final String projectName = getParam(req, "project");
+    final User user = session.getUser();
 
-    Project project = projectManager.getProject(projectName);
+    final Project project = this.projectManager.getProject(projectName);
     if (project == null) {
       page.add("errorMsg", "Project " + projectName + " doesn't exist.");
       page.render();
@@ -1157,23 +1142,23 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       return;
     }
 
-    String jobId = getParam(req, "job");
-    int pageNum = getIntParam(req, "page", 1);
-    int pageSize = getIntParam(req, "size", 25);
+    final String jobId = getParam(req, "job");
+    final int pageNum = getIntParam(req, "page", 1);
+    final int pageSize = getIntParam(req, "size", 25);
 
     page.add("projectId", project.getId());
     page.add("projectName", project.getName());
     page.add("jobid", jobId);
     page.add("page", pageNum);
 
-    int skipPage = (pageNum - 1) * pageSize;
+    final int skipPage = (pageNum - 1) * pageSize;
 
     int numResults = 0;
     try {
-      numResults = executorManager.getNumberOfJobExecutions(project, jobId);
-      int maxPage = (numResults / pageSize) + 1;
+      numResults = this.executorManager.getNumberOfJobExecutions(project, jobId);
+      final int maxPage = (numResults / pageSize) + 1;
       List<ExecutableJobInfo> jobInfo =
-          executorManager.getExecutableJobs(project, jobId, skipPage, pageSize);
+          this.executorManager.getExecutableJobs(project, jobId, skipPage, pageSize);
 
       if (jobInfo == null || jobInfo.isEmpty()) {
         jobInfo = null;
@@ -1189,16 +1174,16 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
               pageNum + 1, maxPage)));
 
       if (jobInfo != null) {
-        ArrayList<Object> dataSeries = new ArrayList<Object>();
-        for (ExecutableJobInfo info : jobInfo) {
-          Map<String, Object> map = info.toObject();
+        final ArrayList<Object> dataSeries = new ArrayList<>();
+        for (final ExecutableJobInfo info : jobInfo) {
+          final Map<String, Object> map = info.toObject();
           dataSeries.add(map);
         }
         page.add("dataSeries", JSONUtils.toJSON(dataSeries));
       } else {
         page.add("dataSeries", "[]");
       }
-    } catch (ExecutorManagerException e) {
+    } catch (final ExecutorManagerException e) {
       page.add("errorMsg", e.getMessage());
     }
 
@@ -1207,52 +1192,52 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     if (pageNum > 3) {
       pageStartValue = pageNum - 2;
     }
-    int maxPage = (numResults / pageSize) + 1;
+    final int maxPage = (numResults / pageSize) + 1;
 
     page.add(
         "page1",
         new PageSelection(String.valueOf(pageStartValue), pageSize,
             pageStartValue > maxPage, pageStartValue == pageNum, Math.min(
-                pageStartValue, maxPage)));
+            pageStartValue, maxPage)));
     pageStartValue++;
     page.add(
         "page2",
         new PageSelection(String.valueOf(pageStartValue), pageSize,
             pageStartValue > maxPage, pageStartValue == pageNum, Math.min(
-                pageStartValue, maxPage)));
+            pageStartValue, maxPage)));
     pageStartValue++;
     page.add(
         "page3",
         new PageSelection(String.valueOf(pageStartValue), pageSize,
             pageStartValue > maxPage, pageStartValue == pageNum, Math.min(
-                pageStartValue, maxPage)));
+            pageStartValue, maxPage)));
     pageStartValue++;
     page.add(
         "page4",
         new PageSelection(String.valueOf(pageStartValue), pageSize,
             pageStartValue > maxPage, pageStartValue == pageNum, Math.min(
-                pageStartValue, maxPage)));
+            pageStartValue, maxPage)));
     pageStartValue++;
     page.add(
         "page5",
         new PageSelection(String.valueOf(pageStartValue), pageSize,
             pageStartValue > maxPage, pageStartValue == pageNum, Math.min(
-                pageStartValue, maxPage)));
+            pageStartValue, maxPage)));
 
     page.render();
   }
 
-  private void handlePermissionPage(HttpServletRequest req,
-      HttpServletResponse resp, Session session) throws ServletException {
-    Page page =
+  private void handlePermissionPage(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) throws ServletException {
+    final Page page =
         newPage(req, resp, session,
             "azkaban/webapp/servlet/velocity/permissionspage.vm");
-    String projectName = getParam(req, "project");
-    User user = session.getUser();
+    final String projectName = getParam(req, "project");
+    final User user = session.getUser();
 
     Project project = null;
     try {
-      project = projectManager.getProject(projectName);
+      project = this.projectManager.getProject(projectName);
       if (project == null) {
         page.add("errorMsg", "Project " + projectName + " not found.");
       } else {
@@ -1265,26 +1250,26 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
         page.add("username", user.getUserId());
         page.add("admins", Utils.flattenToString(
             project.getUsersWithPermission(Type.ADMIN), ","));
-        Permission perm = this.getPermissionObject(project, user, Type.ADMIN);
+        final Permission perm = this.getPermissionObject(project, user, Type.ADMIN);
         page.add("userpermission", perm);
 
         if (perm.isPermissionSet(Type.ADMIN)) {
           page.add("admin", true);
         }
 
-        List<Pair<String, Permission>> userPermission =
+        final List<Pair<String, Permission>> userPermission =
             project.getUserPermissions();
         if (userPermission != null && !userPermission.isEmpty()) {
           page.add("permissions", userPermission);
         }
 
-        List<Pair<String, Permission>> groupPermission =
+        final List<Pair<String, Permission>> groupPermission =
             project.getGroupPermissions();
         if (groupPermission != null && !groupPermission.isEmpty()) {
           page.add("groupPermissions", groupPermission);
         }
 
-        Set<String> proxyUsers = project.getProxyUsers();
+        final Set<String> proxyUsers = project.getProxyUsers();
         if (proxyUsers != null && !proxyUsers.isEmpty()) {
           page.add("proxyUsers", proxyUsers);
         }
@@ -1293,27 +1278,27 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
           page.add("isAdmin", true);
         }
       }
-    } catch (AccessControlException e) {
+    } catch (final AccessControlException e) {
       page.add("errorMsg", e.getMessage());
     }
 
     page.render();
   }
 
-  private void handleJobPage(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws ServletException {
-    Page page =
+  private void handleJobPage(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws ServletException {
+    final Page page =
         newPage(req, resp, session,
             "azkaban/webapp/servlet/velocity/jobpage.vm");
-    String projectName = getParam(req, "project");
-    String flowName = getParam(req, "flow");
-    String jobName = getParam(req, "job");
+    final String projectName = getParam(req, "project");
+    final String flowName = getParam(req, "flow");
+    final String jobName = getParam(req, "job");
 
-    User user = session.getUser();
+    final User user = session.getUser();
     Project project = null;
     Flow flow = null;
     try {
-      project = projectManager.getProject(projectName);
+      project = this.projectManager.getProject(projectName);
       if (project == null) {
         page.add("errorMsg", "Project " + projectName + " not found.");
         page.render();
@@ -1333,30 +1318,30 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       }
 
       page.add("flowid", flow.getId());
-      Node node = flow.getNode(jobName);
+      final Node node = flow.getNode(jobName);
       if (node == null) {
         page.add("errorMsg", "Job " + jobName + " not found.");
         page.render();
         return;
       }
 
-      Props prop = projectManager.getProperties(project, node.getJobSource());
+      final Props prop = this.projectManager.getProperties(project, node.getJobSource());
       Props overrideProp =
-          projectManager.getJobOverrideProperty(project, jobName);
+          this.projectManager.getJobOverrideProperty(project, jobName);
       if (overrideProp == null) {
         overrideProp = new Props();
       }
-      Props comboProp = new Props(prop);
-      for (String key : overrideProp.getKeySet()) {
+      final Props comboProp = new Props(prop);
+      for (final String key : overrideProp.getKeySet()) {
         comboProp.put(key, overrideProp.get(key));
       }
       page.add("jobid", node.getId());
       page.add("jobtype", node.getType());
 
-      ArrayList<String> dependencies = new ArrayList<String>();
-      Set<Edge> inEdges = flow.getInEdges(node.getId());
+      final ArrayList<String> dependencies = new ArrayList<>();
+      final Set<Edge> inEdges = flow.getInEdges(node.getId());
       if (inEdges != null) {
-        for (Edge dependency : inEdges) {
+        for (final Edge dependency : inEdges) {
           dependencies.add(dependency.getSourceId());
         }
       }
@@ -1364,10 +1349,10 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
         page.add("dependencies", dependencies);
       }
 
-      ArrayList<String> dependents = new ArrayList<String>();
-      Set<Edge> outEdges = flow.getOutEdges(node.getId());
+      final ArrayList<String> dependents = new ArrayList<>();
+      final Set<Edge> outEdges = flow.getOutEdges(node.getId());
       if (outEdges != null) {
-        for (Edge dependent : outEdges) {
+        for (final Edge dependent : outEdges) {
           dependents.add(dependent.getTargetId());
         }
       }
@@ -1376,8 +1361,8 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       }
 
       // Resolve property dependencies
-      ArrayList<String> source = new ArrayList<String>();
-      String nodeSource = node.getPropsSource();
+      final ArrayList<String> source = new ArrayList<>();
+      final String nodeSource = node.getPropsSource();
       if (nodeSource != null) {
         source.add(nodeSource);
         FlowProps parent = flow.getFlowProps(nodeSource);
@@ -1390,38 +1375,38 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
         page.add("properties", source);
       }
 
-      ArrayList<Pair<String, String>> parameters =
-          new ArrayList<Pair<String, String>>();
+      final ArrayList<Pair<String, String>> parameters =
+          new ArrayList<>();
       // Parameter
-      for (String key : comboProp.getKeySet()) {
-        String value = comboProp.get(key);
-        parameters.add(new Pair<String, String>(key, value));
+      for (final String key : comboProp.getKeySet()) {
+        final String value = comboProp.get(key);
+        parameters.add(new Pair<>(key, value));
       }
 
       page.add("parameters", parameters);
-    } catch (AccessControlException e) {
+    } catch (final AccessControlException e) {
       page.add("errorMsg", e.getMessage());
-    } catch (ProjectManagerException e) {
+    } catch (final ProjectManagerException e) {
       page.add("errorMsg", e.getMessage());
     }
     page.render();
   }
 
-  private void handlePropertyPage(HttpServletRequest req,
-      HttpServletResponse resp, Session session) throws ServletException {
-    Page page =
+  private void handlePropertyPage(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) throws ServletException {
+    final Page page =
         newPage(req, resp, session,
             "azkaban/webapp/servlet/velocity/propertypage.vm");
-    String projectName = getParam(req, "project");
-    String flowName = getParam(req, "flow");
-    String jobName = getParam(req, "job");
-    String propSource = getParam(req, "prop");
+    final String projectName = getParam(req, "project");
+    final String flowName = getParam(req, "flow");
+    final String jobName = getParam(req, "job");
+    final String propSource = getParam(req, "prop");
 
-    User user = session.getUser();
+    final User user = session.getUser();
     Project project = null;
     Flow flow = null;
     try {
-      project = projectManager.getProject(projectName);
+      project = this.projectManager.getProject(projectName);
       if (project == null) {
         page.add("errorMsg", "Project " + projectName + " not found.");
         logger.info("Display project property. Project " + projectName + " not found.");
@@ -1445,7 +1430,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       }
 
       page.add("flowid", flow.getId());
-      Node node = flow.getNode(jobName);
+      final Node node = flow.getNode(jobName);
       if (node == null) {
         page.add("errorMsg", "Job " + jobName + " not found.");
         logger.info("Display project property. Project " + projectName +
@@ -1454,7 +1439,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
         return;
       }
 
-      Props prop = projectManager.getProperties(project, propSource);
+      final Props prop = this.projectManager.getProperties(project, propSource);
       if (prop == null) {
         page.add("errorMsg", "Property " + propSource + " not found.");
         logger.info("Display project property. Project " + projectName +
@@ -1468,7 +1453,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       page.add("jobid", node.getId());
 
       // Resolve property dependencies
-      ArrayList<String> inheritProps = new ArrayList<String>();
+      final ArrayList<String> inheritProps = new ArrayList<>();
       FlowProps parent = flow.getFlowProps(propSource);
       while (parent.getInheritedSource() != null) {
         inheritProps.add(parent.getInheritedSource());
@@ -1478,7 +1463,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
         page.add("inheritedproperties", inheritProps);
       }
 
-      ArrayList<String> dependingProps = new ArrayList<String>();
+      final ArrayList<String> dependingProps = new ArrayList<>();
       FlowProps child =
           flow.getFlowProps(flow.getNode(jobName).getPropsSource());
       while (!child.getSource().equals(propSource)) {
@@ -1489,37 +1474,37 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
         page.add("dependingproperties", dependingProps);
       }
 
-      ArrayList<Pair<String, String>> parameters =
-          new ArrayList<Pair<String, String>>();
+      final ArrayList<Pair<String, String>> parameters =
+          new ArrayList<>();
       // Parameter
-      for (String key : prop.getKeySet()) {
-        String value = prop.get(key);
-        parameters.add(new Pair<String, String>(key, value));
+      for (final String key : prop.getKeySet()) {
+        final String value = prop.get(key);
+        parameters.add(new Pair<>(key, value));
       }
 
       page.add("parameters", parameters);
-    } catch (AccessControlException e) {
+    } catch (final AccessControlException e) {
       page.add("errorMsg", e.getMessage());
-    } catch (ProjectManagerException e) {
+    } catch (final ProjectManagerException e) {
       page.add("errorMsg", e.getMessage());
     }
 
     page.render();
   }
 
-  private void handleFlowPage(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws ServletException {
-    Page page =
+  private void handleFlowPage(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws ServletException {
+    final Page page =
         newPage(req, resp, session,
             "azkaban/webapp/servlet/velocity/flowpage.vm");
-    String projectName = getParam(req, "project");
-    String flowName = getParam(req, "flow");
+    final String projectName = getParam(req, "project");
+    final String flowName = getParam(req, "flow");
 
-    User user = session.getUser();
+    final User user = session.getUser();
     Project project = null;
     Flow flow = null;
     try {
-      project = projectManager.getProject(projectName);
+      project = this.projectManager.getProject(projectName);
       if (project == null) {
         page.add("errorMsg", "Project " + projectName + " not found.");
         page.render();
@@ -1538,24 +1523,24 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       } else {
         page.add("flowid", flow.getId());
       }
-    } catch (AccessControlException e) {
+    } catch (final AccessControlException e) {
       page.add("errorMsg", e.getMessage());
     }
 
     page.render();
   }
 
-  private void handleProjectPage(HttpServletRequest req,
-      HttpServletResponse resp, Session session) throws ServletException {
-    Page page =
+  private void handleProjectPage(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) throws ServletException {
+    final Page page =
         newPage(req, resp, session,
             "azkaban/webapp/servlet/velocity/projectpage.vm");
-    String projectName = getParam(req, "project");
+    final String projectName = getParam(req, "project");
 
-    User user = session.getUser();
+    final User user = session.getUser();
     Project project = null;
     try {
-      project = projectManager.getProject(projectName);
+      project = this.projectManager.getProject(projectName);
       if (project == null) {
         page.add("errorMsg", "Project " + projectName + " not found.");
       } else {
@@ -1567,23 +1552,23 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
         page.add("project", project);
         page.add("admins", Utils.flattenToString(
             project.getUsersWithPermission(Type.ADMIN), ","));
-        Permission perm = this.getPermissionObject(project, user, Type.ADMIN);
+        final Permission perm = this.getPermissionObject(project, user, Type.ADMIN);
         page.add("userpermission", perm);
         page.add(
             "validatorFixPrompt",
-            projectManager.getProps().getBoolean(
+            this.projectManager.getProps().getBoolean(
                 ValidatorConfigs.VALIDATOR_AUTO_FIX_PROMPT_FLAG_PARAM,
                 ValidatorConfigs.DEFAULT_VALIDATOR_AUTO_FIX_PROMPT_FLAG));
         page.add(
             "validatorFixLabel",
-            projectManager.getProps().get(
+            this.projectManager.getProps().get(
                 ValidatorConfigs.VALIDATOR_AUTO_FIX_PROMPT_LABEL_PARAM));
         page.add(
             "validatorFixLink",
-            projectManager.getProps().get(
+            this.projectManager.getProps().get(
                 ValidatorConfigs.VALIDATOR_AUTO_FIX_PROMPT_LINK_PARAM));
 
-        boolean adminPerm = perm.isPermissionSet(Type.ADMIN);
+        final boolean adminPerm = perm.isPermissionSet(Type.ADMIN);
         if (adminPerm) {
           page.add("admin", true);
         }
@@ -1595,33 +1580,33 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
           page.add("exec", false);
         }
 
-        List<Flow> flows = project.getFlows();
+        final List<Flow> flows = project.getFlows();
         if (!flows.isEmpty()) {
           Collections.sort(flows, FLOW_ID_COMPARATOR);
           page.add("flows", flows);
         }
       }
-    } catch (AccessControlException e) {
+    } catch (final AccessControlException e) {
       page.add("errorMsg", e.getMessage());
     }
     page.render();
   }
 
-  private void handleCreate(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws ServletException {
-    String projectName = hasParam(req, "name") ? getParam(req, "name") : null;
-    String projectDescription =
+  private void handleCreate(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws ServletException {
+    final String projectName = hasParam(req, "name") ? getParam(req, "name") : null;
+    final String projectDescription =
         hasParam(req, "description") ? getParam(req, "description") : null;
     logger.info("Create project " + projectName);
 
-    User user = session.getUser();
+    final User user = session.getUser();
 
     String status = null;
     String action = null;
     String message = null;
     HashMap<String, Object> params = null;
 
-    if (lockdownCreateProjects && !hasPermissionToCreateProject(user)) {
+    if (this.lockdownCreateProjects && !hasPermissionToCreateProject(user)) {
       message =
           "User " + user.getUserId()
               + " doesn't have permission to create projects.";
@@ -1629,48 +1614,48 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       status = "error";
     } else {
       try {
-        projectManager.createProject(projectName, projectDescription, user);
+        this.projectManager.createProject(projectName, projectDescription, user);
         status = "success";
         action = "redirect";
-        String redirect = "manager?project=" + projectName;
-        params = new HashMap<String, Object>();
+        final String redirect = "manager?project=" + projectName;
+        params = new HashMap<>();
         params.put("path", redirect);
-      } catch (ProjectManagerException e) {
+      } catch (final ProjectManagerException e) {
         message = e.getMessage();
         status = "error";
       }
     }
-    String response = createJsonResponse(status, message, action, params);
+    final String response = createJsonResponse(status, message, action, params);
     try {
-      Writer write = resp.getWriter();
+      final Writer write = resp.getWriter();
       write.append(response);
       write.flush();
-    } catch (IOException e) {
+    } catch (final IOException e) {
       e.printStackTrace();
     }
   }
 
-  private void registerError(Map<String, String> ret, String error,
-      HttpServletResponse resp, int returnCode) {
+  private void registerError(final Map<String, String> ret, final String error,
+      final HttpServletResponse resp, final int returnCode) {
     ret.put("error", error);
     resp.setStatus(returnCode);
   }
 
-  private void ajaxHandleUpload(HttpServletRequest req, HttpServletResponse resp,
-      Map<String, String> ret, Map<String, Object> multipart, Session session)
+  private void ajaxHandleUpload(final HttpServletRequest req, final HttpServletResponse resp,
+      final Map<String, String> ret, final Map<String, Object> multipart, final Session session)
       throws ServletException, IOException {
-    User user = session.getUser();
-    String projectName = (String) multipart.get("project");
-    Project project = projectManager.getProject(projectName);
-    String autoFix = (String) multipart.get("fix");
-    Props props = new Props();
+    final User user = session.getUser();
+    final String projectName = (String) multipart.get("project");
+    final Project project = this.projectManager.getProject(projectName);
+    final String autoFix = (String) multipart.get("fix");
+    final Props props = new Props();
     if (autoFix != null && autoFix.equals("off")) {
       props.put(ValidatorConfigs.CUSTOM_AUTO_FIX_FLAG_PARAM, "false");
     } else {
       props.put(ValidatorConfigs.CUSTOM_AUTO_FIX_FLAG_PARAM, "true");
     }
 
-    if (lockdownUploadProjects) {
+    if (this.lockdownUploadProjects) {
       registerError(ret, "Project uploading is locked out", resp, 400);
     } else if (projectName == null || projectName.isEmpty()) {
       registerError(ret, "No project name found.", resp, 400);
@@ -1683,15 +1668,15 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     } else {
       ret.put("projectId", String.valueOf(project.getId()));
 
-      FileItem item = (FileItem) multipart.get("file");
-      String name = item.getName();
+      final FileItem item = (FileItem) multipart.get("file");
+      final String name = item.getName();
       String type = null;
 
       final String contentType = item.getContentType();
       if (contentType != null
           && (contentType.startsWith(APPLICATION_ZIP_MIME_TYPE)
-              || contentType.startsWith("application/x-zip-compressed") || contentType
-                .startsWith("application/octet-stream"))) {
+          || contentType.startsWith("application/x-zip-compressed") || contentType
+          .startsWith("application/octet-stream"))) {
         type = "zip";
       } else {
         item.delete();
@@ -1700,40 +1685,40 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
         return;
       }
 
-      File tempDir = Utils.createTempDir();
+      final File tempDir = Utils.createTempDir();
       OutputStream out = null;
       try {
         logger.info("Uploading file " + name);
-        File archiveFile = new File(tempDir, name);
+        final File archiveFile = new File(tempDir, name);
         out = new BufferedOutputStream(new FileOutputStream(archiveFile));
         IOUtils.copy(item.getInputStream(), out);
         out.close();
 
-        Map<String, ValidationReport> reports =
-            projectManager.uploadProject(project, archiveFile, type, user,
+        final Map<String, ValidationReport> reports =
+            this.projectManager.uploadProject(project, archiveFile, type, user,
                 props);
-        StringBuffer errorMsgs = new StringBuffer();
-        StringBuffer warnMsgs = new StringBuffer();
-        for (Entry<String, ValidationReport> reportEntry : reports.entrySet()) {
-          ValidationReport report = reportEntry.getValue();
+        final StringBuffer errorMsgs = new StringBuffer();
+        final StringBuffer warnMsgs = new StringBuffer();
+        for (final Entry<String, ValidationReport> reportEntry : reports.entrySet()) {
+          final ValidationReport report = reportEntry.getValue();
           if (!report.getInfoMsgs().isEmpty()) {
-            for (String msg : report.getInfoMsgs()) {
+            for (final String msg : report.getInfoMsgs()) {
               switch (ValidationReport.getInfoMsgLevel(msg)) {
-              case ERROR:
-                errorMsgs.append(ValidationReport.getInfoMsg(msg) + "<br/>");
-                break;
-              case WARN:
-                warnMsgs.append(ValidationReport.getInfoMsg(msg) + "<br/>");
-                break;
-              default:
-                break;
+                case ERROR:
+                  errorMsgs.append(ValidationReport.getInfoMsg(msg) + "<br/>");
+                  break;
+                case WARN:
+                  warnMsgs.append(ValidationReport.getInfoMsg(msg) + "<br/>");
+                  break;
+                default:
+                  break;
               }
             }
           }
           if (!report.getErrorMsgs().isEmpty()) {
             errorMsgs.append("Validator " + reportEntry.getKey()
                 + " reports errors:<ul>");
-            for (String msg : report.getErrorMsgs()) {
+            for (final String msg : report.getErrorMsgs()) {
               errorMsgs.append("<li>" + msg + "</li>");
             }
             errorMsgs.append("</ul>");
@@ -1741,7 +1726,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
           if (!report.getWarningMsgs().isEmpty()) {
             warnMsgs.append("Validator " + reportEntry.getKey()
                 + " reports warnings:<ul>");
-            for (String msg : report.getWarningMsgs()) {
+            for (final String msg : report.getWarningMsgs()) {
               warnMsgs.append("<li>" + msg + "</li>");
             }
             warnMsgs.append("</ul>");
@@ -1752,7 +1737,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
           // message
           // will somehow get discarded.
           registerError(ret, errorMsgs.length() > 4000 ? errorMsgs.substring(0, 4000)
-                  : errorMsgs.toString(), resp, 500);
+              : errorMsgs.toString(), resp, 500);
         }
         if (warnMsgs.length() > 0) {
           ret.put(
@@ -1760,14 +1745,14 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
               warnMsgs.length() > 4000 ? warnMsgs.substring(0, 4000) : warnMsgs
                   .toString());
         }
-      } catch (Exception e) {
+      } catch (final Exception e) {
         logger.info("Installation Failed.", e);
         String error = e.getMessage();
         if (error.length() > 512) {
           error =
               error.substring(0, 512) + "<br>Too many errors to display.<br>";
         }
-        registerError(ret, "Installation Failed.<br>" + error, resp , 500);
+        registerError(ret, "Installation Failed.<br>" + error, resp, 500);
       } finally {
         if (out != null) {
           out.close();
@@ -1781,11 +1766,11 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     }
   }
 
-  private void handleUpload(HttpServletRequest req, HttpServletResponse resp,
-      Map<String, Object> multipart, Session session) throws ServletException,
+  private void handleUpload(final HttpServletRequest req, final HttpServletResponse resp,
+      final Map<String, Object> multipart, final Session session) throws ServletException,
       IOException {
-    HashMap<String, String> ret = new HashMap<String, String>();
-    String projectName = (String) multipart.get("project");
+    final HashMap<String, String> ret = new HashMap<>();
+    final String projectName = (String) multipart.get("project");
     ajaxHandleUpload(req, resp, ret, multipart, session);
 
     if (ret.containsKey("error")) {
@@ -1799,70 +1784,22 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     resp.sendRedirect(req.getRequestURI() + "?project=" + projectName);
   }
 
-  private static class NodeLevelComparator implements Comparator<Node> {
-    @Override
-    public int compare(Node node1, Node node2) {
-      return node1.getLevel() - node2.getLevel();
-    }
-  }
-
-  public static class PageSelection {
-    private String page;
-    private int size;
-    private boolean disabled;
-    private boolean selected;
-    private int nextPage;
-
-    public PageSelection(String pageName, int size, boolean disabled,
-        boolean selected, int nextPage) {
-      this.page = pageName;
-      this.size = size;
-      this.disabled = disabled;
-      this.setSelected(selected);
-      this.nextPage = nextPage;
-    }
-
-    public String getPage() {
-      return page;
-    }
-
-    public int getSize() {
-      return size;
-    }
-
-    public boolean getDisabled() {
-      return disabled;
-    }
-
-    public boolean isSelected() {
-      return selected;
-    }
-
-    public int getNextPage() {
-      return nextPage;
-    }
+  private Permission getPermissionObject(final Project project, final User user,
+      final Permission.Type type) {
+    final Permission perm = project.getCollectivePermission(user);
 
-    public void setSelected(boolean selected) {
-      this.selected = selected;
-    }
-  }
-
-  private Permission getPermissionObject(Project project, User user,
-      Permission.Type type) {
-    Permission perm = project.getCollectivePermission(user);
-
-    for (String roleName : user.getRoles()) {
-      Role role = userManager.getRole(roleName);
+    for (final String roleName : user.getRoles()) {
+      final Role role = this.userManager.getRole(roleName);
       perm.addPermissions(role.getPermission());
     }
 
     return perm;
   }
 
-  private boolean hasPermissionToCreateProject(User user) {
-    for (String roleName : user.getRoles()) {
-      Role role = userManager.getRole(roleName);
-      Permission perm = role.getPermission();
+  private boolean hasPermissionToCreateProject(final User user) {
+    for (final String roleName : user.getRoles()) {
+      final Role role = this.userManager.getRole(roleName);
+      final Permission perm = role.getPermission();
       if (perm.isPermissionSet(Permission.Type.ADMIN)
           || perm.isPermissionSet(Permission.Type.CREATEPROJECTS)) {
         return true;
@@ -1872,19 +1809,19 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     return false;
   }
 
-  private void handleReloadProjectWhitelist(HttpServletRequest req,
-      HttpServletResponse resp, Session session) throws IOException {
-    HashMap<String, Object> ret = new HashMap<String, Object>();
+  private void handleReloadProjectWhitelist(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) throws IOException {
+    final HashMap<String, Object> ret = new HashMap<>();
 
     if (hasPermission(session.getUser(), Permission.Type.ADMIN)) {
       try {
-        if (projectManager.loadProjectWhiteList()) {
+        if (this.projectManager.loadProjectWhiteList()) {
           ret.put("success", "Project whitelist re-loaded!");
         } else {
           ret.put("error", "azkaban.properties doesn't contain property "
               + ProjectWhitelist.XML_FILE_PARAM);
         }
-      } catch (Exception e) {
+      } catch (final Exception e) {
         ret.put("error",
             "Exception occurred while trying to re-load project whitelist: "
                 + e);
@@ -1896,9 +1833,9 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     this.writeJSON(resp, ret);
   }
 
-  protected boolean hasPermission(User user, Permission.Type type) {
-    for (String roleName : user.getRoles()) {
-      Role role = userManager.getRole(roleName);
+  protected boolean hasPermission(final User user, final Permission.Type type) {
+    for (final String roleName : user.getRoles()) {
+      final Role role = this.userManager.getRole(roleName);
       if (role.getPermission().isPermissionSet(type)
           || role.getPermission().isPermissionSet(Permission.Type.ADMIN)) {
         return true;
@@ -1907,4 +1844,54 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
 
     return false;
   }
+
+  private static class NodeLevelComparator implements Comparator<Node> {
+
+    @Override
+    public int compare(final Node node1, final Node node2) {
+      return node1.getLevel() - node2.getLevel();
+    }
+  }
+
+  public static class PageSelection {
+
+    private final String page;
+    private final int size;
+    private final boolean disabled;
+    private final int nextPage;
+    private boolean selected;
+
+    public PageSelection(final String pageName, final int size, final boolean disabled,
+        final boolean selected, final int nextPage) {
+      this.page = pageName;
+      this.size = size;
+      this.disabled = disabled;
+      this.setSelected(selected);
+      this.nextPage = nextPage;
+    }
+
+    public String getPage() {
+      return this.page;
+    }
+
+    public int getSize() {
+      return this.size;
+    }
+
+    public boolean getDisabled() {
+      return this.disabled;
+    }
+
+    public boolean isSelected() {
+      return this.selected;
+    }
+
+    public void setSelected(final boolean selected) {
+      this.selected = selected;
+    }
+
+    public int getNextPage() {
+      return this.nextPage;
+    }
+  }
 }
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectServlet.java
index a86a82c..5e01bb3 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ProjectServlet.java
@@ -16,18 +16,6 @@
 
 package azkaban.webapp.servlet;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.log4j.Logger;
-
 import azkaban.project.Project;
 import azkaban.project.ProjectManager;
 import azkaban.server.session.Session;
@@ -37,11 +25,21 @@ import azkaban.user.User;
 import azkaban.user.UserManager;
 import azkaban.utils.Pair;
 import azkaban.webapp.AzkabanWebServer;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.log4j.Logger;
 
 /**
  * The main page
  */
 public class ProjectServlet extends LoginAbstractAzkabanServlet {
+
   private static final Logger logger = Logger.getLogger(ProjectServlet.class
       .getName());
   private static final String LOCKDOWN_CREATE_PROJECTS_KEY =
@@ -53,23 +51,23 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
   private boolean lockdownCreateProjects = false;
 
   @Override
-  public void init(ServletConfig config) throws ServletException {
+  public void init(final ServletConfig config) throws ServletException {
     super.init(config);
-    AzkabanWebServer server = (AzkabanWebServer) getApplication();
+    final AzkabanWebServer server = (AzkabanWebServer) getApplication();
 
-    userManager = server.getUserManager();
-    lockdownCreateProjects =
+    this.userManager = server.getUserManager();
+    this.lockdownCreateProjects =
         server.getServerProps().getBoolean(LOCKDOWN_CREATE_PROJECTS_KEY, false);
-    if (lockdownCreateProjects) {
+    if (this.lockdownCreateProjects) {
       logger.info("Creation of projects is locked down");
     }
   }
 
   @Override
-  protected void handleGet(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws ServletException, IOException {
+  protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws ServletException, IOException {
 
-    ProjectManager manager =
+    final ProjectManager manager =
         ((AzkabanWebServer) getApplication()).getProjectManager();
 
     if (hasParam(req, "ajax")) {
@@ -83,26 +81,20 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
 
   /**
    * ProjectServlet class now handles ajax requests. It returns a
-   * @SimplifiedProject object: information regarding projects, and information
-   * regarding user and project association
    *
-   * @param req
-   * @param resp
-   * @param session
-   * @param manager
-   * @throws ServletException
-   * @throws IOException
+   * @SimplifiedProject object: information regarding projects, and information regarding user and
+   * project association
    */
-  private void handleAjaxAction(HttpServletRequest req,
-      HttpServletResponse resp, Session session, ProjectManager manager)
+  private void handleAjaxAction(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session, final ProjectManager manager)
       throws ServletException, IOException {
 
-    String ajaxName = getParam(req, "ajax");
-    HashMap<String, Object> ret = new HashMap<String, Object>();
+    final String ajaxName = getParam(req, "ajax");
+    final HashMap<String, Object> ret = new HashMap<>();
 
     if (ajaxName.equals("fetchallprojects")) {
-      List<Project> projects = manager.getProjects();
-      List<SimplifiedProject> simplifiedProjects =
+      final List<Project> projects = manager.getProjects();
+      final List<SimplifiedProject> simplifiedProjects =
           toSimplifiedProjects(projects);
       ret.put("projects", simplifiedProjects);
     } else if (ajaxName.equals("fetchuserprojects")) {
@@ -119,21 +111,15 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
    * If user provides an empty user name, the user defaults to the session user<br>
    * If user does not provide the user param, the user also defaults to the
    * session user<br>
-   *
-   * @param req
-   * @param session
-   * @param manager
-   * @param ret
-   * @throws ServletException
    */
-  private void handleFetchUserProjects(HttpServletRequest req, Session session,
-      ProjectManager manager, HashMap<String, Object> ret)
+  private void handleFetchUserProjects(final HttpServletRequest req, final Session session,
+      final ProjectManager manager, final HashMap<String, Object> ret)
       throws ServletException {
     User user = null;
 
     // if key "user" is specified, follow this logic
     if (hasParam(req, "user")) {
-      String userParam = getParam(req, "user");
+      final String userParam = getParam(req, "user");
       if (userParam.isEmpty()) {
         user = session.getUser();
       } else {
@@ -144,21 +130,18 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
       user = session.getUser();
     }
 
-    List<Project> projects = manager.getUserProjects(user);
-    List<SimplifiedProject> simplifiedProjects = toSimplifiedProjects(projects);
+    final List<Project> projects = manager.getUserProjects(user);
+    final List<SimplifiedProject> simplifiedProjects = toSimplifiedProjects(projects);
     ret.put("projects", simplifiedProjects);
   }
 
   /**
    * A simple helper method that converts a List<Project> to List<SimplifiedProject>
-   *
-   * @param projects
-   * @return
    */
-  private List<SimplifiedProject> toSimplifiedProjects(List<Project> projects) {
-    List<SimplifiedProject> simplifiedProjects = new ArrayList<>();
-    for (Project p : projects) {
-      SimplifiedProject sp =
+  private List<SimplifiedProject> toSimplifiedProjects(final List<Project> projects) {
+    final List<SimplifiedProject> simplifiedProjects = new ArrayList<>();
+    for (final Project p : projects) {
+      final SimplifiedProject sp =
           new SimplifiedProject(p.getId(), p.getName(),
               p.getLastModifiedUser(), p.getCreateTimestamp(),
               p.getUserPermissions(), p.getGroupPermissions());
@@ -169,33 +152,28 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
 
   /**
    * Renders the user homepage that users see when they log in
-   *
-   * @param req
-   * @param resp
-   * @param session
-   * @param manager
    */
-  private void handlePageRender(HttpServletRequest req,
-      HttpServletResponse resp, Session session, ProjectManager manager) {
-    User user = session.getUser();
+  private void handlePageRender(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session, final ProjectManager manager) {
+    final User user = session.getUser();
 
-    Page page =
+    final Page page =
         newPage(req, resp, session, "azkaban/webapp/servlet/velocity/index.vm");
 
-    if (lockdownCreateProjects && !hasPermissionToCreateProject(user)) {
+    if (this.lockdownCreateProjects && !hasPermissionToCreateProject(user)) {
       page.add("hideCreateProject", true);
     }
 
     if (hasParam(req, "all")) {
-      List<Project> projects = manager.getProjects();
+      final List<Project> projects = manager.getProjects();
       page.add("viewProjects", "all");
       page.add("projects", projects);
     } else if (hasParam(req, "group")) {
-      List<Project> projects = manager.getGroupProjects(user);
+      final List<Project> projects = manager.getGroupProjects(user);
       page.add("viewProjects", "group");
       page.add("projects", projects);
     } else {
-      List<Project> projects = manager.getUserProjects(user);
+      final List<Project> projects = manager.getUserProjects(user);
       page.add("viewProjects", "personal");
       page.add("projects", projects);
     }
@@ -203,10 +181,10 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
     page.render();
   }
 
-  private void handleDoAction(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws ServletException {
+  private void handleDoAction(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws ServletException {
     if (getParam(req, "doaction").equals("search")) {
-      String searchTerm = getParam(req, "searchterm");
+      final String searchTerm = getParam(req, "searchterm");
       if (!searchTerm.equals("") && !searchTerm.equals(".*")) {
         handleFilter(req, resp, session, searchTerm);
         return;
@@ -214,21 +192,21 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
     }
   }
 
-  private void handleFilter(HttpServletRequest req, HttpServletResponse resp,
-      Session session, String searchTerm) {
-    User user = session.getUser();
-    ProjectManager manager =
+  private void handleFilter(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session, final String searchTerm) {
+    final User user = session.getUser();
+    final ProjectManager manager =
         ((AzkabanWebServer) getApplication()).getProjectManager();
-    Page page =
+    final Page page =
         newPage(req, resp, session, "azkaban/webapp/servlet/velocity/index.vm");
     if (hasParam(req, "all")) {
       // do nothing special if one asks for 'ALL' projects
-      List<Project> projects = manager.getProjectsByRegex(searchTerm);
+      final List<Project> projects = manager.getProjectsByRegex(searchTerm);
       page.add("allProjects", "");
       page.add("projects", projects);
       page.add("search_term", searchTerm);
     } else {
-      List<Project> projects = manager.getUserProjectsByRegex(user, searchTerm);
+      final List<Project> projects = manager.getUserProjectsByRegex(user, searchTerm);
       page.add("projects", projects);
       page.add("search_term", searchTerm);
     }
@@ -237,15 +215,15 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
   }
 
   @Override
-  protected void handlePost(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws ServletException, IOException {
+  protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws ServletException, IOException {
     // TODO Auto-generated method stub
   }
 
-  private boolean hasPermissionToCreateProject(User user) {
-    for (String roleName : user.getRoles()) {
-      Role role = userManager.getRole(roleName);
-      Permission perm = role.getPermission();
+  private boolean hasPermissionToCreateProject(final User user) {
+    for (final String roleName : user.getRoles()) {
+      final Role role = this.userManager.getRole(roleName);
+      final Permission perm = role.getPermission();
       if (perm.isPermissionSet(Permission.Type.ADMIN)
           || perm.isPermissionSet(Permission.Type.CREATEPROJECTS)) {
         return true;
@@ -262,9 +240,9 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
    * but does not want every flow and every job inside that project.
    *
    * @author jyu
-   *
    */
   private static class SimplifiedProject {
+
     private int projectId;
     private String projectName;
     private String createdBy;
@@ -272,10 +250,10 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
     private List<Pair<String, Permission>> userPermissions;
     private List<Pair<String, Permission>> groupPermissions;
 
-    public SimplifiedProject(int projectId, String projectName,
-        String createdBy, long createdTime,
-        List<Pair<String, Permission>> userPermissions,
-        List<Pair<String, Permission>> groupPermissions) {
+    public SimplifiedProject(final int projectId, final String projectName,
+        final String createdBy, final long createdTime,
+        final List<Pair<String, Permission>> userPermissions,
+        final List<Pair<String, Permission>> groupPermissions) {
       this.projectId = projectId;
       this.projectName = projectName;
       this.createdBy = createdBy;
@@ -285,52 +263,52 @@ public class ProjectServlet extends LoginAbstractAzkabanServlet {
     }
 
     public int getProjectId() {
-      return projectId;
+      return this.projectId;
     }
 
-    public void setProjectId(int projectId) {
+    public void setProjectId(final int projectId) {
       this.projectId = projectId;
     }
 
     public String getProjectName() {
-      return projectName;
+      return this.projectName;
     }
 
-    public void setProjectName(String projectName) {
+    public void setProjectName(final String projectName) {
       this.projectName = projectName;
     }
 
     public String getCreatedBy() {
-      return createdBy;
+      return this.createdBy;
     }
 
-    public void setCreatedBy(String createdBy) {
+    public void setCreatedBy(final String createdBy) {
       this.createdBy = createdBy;
     }
 
     public long getCreatedTime() {
-      return createdTime;
+      return this.createdTime;
     }
 
-    public void setCreatedTime(long createdTime) {
+    public void setCreatedTime(final long createdTime) {
       this.createdTime = createdTime;
     }
 
     public List<Pair<String, Permission>> getUserPermissions() {
-      return userPermissions;
+      return this.userPermissions;
     }
 
     public void setUserPermissions(
-        List<Pair<String, Permission>> userPermissions) {
+        final List<Pair<String, Permission>> userPermissions) {
       this.userPermissions = userPermissions;
     }
 
     public List<Pair<String, Permission>> getGroupPermissions() {
-      return groupPermissions;
+      return this.groupPermissions;
     }
 
     public void setGroupPermissions(
-        List<Pair<String, Permission>> groupPermissions) {
+        final List<Pair<String, Permission>> groupPermissions) {
       this.groupPermissions = groupPermissions;
     }
 
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ScheduleServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ScheduleServlet.java
index 0b3b4fd..6908473 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ScheduleServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/ScheduleServlet.java
@@ -68,6 +68,7 @@ import org.joda.time.ReadablePeriod;
 import org.joda.time.format.DateTimeFormat;
 
 public class ScheduleServlet extends LoginAbstractAzkabanServlet {
+
   private static final long serialVersionUID = 1L;
   private static final Logger logger = Logger.getLogger(ScheduleServlet.class);
   private ProjectManager projectManager;
@@ -85,7 +86,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
 
   @Override
   protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
-                           final Session session) throws ServletException, IOException {
+      final Session session) throws ServletException, IOException {
     if (hasParam(req, "ajax")) {
       handleAJAXAction(req, resp, session);
     } else if (hasParam(req, "calendar")) {
@@ -96,7 +97,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
   }
 
   private void handleAJAXAction(final HttpServletRequest req,
-                                final HttpServletResponse resp, final Session session) throws ServletException,
+      final HttpServletResponse resp, final Session session) throws ServletException,
       IOException {
     HashMap<String, Object> ret = new HashMap<>();
     final String ajaxName = getParam(req, "ajax");
@@ -124,14 +125,14 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
   }
 
   private void ajaxSetSla(final HttpServletRequest req, final HashMap<String, Object> ret,
-                          final User user) {
+      final User user) {
     try {
       final int scheduleId = getIntParam(req, "scheduleId");
       final Schedule sched = this.scheduleManager.getSchedule(scheduleId);
       if (sched == null) {
         ret.put("error",
-                "Error loading schedule. Schedule " + scheduleId
-                        + " doesn't exist");
+            "Error loading schedule. Schedule " + scheduleId
+                + " doesn't exist");
         return;
       }
 
@@ -240,7 +241,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
   }
 
   private void ajaxFetchSchedule(final HttpServletRequest req,
-                                 final HashMap<String, Object> ret, final User user) throws ServletException {
+      final HashMap<String, Object> ret, final User user) throws ServletException {
 
     final int projectId = getIntParam(req, "projectId");
     final String flowId = getParam(req, "flowId");
@@ -267,15 +268,15 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
   }
 
   private void ajaxSlaInfo(final HttpServletRequest req, final HashMap<String, Object> ret,
-                           final User user) {
+      final User user) {
     final int scheduleId;
     try {
       scheduleId = getIntParam(req, "scheduleId");
       final Schedule sched = this.scheduleManager.getSchedule(scheduleId);
       if (sched == null) {
         ret.put("error",
-                "Error loading schedule. Schedule " + scheduleId
-                        + " doesn't exist");
+            "Error loading schedule. Schedule " + scheduleId
+                + " doesn't exist");
         return;
       }
 
@@ -338,7 +339,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
   }
 
   protected Project getProjectAjaxByPermission(final Map<String, Object> ret,
-                                               final int projectId, final User user, final Permission.Type type) {
+      final int projectId, final User user, final Permission.Type type) {
     final Project project = this.projectManager.getProject(projectId);
 
     if (project == null) {
@@ -355,7 +356,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
   }
 
   private void handleGetAllSchedules(final HttpServletRequest req,
-                                     final HttpServletResponse resp, final Session session) throws ServletException,
+      final HttpServletResponse resp, final Session session) throws ServletException,
       IOException {
 
     final Page page =
@@ -373,7 +374,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
   }
 
   private void handleGetScheduleCalendar(final HttpServletRequest req,
-                                         final HttpServletResponse resp, final Session session) throws ServletException,
+      final HttpServletResponse resp, final Session session) throws ServletException,
       IOException {
 
     final Page page =
@@ -392,7 +393,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
 
   @Override
   protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
-                            final Session session) throws ServletException, IOException {
+      final Session session) throws ServletException, IOException {
     if (hasParam(req, "ajax")) {
       handleAJAXAction(req, resp, session);
     } else {
@@ -408,17 +409,18 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
         }
       }
 
-      if (ret.get("status") == ("success"))
+      if (ret.get("status") == ("success")) {
         setSuccessMessageInCookie(resp, (String) ret.get("message"));
-      else
+      } else {
         setErrorMessageInCookie(resp, (String) ret.get("message"));
+      }
 
       this.writeJSON(resp, ret);
     }
   }
 
   private void ajaxLoadFlows(final HttpServletRequest req,
-                             final HashMap<String, Object> ret, final User user) throws ServletException {
+      final HashMap<String, Object> ret, final User user) throws ServletException {
     final List<Schedule> schedules;
     try {
       schedules = this.scheduleManager.getSchedules();
@@ -426,8 +428,9 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
       throw new ServletException(e);
     }
     // See if anything is scheduled
-    if (schedules.size() <= 0)
+    if (schedules.size() <= 0) {
       return;
+    }
 
     final List<HashMap<String, Object>> output =
         new ArrayList<>();
@@ -443,7 +446,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
   }
 
   private void writeScheduleData(final List<HashMap<String, Object>> output,
-                                 final Schedule schedule) throws ScheduleManagerException {
+      final Schedule schedule) throws ScheduleManagerException {
     final Map<String, Object> stats =
         SchedulerStatistics.getStatistics(schedule.getScheduleId(),
             (AzkabanWebServer) getApplication());
@@ -474,7 +477,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
   }
 
   private void ajaxLoadHistory(final HttpServletRequest req,
-                               final HttpServletResponse resp, final User user) throws ServletException, IOException {
+      final HttpServletResponse resp, final User user) throws ServletException, IOException {
     resp.setContentType(JSON_MIME_TYPE);
     final long today = DateTime.now().withTime(0, 0, 0, 0).getMillis();
     long startTime = getLongParam(req, "startTime");
@@ -565,7 +568,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
   }
 
   private void writeHistoryData(final List<HashMap<String, Object>> output,
-                                final ExecutableFlow history) {
+      final ExecutableFlow history) {
     final HashMap<String, Object> data = new HashMap<>();
 
     data.put("scheduleid", history.getScheduleId());
@@ -586,7 +589,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
   }
 
   private void ajaxRemoveSched(final HttpServletRequest req, final Map<String, Object> ret,
-                               final User user) throws ServletException {
+      final User user) throws ServletException {
     final int scheduleId = getIntParam(req, "scheduleId");
     final Schedule sched;
     try {
@@ -629,7 +632,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
   }
 
   private void ajaxScheduleFlow(final HttpServletRequest req,
-                                final HashMap<String, Object> ret, final User user) throws ServletException {
+      final HashMap<String, Object> ret, final User user) throws ServletException {
     final String projectName = getParam(req, "projectName");
     final String flowName = getParam(req, "flow");
     final int projectId = getIntParam(req, "projectId");
@@ -667,7 +670,8 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
       return;
     }
 
-    final long endSchedTime = getLongParam(req, "endSchedTime", Constants.DEFAULT_SCHEDULE_END_EPOCH_TIME);
+    final long endSchedTime = getLongParam(req, "endSchedTime",
+        Constants.DEFAULT_SCHEDULE_END_EPOCH_TIME);
     try {
       // Todo kunkun-tang: Need to verify if passed end time is valid.
     } catch (final Exception e) {
@@ -713,12 +717,10 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
   }
 
   /**
-   *
    * This method is in charge of doing cron scheduling.
-   * @throws ServletException
    */
   private void ajaxScheduleCronFlow(final HttpServletRequest req,
-                                    final HashMap<String, Object> ret, final User user) throws ServletException {
+      final HashMap<String, Object> ret, final User user) throws ServletException {
     final String projectName = getParam(req, "projectName");
     final String flowName = getParam(req, "flow");
 
@@ -754,18 +756,21 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
         // everything in Azkaban functions is at the minute granularity, so we add 0 here
         // to let the expression to be complete.
         cronExpression = getParam(req, "cronExpression");
-        if(azkaban.utils.Utils.isCronExpressionValid(cronExpression, timezone) == false) {
-          ret.put("error", "This expression <" + cronExpression + "> can not be parsed to quartz cron.");
+        if (azkaban.utils.Utils.isCronExpressionValid(cronExpression, timezone) == false) {
+          ret.put("error",
+              "This expression <" + cronExpression + "> can not be parsed to quartz cron.");
           return;
         }
       }
-      if(cronExpression == null)
+      if (cronExpression == null) {
         throw new Exception("Cron expression must exist.");
+      }
     } catch (final Exception e) {
       ret.put("error", e.getMessage());
     }
 
-    final long endSchedTime = getLongParam(req, "endSchedTime", Constants.DEFAULT_SCHEDULE_END_EPOCH_TIME);
+    final long endSchedTime = getLongParam(req, "endSchedTime",
+        Constants.DEFAULT_SCHEDULE_END_EPOCH_TIME);
     try {
       // Todo kunkun-tang: Need to verify if passed end time is valid.
     } catch (final Exception e) {
@@ -823,8 +828,9 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
 
     hour %= 12;
 
-    if (isPm)
+    if (isPm) {
       hour += 12;
+    }
 
     final DateTime firstSchedTime =
         day.withHourOfDay(hour).withMinuteOfHour(minutes).withSecondOfMinute(0);
@@ -834,11 +840,13 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
 
   /**
    * @param cronTimezone represents the timezone from remote API call
-   * @return if the string is equal to UTC, we return UTC; otherwise, we always return default timezone.
+   * @return if the string is equal to UTC, we return UTC; otherwise, we always return default
+   * timezone.
    */
   private DateTimeZone parseTimeZone(final String cronTimezone) {
-    if(cronTimezone != null && cronTimezone.equals("UTC"))
+    if (cronTimezone != null && cronTimezone.equals("UTC")) {
       return DateTimeZone.UTC;
+    }
 
     return DateTimeZone.getDefault();
   }
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/StatsServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/StatsServlet.java
index 3fdcc45..917c982 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/StatsServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/StatsServlet.java
@@ -16,19 +16,6 @@
 
 package azkaban.webapp.servlet;
 
-import java.io.IOException;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import azkaban.executor.ConnectorParams;
 import azkaban.executor.Executor;
 import azkaban.executor.ExecutorManager;
@@ -40,6 +27,17 @@ import azkaban.user.User;
 import azkaban.user.UserManager;
 import azkaban.utils.Pair;
 import azkaban.webapp.AzkabanWebServer;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import org.apache.log4j.Logger;
 
 /**
@@ -54,15 +52,17 @@ public class StatsServlet extends LoginAbstractAzkabanServlet {
   private ExecutorManager execManager;
 
   @Override
-  public void init(ServletConfig config) throws ServletException {
+  public void init(final ServletConfig config) throws ServletException {
     super.init(config);
-    AzkabanWebServer server = (AzkabanWebServer) getApplication();
-    userManager = server.getUserManager();
-    execManager = server.getExecutorManager();
+    final AzkabanWebServer server = (AzkabanWebServer) getApplication();
+    this.userManager = server.getUserManager();
+    this.execManager = server.getExecutorManager();
   }
 
   @Override
-  protected void handleGet(HttpServletRequest req, HttpServletResponse resp, Session session) throws ServletException,
+  protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session)
+      throws ServletException,
       IOException {
     if (hasParam(req, ConnectorParams.ACTION_PARAM)) {
       handleAJAXAction(req, resp, session);
@@ -71,26 +71,32 @@ public class StatsServlet extends LoginAbstractAzkabanServlet {
     }
   }
 
-  private void handleAJAXAction(HttpServletRequest req, HttpServletResponse resp, Session session)
+  private void handleAJAXAction(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session)
       throws ServletException, IOException {
-    HashMap<String, Object> ret = new HashMap<String, Object>();
-    int executorId = getIntParam(req, ConnectorParams.EXECUTOR_ID_PARAM);
-    String actionName = getParam(req, ConnectorParams.ACTION_PARAM);
+    final HashMap<String, Object> ret = new HashMap<>();
+    final int executorId = getIntParam(req, ConnectorParams.EXECUTOR_ID_PARAM);
+    final String actionName = getParam(req, ConnectorParams.ACTION_PARAM);
 
     if (actionName.equals(ConnectorParams.STATS_GET_METRICHISTORY)) {
       handleGetMetricHistory(executorId, req, ret, session.getUser());
     } else if (actionName.equals(ConnectorParams.STATS_GET_ALLMETRICSNAME)) {
       handleGetAllMetricName(executorId, req, ret);
     } else if (actionName.equals(ConnectorParams.STATS_SET_REPORTINGINTERVAL)) {
-      handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_REPORTINGINTERVAL, req, ret);
+      handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_REPORTINGINTERVAL, req,
+          ret);
     } else if (actionName.equals(ConnectorParams.STATS_SET_CLEANINGINTERVAL)) {
-      handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_CLEANINGINTERVAL, req, ret);
+      handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_CLEANINGINTERVAL, req,
+          ret);
     } else if (actionName.equals(ConnectorParams.STATS_SET_MAXREPORTERPOINTS)) {
-      handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_MAXREPORTERPOINTS, req, ret);
+      handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_MAXREPORTERPOINTS, req,
+          ret);
     } else if (actionName.equals(ConnectorParams.STATS_SET_ENABLEMETRICS)) {
-      handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_ENABLEMETRICS, req, ret);
+      handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_ENABLEMETRICS, req,
+          ret);
     } else if (actionName.equals(ConnectorParams.STATS_SET_DISABLEMETRICS)) {
-      handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_DISABLEMETRICS, req, ret);
+      handleChangeConfigurationRequest(executorId, ConnectorParams.STATS_SET_DISABLEMETRICS, req,
+          ret);
     }
 
     writeJSON(resp, ret);
@@ -98,52 +104,48 @@ public class StatsServlet extends LoginAbstractAzkabanServlet {
 
   /**
    * Get all metrics tracked by the given executor
-   *
-   * @param executorId
-   * @param req
-   * @param ret
    */
-  private void handleGetAllMetricName(int executorId, HttpServletRequest req,
-    HashMap<String, Object> ret) throws IOException {
-    Map<String, Object> result;
+  private void handleGetAllMetricName(final int executorId, final HttpServletRequest req,
+      final HashMap<String, Object> ret) throws IOException {
+    final Map<String, Object> result;
     try {
       result =
-        execManager.callExecutorStats(executorId,
-          ConnectorParams.STATS_GET_ALLMETRICSNAME,
-          (Pair<String, String>[]) null);
+          this.execManager.callExecutorStats(executorId,
+              ConnectorParams.STATS_GET_ALLMETRICSNAME,
+              (Pair<String, String>[]) null);
 
       if (result.containsKey(ConnectorParams.RESPONSE_ERROR)) {
         ret.put("error", result.get(ConnectorParams.RESPONSE_ERROR).toString());
       } else {
         ret.put("metricList", result.get("data"));
       }
-    } catch (ExecutorManagerException e) {
+    } catch (final ExecutorManagerException e) {
       logger.error(e.getMessage(), e);
       ret.put("error", "Failed to fetch metric names for executor : "
-        + executorId);
+          + executorId);
     }
   }
 
   /**
    * Generic method to facilitate actionName action using Azkaban exec server
-   * @param executorId
-   * @param actionName  Name of the action
-   * @throws ExecutorManagerException
+   *
+   * @param actionName Name of the action
    */
-  private void handleChangeConfigurationRequest(int executorId, String actionName, HttpServletRequest req, HashMap<String, Object> ret)
+  private void handleChangeConfigurationRequest(final int executorId, final String actionName,
+      final HttpServletRequest req, final HashMap<String, Object> ret)
       throws ServletException, IOException {
     try {
-      Map<String, Object> result =
-        execManager
-          .callExecutorStats(executorId, actionName, getAllParams(req));
+      final Map<String, Object> result =
+          this.execManager
+              .callExecutorStats(executorId, actionName, getAllParams(req));
       if (result.containsKey(ConnectorParams.RESPONSE_ERROR)) {
         ret.put(ConnectorParams.RESPONSE_ERROR,
-          result.get(ConnectorParams.RESPONSE_ERROR).toString());
+            result.get(ConnectorParams.RESPONSE_ERROR).toString());
       } else {
         ret.put(ConnectorParams.STATUS_PARAM,
-          result.get(ConnectorParams.STATUS_PARAM));
+            result.get(ConnectorParams.STATUS_PARAM));
       }
-    } catch (ExecutorManagerException ex) {
+    } catch (final ExecutorManagerException ex) {
       logger.error(ex.getMessage(), ex);
       ret.put("error", "Failed to change config change");
     }
@@ -151,24 +153,21 @@ public class StatsServlet extends LoginAbstractAzkabanServlet {
 
   /**
    * Get metric snapshots for a metric and date specification
-   * @param executorId
-   * @throws ServletException
-   * @throws ExecutorManagerException
    */
-  private void handleGetMetricHistory(int executorId, HttpServletRequest req,
-    HashMap<String, Object> ret, User user) throws IOException,
-    ServletException {
+  private void handleGetMetricHistory(final int executorId, final HttpServletRequest req,
+      final HashMap<String, Object> ret, final User user) throws IOException,
+      ServletException {
     try {
-      Map<String, Object> result =
-        execManager.callExecutorStats(executorId,
-          ConnectorParams.STATS_GET_METRICHISTORY, getAllParams(req));
+      final Map<String, Object> result =
+          this.execManager.callExecutorStats(executorId,
+              ConnectorParams.STATS_GET_METRICHISTORY, getAllParams(req));
       if (result.containsKey(ConnectorParams.RESPONSE_ERROR)) {
         ret.put(ConnectorParams.RESPONSE_ERROR,
-          result.get(ConnectorParams.RESPONSE_ERROR).toString());
+            result.get(ConnectorParams.RESPONSE_ERROR).toString());
       } else {
         ret.put("data", result.get("data"));
       }
-    } catch (ExecutorManagerException ex) {
+    } catch (final ExecutorManagerException ex) {
       logger.error(ex.getMessage(), ex);
       ret.put("error", "Failed to fetch metric history");
     }
@@ -178,9 +177,10 @@ public class StatsServlet extends LoginAbstractAzkabanServlet {
    * @throws ExecutorManagerException
    *
    */
-  private void handleStatePageLoad(HttpServletRequest req, HttpServletResponse resp, Session session)
+  private void handleStatePageLoad(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session)
       throws ServletException {
-    Page page = newPage(req, resp, session, "azkaban/webapp/servlet/velocity/statsPage.vm");
+    final Page page = newPage(req, resp, session, "azkaban/webapp/servlet/velocity/statsPage.vm");
     if (!hasPermission(session.getUser(), Permission.Type.METRICS)) {
       page.add("errorMsg", "User " + session.getUser().getUserId() + " has no permission.");
       page.render();
@@ -188,20 +188,20 @@ public class StatsServlet extends LoginAbstractAzkabanServlet {
     }
 
     try {
-      Collection<Executor> executors = execManager.getAllActiveExecutors();
+      final Collection<Executor> executors = this.execManager.getAllActiveExecutors();
       page.add("executorList", executors);
 
-      Map<String, Object> result =
-        execManager.callExecutorStats(executors.iterator().next().getId(),
-          ConnectorParams.STATS_GET_ALLMETRICSNAME,
-          (Pair<String, String>[]) null);
+      final Map<String, Object> result =
+          this.execManager.callExecutorStats(executors.iterator().next().getId(),
+              ConnectorParams.STATS_GET_ALLMETRICSNAME,
+              (Pair<String, String>[]) null);
       if (result.containsKey(ConnectorParams.RESPONSE_ERROR)) {
         page.add("errorMsg", result.get(ConnectorParams.RESPONSE_ERROR)
-          .toString());
+            .toString());
       } else {
         page.add("metricList", result.get("data"));
       }
-    } catch (Exception e) {
+    } catch (final Exception e) {
       logger.error(e.getMessage(), e);
       page.add("errorMsg", "Failed to get a response from Azkaban exec server");
     }
@@ -210,14 +210,17 @@ public class StatsServlet extends LoginAbstractAzkabanServlet {
   }
 
   @Override
-  protected void handlePost(HttpServletRequest req, HttpServletResponse resp, Session session) throws ServletException,
+  protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session)
+      throws ServletException,
       IOException {
   }
 
-  protected boolean hasPermission(User user, Permission.Type type) {
-    for (String roleName : user.getRoles()) {
-      Role role = userManager.getRole(roleName);
-      if (role.getPermission().isPermissionSet(type) || role.getPermission().isPermissionSet(Permission.Type.ADMIN)) {
+  protected boolean hasPermission(final User user, final Permission.Type type) {
+    for (final String roleName : user.getRoles()) {
+      final Role role = this.userManager.getRole(roleName);
+      if (role.getPermission().isPermissionSet(type) || role.getPermission()
+          .isPermissionSet(Permission.Type.ADMIN)) {
         return true;
       }
     }
@@ -226,17 +229,15 @@ public class StatsServlet extends LoginAbstractAzkabanServlet {
 
   /**
    * Parse all Http request params
-   * @return
    */
-  @SuppressWarnings({ "unchecked", "rawtypes" })
-  private Pair<String, String>[] getAllParams(HttpServletRequest req) {
-    List<Pair<String, String>> allParams = new LinkedList<Pair<String, String>>();
+  private Pair<String, String>[] getAllParams(final HttpServletRequest req) {
+    final List<Pair<String, String>> allParams = new LinkedList<>();
 
-    Iterator it = req.getParameterMap().entrySet().iterator();
+    final Iterator it = req.getParameterMap().entrySet().iterator();
     while (it.hasNext()) {
-      Map.Entry pairs = (Map.Entry) it.next();
-      for (Object value : (String[]) pairs.getValue()) {
-        allParams.add(new Pair<String, String>((String) pairs.getKey(), (String) value));
+      final Map.Entry pairs = (Map.Entry) it.next();
+      for (final Object value : (String[]) pairs.getValue()) {
+        allParams.add(new Pair<>((String) pairs.getKey(), (String) value));
       }
     }
 
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/TriggerManagerServlet.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/TriggerManagerServlet.java
index 18cdcd9..de6f270 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/TriggerManagerServlet.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/TriggerManagerServlet.java
@@ -16,41 +16,39 @@
 
 package azkaban.webapp.servlet;
 
+import azkaban.server.session.Session;
+import azkaban.trigger.Trigger;
+import azkaban.trigger.TriggerManager;
+import azkaban.trigger.TriggerManagerException;
+import azkaban.user.User;
+import azkaban.webapp.AzkabanWebServer;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import org.apache.log4j.Logger;
 
-import azkaban.server.session.Session;
-import azkaban.trigger.Trigger;
-import azkaban.trigger.TriggerManager;
-import azkaban.trigger.TriggerManagerException;
-import azkaban.user.User;
-import azkaban.webapp.AzkabanWebServer;
-
 public class TriggerManagerServlet extends LoginAbstractAzkabanServlet {
+
   private static final long serialVersionUID = 1L;
   private static final Logger logger = Logger
       .getLogger(TriggerManagerServlet.class);
   private TriggerManager triggerManager;
 
   @Override
-  public void init(ServletConfig config) throws ServletException {
+  public void init(final ServletConfig config) throws ServletException {
     super.init(config);
-    AzkabanWebServer server = (AzkabanWebServer) getApplication();
-    triggerManager = server.getTriggerManager();
+    final AzkabanWebServer server = (AzkabanWebServer) getApplication();
+    this.triggerManager = server.getTriggerManager();
   }
 
   @Override
-  protected void handleGet(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws ServletException, IOException {
+  protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws ServletException, IOException {
     if (hasParam(req, "ajax")) {
       handleAJAXAction(req, resp, session);
     } else {
@@ -58,17 +56,17 @@ public class TriggerManagerServlet extends LoginAbstractAzkabanServlet {
     }
   }
 
-  private void handleAJAXAction(HttpServletRequest req,
-      HttpServletResponse resp, Session session) throws ServletException,
+  private void handleAJAXAction(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) throws ServletException,
       IOException {
-    HashMap<String, Object> ret = new HashMap<String, Object>();
-    String ajaxName = getParam(req, "ajax");
+    final HashMap<String, Object> ret = new HashMap<>();
+    final String ajaxName = getParam(req, "ajax");
 
     try {
       if (ajaxName.equals("expireTrigger")) {
         ajaxExpireTrigger(req, ret, session.getUser());
       }
-    } catch (Exception e) {
+    } catch (final Exception e) {
       ret.put("error", e.getMessage());
     }
 
@@ -77,39 +75,39 @@ public class TriggerManagerServlet extends LoginAbstractAzkabanServlet {
     }
   }
 
-  private void handleGetAllSchedules(HttpServletRequest req,
-      HttpServletResponse resp, Session session) throws ServletException,
+  private void handleGetAllSchedules(final HttpServletRequest req,
+      final HttpServletResponse resp, final Session session) throws ServletException,
       IOException {
 
-    Page page =
+    final Page page =
         newPage(req, resp, session,
             "azkaban/webapp/servlet/velocity/triggerspage.vm");
 
-    List<Trigger> triggers = triggerManager.getTriggers();
+    final List<Trigger> triggers = this.triggerManager.getTriggers();
     page.add("triggers", triggers);
     page.render();
   }
 
   @Override
-  protected void handlePost(HttpServletRequest req, HttpServletResponse resp,
-      Session session) throws ServletException, IOException {
+  protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session) throws ServletException, IOException {
     if (hasParam(req, "ajax")) {
       handleAJAXAction(req, resp, session);
     }
   }
 
-  private void ajaxExpireTrigger(HttpServletRequest req,
-      Map<String, Object> ret, User user) throws ServletException,
+  private void ajaxExpireTrigger(final HttpServletRequest req,
+      final Map<String, Object> ret, final User user) throws ServletException,
       TriggerManagerException {
-    int triggerId = getIntParam(req, "triggerId");
-    Trigger t = triggerManager.getTrigger(triggerId);
+    final int triggerId = getIntParam(req, "triggerId");
+    final Trigger t = this.triggerManager.getTrigger(triggerId);
     if (t == null) {
       ret.put("message", "Trigger with ID " + triggerId + " does not exist");
       ret.put("status", "error");
       return;
     }
 
-    triggerManager.expireTrigger(triggerId);
+    this.triggerManager.expireTrigger(triggerId);
     logger.info("User '" + user.getUserId() + " has removed trigger "
         + t.getDescription());
 
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/VelocityUtils.java b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/VelocityUtils.java
index 89aada8..cf2071f 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/servlet/VelocityUtils.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/servlet/VelocityUtils.java
@@ -21,21 +21,22 @@ import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
 
 public class VelocityUtils {
-  public String formatDate(long timestamp) {
+
+  public String formatDate(final long timestamp) {
     return formatDate(timestamp, "yyyy-MM-dd HH:mm:ss");
   }
 
-  public String formatDate(DateTime date) {
+  public String formatDate(final DateTime date) {
     return formatDate(date, "yyyy-MM-dd HH:mm:ss");
   }
 
-  public String formatDate(long timestamp, String format) {
-    DateTimeFormatter f = DateTimeFormat.forPattern(format);
+  public String formatDate(final long timestamp, final String format) {
+    final DateTimeFormatter f = DateTimeFormat.forPattern(format);
     return f.print(timestamp);
   }
 
-  public String formatDate(DateTime date, String format) {
-    DateTimeFormatter f = DateTimeFormat.forPattern(format);
+  public String formatDate(final DateTime date, final String format) {
+    final DateTimeFormatter f = DateTimeFormat.forPattern(format);
     return f.print(date);
   }
 }
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/WebMetrics.java b/azkaban-web-server/src/main/java/azkaban/webapp/WebMetrics.java
index 36ba760..2c8c695 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/WebMetrics.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/WebMetrics.java
@@ -18,10 +18,8 @@ package azkaban.webapp;
 
 import azkaban.metrics.MetricsManager;
 import azkaban.metrics.MetricsUtility;
-
 import com.codahale.metrics.Meter;
 import com.codahale.metrics.MetricRegistry;
-
 import java.util.concurrent.atomic.AtomicLong;
 
 
@@ -41,10 +39,10 @@ public enum WebMetrics {
   private final AtomicLong logFetchLatency = new AtomicLong(0L);
 
   WebMetrics() {
-    registry = MetricsManager.INSTANCE.getRegistry();
-    webGetCall = MetricsUtility.addMeter("Web-Get-Call-Meter", registry);
-    webPostCall = MetricsUtility.addMeter("Web-Post-Call-Meter", registry);
-    MetricsUtility.addGauge("fetchLogLatency", registry, logFetchLatency::get);
+    this.registry = MetricsManager.INSTANCE.getRegistry();
+    this.webGetCall = MetricsUtility.addMeter("Web-Get-Call-Meter", this.registry);
+    this.webPostCall = MetricsUtility.addMeter("Web-Post-Call-Meter", this.registry);
+    MetricsUtility.addGauge("fetchLogLatency", this.registry, this.logFetchLatency::get);
   }
 
   public void markWebGetCall() {
@@ -55,15 +53,15 @@ public enum WebMetrics {
      * 1). drop wizard metrics deals with concurrency internally;
      * 2). mark is basically a math addition operation, which should not cause race condition issue.
      */
-    webGetCall.mark();
+    this.webGetCall.mark();
   }
 
   public void markWebPostCall() {
 
-    webPostCall.mark();
+    this.webPostCall.mark();
   }
 
-  public void setFetchLogLatency(long milliseconds) {
-    logFetchLatency.set(milliseconds);
+  public void setFetchLogLatency(final long milliseconds) {
+    this.logFetchLatency.set(milliseconds);
   }
 }
diff --git a/azkaban-web-server/src/main/java/azkaban/webapp/WebServerProvider.java b/azkaban-web-server/src/main/java/azkaban/webapp/WebServerProvider.java
index 1ffb6a5..c853928 100644
--- a/azkaban-web-server/src/main/java/azkaban/webapp/WebServerProvider.java
+++ b/azkaban-web-server/src/main/java/azkaban/webapp/WebServerProvider.java
@@ -17,6 +17,8 @@
 
 package azkaban.webapp;
 
+import static java.util.Objects.requireNonNull;
+
 import azkaban.Constants;
 import azkaban.utils.Props;
 import com.google.inject.Inject;
@@ -28,10 +30,9 @@ import org.mortbay.jetty.Server;
 import org.mortbay.jetty.bio.SocketConnector;
 import org.mortbay.jetty.security.SslSocketConnector;
 
-import static java.util.Objects.*;
-
 
 public class WebServerProvider implements Provider<Server> {
+
   private static final Logger logger = Logger.getLogger(WebServerProvider.class);
   private static final int MAX_HEADER_BUFFER_SIZE = 10 * 1024 * 1024;
 
@@ -40,33 +41,36 @@ public class WebServerProvider implements Provider<Server> {
 
   @Override
   public Server get() {
-    requireNonNull(props);
+    requireNonNull(this.props);
 
-    final int maxThreads = props.getInt("jetty.maxThreads", Constants.DEFAULT_JETTY_MAX_THREAD_COUNT);
-    boolean isStatsOn = props.getBoolean("jetty.connector.stats", true);
+    final int maxThreads = this.props
+        .getInt("jetty.maxThreads", Constants.DEFAULT_JETTY_MAX_THREAD_COUNT);
+    final boolean isStatsOn = this.props.getBoolean("jetty.connector.stats", true);
     logger.info("Setting up connector with stats on: " + isStatsOn);
 
-    boolean ssl;
-    int port;
+    final boolean ssl;
+    final int port;
     final Server server = new Server();
-    if (props.getBoolean("jetty.use.ssl", true)) {
-      int sslPortNumber = props.getInt("jetty.ssl.port", Constants.DEFAULT_SSL_PORT_NUMBER);
+    if (this.props.getBoolean("jetty.use.ssl", true)) {
+      final int sslPortNumber = this.props
+          .getInt("jetty.ssl.port", Constants.DEFAULT_SSL_PORT_NUMBER);
       port = sslPortNumber;
       ssl = true;
       logger.info("Setting up Jetty Https Server with port:" + sslPortNumber
           + " and numThreads:" + maxThreads);
 
-      SslSocketConnector secureConnector = new SslSocketConnector();
+      final SslSocketConnector secureConnector = new SslSocketConnector();
       secureConnector.setPort(sslPortNumber);
-      secureConnector.setKeystore(props.getString("jetty.keystore"));
-      secureConnector.setPassword(props.getString("jetty.password"));
-      secureConnector.setKeyPassword(props.getString("jetty.keypassword"));
-      secureConnector.setTruststore(props.getString("jetty.truststore"));
-      secureConnector.setTrustPassword(props.getString("jetty.trustpassword"));
+      secureConnector.setKeystore(this.props.getString("jetty.keystore"));
+      secureConnector.setPassword(this.props.getString("jetty.password"));
+      secureConnector.setKeyPassword(this.props.getString("jetty.keypassword"));
+      secureConnector.setTruststore(this.props.getString("jetty.truststore"));
+      secureConnector.setTrustPassword(this.props.getString("jetty.trustpassword"));
       secureConnector.setHeaderBufferSize(MAX_HEADER_BUFFER_SIZE);
 
       // set up vulnerable cipher suites to exclude
-      List<String> cipherSuitesToExclude = props.getStringList("jetty.excludeCipherSuites");
+      final List<String> cipherSuitesToExclude = this.props
+          .getStringList("jetty.excludeCipherSuites");
       logger.info("Excluded Cipher Suites: " + String.valueOf(cipherSuitesToExclude));
       if (cipherSuitesToExclude != null && !cipherSuitesToExclude.isEmpty()) {
         secureConnector.setExcludeCipherSuites(cipherSuitesToExclude.toArray(new String[0]));
@@ -75,15 +79,15 @@ public class WebServerProvider implements Provider<Server> {
       server.addConnector(secureConnector);
     } else {
       ssl = false;
-      port = props.getInt("jetty.port", Constants.DEFAULT_PORT_NUMBER);
-      SocketConnector connector = new SocketConnector();
+      port = this.props.getInt("jetty.port", Constants.DEFAULT_PORT_NUMBER);
+      final SocketConnector connector = new SocketConnector();
       connector.setPort(port);
       connector.setHeaderBufferSize(MAX_HEADER_BUFFER_SIZE);
       server.addConnector(connector);
     }
 
     // setting stats configuration for connectors
-    for (Connector connector : server.getConnectors()) {
+    for (final Connector connector : server.getConnectors()) {
       connector.setStatsOn(isStatsOn);
     }
 
diff --git a/azkaban-web-server/src/restli/java/azkaban/restli/ProjectManagerResource.java b/azkaban-web-server/src/restli/java/azkaban/restli/ProjectManagerResource.java
index 8447ac3..4112f81 100644
--- a/azkaban-web-server/src/restli/java/azkaban/restli/ProjectManagerResource.java
+++ b/azkaban-web-server/src/restli/java/azkaban/restli/ProjectManagerResource.java
@@ -15,17 +15,6 @@
  */
 package azkaban.restli;
 
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Map;
-
-import javax.servlet.ServletException;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.log4j.Logger;
-
 import azkaban.project.Project;
 import azkaban.project.ProjectManager;
 import azkaban.project.ProjectManagerException;
@@ -36,16 +25,24 @@ import azkaban.user.UserManagerException;
 import azkaban.utils.Props;
 import azkaban.utils.Utils;
 import azkaban.webapp.AzkabanWebServer;
-
 import com.linkedin.restli.common.HttpStatus;
+import com.linkedin.restli.server.RestLiServiceException;
 import com.linkedin.restli.server.annotations.Action;
 import com.linkedin.restli.server.annotations.ActionParam;
 import com.linkedin.restli.server.annotations.RestLiActions;
 import com.linkedin.restli.server.resources.ResourceContextHolder;
-import com.linkedin.restli.server.RestLiServiceException;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Map;
+import javax.servlet.ServletException;
+import org.apache.commons.io.FileUtils;
+import org.apache.log4j.Logger;
 
 @RestLiActions(name = "project", namespace = "azkaban.restli")
 public class ProjectManagerResource extends ResourceContextHolder {
+
   private static final Logger logger = Logger
       .getLogger(ProjectManagerResource.class);
 
@@ -54,25 +51,25 @@ public class ProjectManagerResource extends ResourceContextHolder {
   }
 
   @Action(name = "deploy")
-  public String deploy(@ActionParam("sessionId") String sessionId,
-      @ActionParam("projectName") String projectName,
-      @ActionParam("packageUrl") String packageUrl)
+  public String deploy(@ActionParam("sessionId") final String sessionId,
+      @ActionParam("projectName") final String projectName,
+      @ActionParam("packageUrl") final String packageUrl)
       throws ProjectManagerException, RestLiServiceException, UserManagerException,
       ServletException, IOException {
     logger.info("Deploy called. {sessionId: " + sessionId + ", projectName: "
         + projectName + ", packageUrl:" + packageUrl + "}");
 
-    String ip = ResourceUtils.getRealClientIpAddr(this.getContext());
-    User user = ResourceUtils.getUserFromSessionId(sessionId, ip);
-    ProjectManager projectManager = getAzkaban().getProjectManager();
-    Project project = projectManager.getProject(projectName);
+    final String ip = ResourceUtils.getRealClientIpAddr(this.getContext());
+    final User user = ResourceUtils.getUserFromSessionId(sessionId, ip);
+    final ProjectManager projectManager = getAzkaban().getProjectManager();
+    final Project project = projectManager.getProject(projectName);
     if (project == null) {
-      String errorMsg = "Project '" + projectName + "' not found.";
+      final String errorMsg = "Project '" + projectName + "' not found.";
       throw new RestLiServiceException(HttpStatus.S_400_BAD_REQUEST, errorMsg);
     }
 
     if (!ResourceUtils.hasPermission(project, user, Permission.Type.WRITE)) {
-      String errorMsg =
+      final String errorMsg =
           "User " + user.getUserId()
               + " has no permission to write to project " + project.getName();
       logger.error(errorMsg);
@@ -83,15 +80,15 @@ public class ProjectManagerResource extends ResourceContextHolder {
     URL url = null;
     try {
       url = new URL(packageUrl);
-    } catch (MalformedURLException e) {
-      String errorMsg = "URL " + packageUrl + " is malformed.";
+    } catch (final MalformedURLException e) {
+      final String errorMsg = "URL " + packageUrl + " is malformed.";
       logger.error(errorMsg, e);
       throw new RestLiServiceException(HttpStatus.S_400_BAD_REQUEST, errorMsg);
     }
 
-    String filename = getFileName(url.getFile());
-    File tempDir = Utils.createTempDir();
-    File archiveFile = new File(tempDir, filename);
+    final String filename = getFileName(url.getFile());
+    final File tempDir = Utils.createTempDir();
+    final File archiveFile = new File(tempDir, filename);
     try {
       // Since zip files can be large, don't specify an explicit read or
       // connection
@@ -101,8 +98,8 @@ public class ProjectManagerResource extends ResourceContextHolder {
       FileUtils.copyURLToFile(url, archiveFile);
 
       logger.info("Downloaded to " + archiveFile.toString());
-    } catch (IOException e) {
-      String errorMsg =
+    } catch (final IOException e) {
+      final String errorMsg =
           "Download of URL " + packageUrl + " to " + archiveFile.toString()
               + " failed";
       logger.error(errorMsg, e);
@@ -115,12 +112,13 @@ public class ProjectManagerResource extends ResourceContextHolder {
     try {
       // Check if project upload runs into any errors, such as the file
       // having blacklisted jars
-      Props props = new Props();
-      Map<String, ValidationReport> reports = projectManager.uploadProject(project, archiveFile, "zip", user, props);
+      final Props props = new Props();
+      final Map<String, ValidationReport> reports = projectManager
+          .uploadProject(project, archiveFile, "zip", user, props);
       checkReports(reports);
       return Integer.toString(project.getVersion());
-    } catch (ProjectManagerException e) {
-      String errorMsg = "Upload of project " + project + " from " + archiveFile + " failed";
+    } catch (final ProjectManagerException e) {
+      final String errorMsg = "Upload of project " + project + " from " + archiveFile + " failed";
       logger.error(errorMsg, e);
       throw e;
     } finally {
@@ -130,13 +128,13 @@ public class ProjectManagerResource extends ResourceContextHolder {
     }
   }
 
-  void checkReports(Map<String, ValidationReport> reports) throws RestLiServiceException {
-    StringBuffer errorMsgs = new StringBuffer();
-    for (Map.Entry<String, ValidationReport> reportEntry : reports.entrySet()) {
-      ValidationReport report = reportEntry.getValue();
+  void checkReports(final Map<String, ValidationReport> reports) throws RestLiServiceException {
+    final StringBuffer errorMsgs = new StringBuffer();
+    for (final Map.Entry<String, ValidationReport> reportEntry : reports.entrySet()) {
+      final ValidationReport report = reportEntry.getValue();
       if (!report.getErrorMsgs().isEmpty()) {
         errorMsgs.append("Validator " + reportEntry.getKey() + " reports errors: ");
-        for (String msg : report.getErrorMsgs()) {
+        for (final String msg : report.getErrorMsgs()) {
           errorMsgs.append(msg + System.getProperty("line.separator"));
         }
       }
@@ -146,7 +144,7 @@ public class ProjectManagerResource extends ResourceContextHolder {
     }
   }
 
-  private String getFileName(String file) {
+  private String getFileName(final String file) {
     return file.substring(file.lastIndexOf("/") + 1);
   }
 }
diff --git a/azkaban-web-server/src/restli/java/azkaban/restli/ResourceUtils.java b/azkaban-web-server/src/restli/java/azkaban/restli/ResourceUtils.java
index ccb0a18..e55e555 100644
--- a/azkaban-web-server/src/restli/java/azkaban/restli/ResourceUtils.java
+++ b/azkaban-web-server/src/restli/java/azkaban/restli/ResourceUtils.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2014 LinkedIn Corp.
- * 
+ *
  * Licensed 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
@@ -16,6 +16,7 @@
 package azkaban.restli;
 
 import azkaban.project.Project;
+import azkaban.server.session.Session;
 import azkaban.user.Permission;
 import azkaban.user.Role;
 import azkaban.user.User;
@@ -23,22 +24,20 @@ import azkaban.user.UserManager;
 import azkaban.user.UserManagerException;
 import azkaban.utils.WebUtils;
 import azkaban.webapp.AzkabanWebServer;
-import azkaban.server.session.Session;
 import com.linkedin.restli.server.ResourceContext;
-
 import java.util.Map;
 
 public class ResourceUtils {
 
-  public static boolean hasPermission(Project project, User user,
-      Permission.Type type) {
-    UserManager userManager = AzkabanWebServer.getInstance().getUserManager();
+  public static boolean hasPermission(final Project project, final User user,
+      final Permission.Type type) {
+    final UserManager userManager = AzkabanWebServer.getInstance().getUserManager();
     if (project.hasPermission(user, type)) {
       return true;
     }
 
-    for (String roleName : user.getRoles()) {
-      Role role = userManager.getRole(roleName);
+    for (final String roleName : user.getRoles()) {
+      final Role role = userManager.getRole(roleName);
       if (role.getPermission().isPermissionSet(type)
           || role.getPermission().isPermissionSet(Permission.Type.ADMIN)) {
         return true;
@@ -48,9 +47,9 @@ public class ResourceUtils {
     return false;
   }
 
-  public static User getUserFromSessionId(String sessionId, String ip)
+  public static User getUserFromSessionId(final String sessionId, final String ip)
       throws UserManagerException {
-    Session session =
+    final Session session =
         AzkabanWebServer.getInstance().getSessionCache().getSession(sessionId);
     if (session == null) {
       throw new UserManagerException("Invalid session. Login required");
@@ -61,18 +60,18 @@ public class ResourceUtils {
     return session.getUser();
   }
 
-  public static String getRealClientIpAddr(ResourceContext context){
+  public static String getRealClientIpAddr(final ResourceContext context) {
 
     // If some upstream device added an X-Forwarded-For header
     // use it for the client ip
     // This will support scenarios where load balancers or gateways
     // front the Azkaban web server and a changing Ip address invalidates
     // the session
-    Map<String, String> headers = context.getRequestHeaders();
+    final Map<String, String> headers = context.getRequestHeaders();
 
-    WebUtils utils = new WebUtils();
+    final WebUtils utils = new WebUtils();
 
     return utils.getRealClientIpAddr(headers,
-            (String) context.getRawRequestContext().getLocalAttr("REMOTE_ADDR"));
+        (String) context.getRawRequestContext().getLocalAttr("REMOTE_ADDR"));
   }
 }
diff --git a/azkaban-web-server/src/restli/java/azkaban/restli/UserManagerResource.java b/azkaban-web-server/src/restli/java/azkaban/restli/UserManagerResource.java
index ed995c3..566a28a 100644
--- a/azkaban-web-server/src/restli/java/azkaban/restli/UserManagerResource.java
+++ b/azkaban-web-server/src/restli/java/azkaban/restli/UserManagerResource.java
@@ -16,23 +16,22 @@
 
 package azkaban.restli;
 
-import java.util.UUID;
-import javax.servlet.ServletException;
-import org.apache.log4j.Logger;
-
 import azkaban.restli.user.User;
+import azkaban.server.session.Session;
 import azkaban.user.UserManager;
 import azkaban.user.UserManagerException;
 import azkaban.webapp.AzkabanWebServer;
-import azkaban.server.session.Session;
-
 import com.linkedin.restli.server.annotations.Action;
 import com.linkedin.restli.server.annotations.ActionParam;
 import com.linkedin.restli.server.annotations.RestLiActions;
 import com.linkedin.restli.server.resources.ResourceContextHolder;
+import java.util.UUID;
+import javax.servlet.ServletException;
+import org.apache.log4j.Logger;
 
 @RestLiActions(name = "user", namespace = "azkaban.restli")
 public class UserManagerResource extends ResourceContextHolder {
+
   private static final Logger logger = Logger
       .getLogger(UserManagerResource.class);
 
@@ -41,14 +40,14 @@ public class UserManagerResource extends ResourceContextHolder {
   }
 
   @Action(name = "login")
-  public String login(@ActionParam("username") String username,
-      @ActionParam("password") String password) throws UserManagerException,
+  public String login(@ActionParam("username") final String username,
+      @ActionParam("password") final String password) throws UserManagerException,
       ServletException {
-    String ip = ResourceUtils.getRealClientIpAddr(this.getContext());
+    final String ip = ResourceUtils.getRealClientIpAddr(this.getContext());
     logger
         .info("Attempting to login for " + username + " from ip '" + ip + "'");
 
-    Session session = createSession(username, password, ip);
+    final Session session = createSession(username, password, ip);
 
     logger.info("Session id " + session.getSessionId() + " created for user '"
         + username + "' and ip " + ip);
@@ -56,36 +55,36 @@ public class UserManagerResource extends ResourceContextHolder {
   }
 
   @Action(name = "getUserFromSessionId")
-  public User getUserFromSessionId(@ActionParam("sessionId") String sessionId) {
-    String ip = ResourceUtils.getRealClientIpAddr(this.getContext());
-    Session session = getSessionFromSessionId(sessionId, ip);
-    azkaban.user.User azUser = session.getUser();
+  public User getUserFromSessionId(@ActionParam("sessionId") final String sessionId) {
+    final String ip = ResourceUtils.getRealClientIpAddr(this.getContext());
+    final Session session = getSessionFromSessionId(sessionId, ip);
+    final azkaban.user.User azUser = session.getUser();
 
     // Fill out the restli object with properties from the Azkaban user
-    User user = new User();
+    final User user = new User();
     user.setUserId(azUser.getUserId());
     user.setEmail(azUser.getEmail());
     return user;
   }
 
-  private Session createSession(String username, String password, String ip)
+  private Session createSession(final String username, final String password, final String ip)
       throws UserManagerException, ServletException {
-    UserManager manager = getAzkaban().getUserManager();
-    azkaban.user.User user = manager.getUser(username, password);
+    final UserManager manager = getAzkaban().getUserManager();
+    final azkaban.user.User user = manager.getUser(username, password);
 
-    String randomUID = UUID.randomUUID().toString();
-    Session session = new Session(randomUID, user, ip);
+    final String randomUID = UUID.randomUUID().toString();
+    final Session session = new Session(randomUID, user, ip);
     getAzkaban().getSessionCache().addSession(session);
 
     return session;
   }
 
-  private Session getSessionFromSessionId(String sessionId, String remoteIp) {
+  private Session getSessionFromSessionId(final String sessionId, final String remoteIp) {
     if (sessionId == null) {
       return null;
     }
 
-    Session session = getAzkaban().getSessionCache().getSession(sessionId);
+    final Session session = getAzkaban().getSessionCache().getSession(sessionId);
     // Check if the IP's are equal. If not, we invalidate the sesson.
     if (session == null || !remoteIp.equals(session.getIp())) {
       return null;
diff --git a/azkaban-web-server/src/test/java/azkaban/fixture/FileAssertion.java b/azkaban-web-server/src/test/java/azkaban/fixture/FileAssertion.java
index f0e1164..f862be6 100644
--- a/azkaban-web-server/src/test/java/azkaban/fixture/FileAssertion.java
+++ b/azkaban-web-server/src/test/java/azkaban/fixture/FileAssertion.java
@@ -11,6 +11,7 @@ import org.junit.Assert;
  * The type File assertion.
  */
 public class FileAssertion {
+
   /**
    * Assert the given string equals the given file's content.
    *
@@ -18,9 +19,11 @@ public class FileAssertion {
    * @param actual the actual string
    * @throws IOException the io exception
    */
-  public static void assertStringEqualFileContent(String expectedFilePath, String actual)
+  public static void assertStringEqualFileContent(final String expectedFilePath,
+      final String actual)
       throws IOException {
-    String expected = new String(Files.readAllBytes(Paths.get(expectedFilePath)), StandardCharsets.UTF_8);
+    final String expected = new String(Files.readAllBytes(Paths.get(expectedFilePath)),
+        StandardCharsets.UTF_8);
     Assert.assertEquals(expected, actual);
   }
 
@@ -33,7 +36,7 @@ public class FileAssertion {
    * @param content the content
    * @return string
    */
-  public static String surroundWithHtmlTag(String content) {
+  public static String surroundWithHtmlTag(final String content) {
     return "<html>\n" + content + "</html>\n";
   }
 }
diff --git a/azkaban-web-server/src/test/java/azkaban/fixture/MockLoginAzkabanServlet.java b/azkaban-web-server/src/test/java/azkaban/fixture/MockLoginAzkabanServlet.java
index e266711..2ffadcf 100644
--- a/azkaban-web-server/src/test/java/azkaban/fixture/MockLoginAzkabanServlet.java
+++ b/azkaban-web-server/src/test/java/azkaban/fixture/MockLoginAzkabanServlet.java
@@ -17,127 +17,127 @@
 package azkaban.fixture;
 
 
-import azkaban.server.AzkabanServer;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
 import azkaban.server.session.Session;
 import azkaban.server.session.SessionCache;
 import azkaban.user.UserManager;
 import azkaban.utils.Props;
 import azkaban.webapp.AzkabanWebServer;
 import azkaban.webapp.servlet.LoginAbstractAzkabanServlet;
-import azkaban.user.User;
-import org.apache.velocity.app.VelocityEngine;
-import org.mockito.Spy;
-import org.mortbay.jetty.Server;
-
-import javax.servlet.ServletConfig;
+import java.io.IOException;
 import javax.servlet.ServletException;
-import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
-import java.io.IOException;
-import java.util.UUID;
-
-import static org.mockito.Mockito.*;
+import org.apache.velocity.app.VelocityEngine;
+import org.mortbay.jetty.Server;
 
 public class MockLoginAzkabanServlet extends LoginAbstractAzkabanServlet {
 
-    private static final String SESSION_ID_NAME = "azkaban.browser.session.id";
-
-    public static HttpServletRequest getRequestWithNoUpstream(String clientIp, String sessionId, String requestMethod){
+  private static final String SESSION_ID_NAME = "azkaban.browser.session.id";
 
-        HttpServletRequest req = mock(HttpServletRequest.class);
+  public static HttpServletRequest getRequestWithNoUpstream(final String clientIp,
+      final String sessionId,
+      final String requestMethod) {
 
-        when(req.getRemoteAddr()).thenReturn(clientIp);
-        when(req.getHeader("x-forwarded-for")).thenReturn(null);
-        when(req.getMethod()).thenReturn(requestMethod);
-        when(req.getContentType()).thenReturn("application/x-www-form-urlencoded");
+    final HttpServletRequest req = mock(HttpServletRequest.class);
 
-        // Requires sessionId to be passed that is in the application's session cache
-        when(req.getParameter("session.id")).thenReturn(sessionId);
+    when(req.getRemoteAddr()).thenReturn(clientIp);
+    when(req.getHeader("x-forwarded-for")).thenReturn(null);
+    when(req.getMethod()).thenReturn(requestMethod);
+    when(req.getContentType()).thenReturn("application/x-www-form-urlencoded");
 
-        return req;
-    }
+    // Requires sessionId to be passed that is in the application's session cache
+    when(req.getParameter("session.id")).thenReturn(sessionId);
 
-    public static HttpServletRequest getRequestWithUpstream(String clientIp, String upstreamIp, String sessionId, String requestMethod){
+    return req;
+  }
 
-        HttpServletRequest req = mock(HttpServletRequest.class);
+  public static HttpServletRequest getRequestWithUpstream(final String clientIp,
+      final String upstreamIp,
+      final String sessionId, final String requestMethod) {
 
-        when(req.getRemoteAddr()).thenReturn("2.2.2.2:9999");
-        when(req.getHeader("x-forwarded-for")).thenReturn(upstreamIp);
-        when(req.getMethod()).thenReturn(requestMethod);
-        when(req.getContentType()).thenReturn("application/x-www-form-urlencoded");
+    final HttpServletRequest req = mock(HttpServletRequest.class);
 
-        // Requires sessionId to be passed that is in the application's session cache
-        when(req.getParameter("session.id")).thenReturn(sessionId);
+    when(req.getRemoteAddr()).thenReturn("2.2.2.2:9999");
+    when(req.getHeader("x-forwarded-for")).thenReturn(upstreamIp);
+    when(req.getMethod()).thenReturn(requestMethod);
+    when(req.getContentType()).thenReturn("application/x-www-form-urlencoded");
 
-        return req;
-    }
+    // Requires sessionId to be passed that is in the application's session cache
+    when(req.getParameter("session.id")).thenReturn(sessionId);
 
-    public static HttpServletRequest getRequestWithMultipleUpstreams(String clientIp, String upstreamIp, String sessionId, String requestMethod){
+    return req;
+  }
 
-        HttpServletRequest req = mock(HttpServletRequest.class);
+  public static HttpServletRequest getRequestWithMultipleUpstreams(final String clientIp,
+      final String upstreamIp, final String sessionId, final String requestMethod) {
 
-        when(req.getRemoteAddr()).thenReturn("2.2.2.2:9999");
-        when(req.getHeader("x-forwarded-for")).thenReturn(upstreamIp + ",1.1.1.1,3.3.3.3:33333");
-        when(req.getMethod()).thenReturn(requestMethod);
-        when(req.getContentType()).thenReturn("application/x-www-form-urlencoded");
+    final HttpServletRequest req = mock(HttpServletRequest.class);
 
-        // Requires sessionId to be passed that is in the application's session cache
-        when(req.getParameter("session.id")).thenReturn(sessionId);
+    when(req.getRemoteAddr()).thenReturn("2.2.2.2:9999");
+    when(req.getHeader("x-forwarded-for")).thenReturn(upstreamIp + ",1.1.1.1,3.3.3.3:33333");
+    when(req.getMethod()).thenReturn(requestMethod);
+    when(req.getContentType()).thenReturn("application/x-www-form-urlencoded");
 
-        return req;
-    }
+    // Requires sessionId to be passed that is in the application's session cache
+    when(req.getParameter("session.id")).thenReturn(sessionId);
 
-    public static MockLoginAzkabanServlet getServletWithSession(String sessionId,
-                                                                String username, String clientIp)
-            throws Exception{
+    return req;
+  }
 
-        MockLoginAzkabanServlet servlet = new MockLoginAzkabanServlet();
+  public static MockLoginAzkabanServlet getServletWithSession(final String sessionId,
+      final String username, final String clientIp)
+      throws Exception {
 
-        Server server = mock(Server.class);
-        Props props = new Props();
-        UserManager userManager = mock(UserManager.class);
+    final MockLoginAzkabanServlet servlet = new MockLoginAzkabanServlet();
 
-        // Need to mock and inject an application instance into the servlet
-        AzkabanWebServer app = mock(AzkabanWebServer.class);
+    final Server server = mock(Server.class);
+    final Props props = new Props();
+    final UserManager userManager = mock(UserManager.class);
 
-        MockLoginAzkabanServlet servletSpy = spy(servlet);
+    // Need to mock and inject an application instance into the servlet
+    final AzkabanWebServer app = mock(AzkabanWebServer.class);
 
-        when(servletSpy.getApplication()).thenReturn(app);
+    final MockLoginAzkabanServlet servletSpy = spy(servlet);
 
-        // Create a concrete SessionCache so a session will get persisted
-        // and can get looked up
-        SessionCache cache = new SessionCache(props);
-        when(app.getSessionCache()).thenReturn(cache);
+    when(servletSpy.getApplication()).thenReturn(app);
 
-        // Need a valid object here when processing a request
-        when(app.getVelocityEngine()).thenReturn(mock(VelocityEngine.class));
+    // Create a concrete SessionCache so a session will get persisted
+    // and can get looked up
+    final SessionCache cache = new SessionCache(props);
+    when(app.getSessionCache()).thenReturn(cache);
 
-        // Construct and store a session in the servlet
-        azkaban.user.User user = mock(azkaban.user.User.class);
-        when(user.getEmail()).thenReturn(username + "@mail.com");
-        when(user.getUserId()).thenReturn(username);
+    // Need a valid object here when processing a request
+    when(app.getVelocityEngine()).thenReturn(mock(VelocityEngine.class));
 
-        Session session = new Session(sessionId, user, clientIp);
-        servletSpy.getApplication().getSessionCache().addSession(session);
+    // Construct and store a session in the servlet
+    final azkaban.user.User user = mock(azkaban.user.User.class);
+    when(user.getEmail()).thenReturn(username + "@mail.com");
+    when(user.getUserId()).thenReturn(username);
 
+    final Session session = new Session(sessionId, user, clientIp);
+    servletSpy.getApplication().getSessionCache().addSession(session);
 
-        // Return the servletSpy since we replaced implementation for 'getApplication'
-        return servletSpy;
-    }
+    // Return the servletSpy since we replaced implementation for 'getApplication'
+    return servletSpy;
+  }
 
-    @Override
-    protected void handleGet(HttpServletRequest req, HttpServletResponse resp, Session session)
-            throws ServletException, IOException {
+  @Override
+  protected void handleGet(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session)
+      throws ServletException, IOException {
 
-        resp.getWriter().write("SUCCESS_MOCK_LOGIN_SERVLET");
-    }
+    resp.getWriter().write("SUCCESS_MOCK_LOGIN_SERVLET");
+  }
 
-    @Override
-    protected void handlePost(HttpServletRequest req, HttpServletResponse resp, Session session)
-            throws ServletException, IOException {
+  @Override
+  protected void handlePost(final HttpServletRequest req, final HttpServletResponse resp,
+      final Session session)
+      throws ServletException, IOException {
 
-        resp.getWriter().write("SUCCESS_MOCK_LOGIN_SERVLET");
-    }
+    resp.getWriter().write("SUCCESS_MOCK_LOGIN_SERVLET");
+  }
 }
diff --git a/azkaban-web-server/src/test/java/azkaban/fixture/MockProject.java b/azkaban-web-server/src/test/java/azkaban/fixture/MockProject.java
index cbfb24c..684f268 100644
--- a/azkaban-web-server/src/test/java/azkaban/fixture/MockProject.java
+++ b/azkaban-web-server/src/test/java/azkaban/fixture/MockProject.java
@@ -11,30 +11,30 @@ import java.util.Date;
  * Provide a mock project.
  */
 public class MockProject {
+
   /**
    * Get mock project project.
    *
    * @return a mock project for testing
    */
-  public static Project getMockProject(){
-    Project project = new Project(1, "test_project");
+  public static Project getMockProject() {
+    final Project project = new Project(1, "test_project");
     project.setDescription("My project description");
     project.setLastModifiedUser("last_modified_user_name");
 
-    DateFormat dateFormat = new SimpleDateFormat("yyyy:MM:dd:HH:mm:ss");
+    final DateFormat dateFormat = new SimpleDateFormat("yyyy:MM:dd:HH:mm:ss");
     try {
-      Date modifiedDate = dateFormat.parse("2000:01:02:3:4:5");
+      final Date modifiedDate = dateFormat.parse("2000:01:02:3:4:5");
 
-      long modifiedTime = modifiedDate.getTime();
+      final long modifiedTime = modifiedDate.getTime();
       project.setLastModifiedTimestamp(modifiedTime);
 
-      Date createDate = dateFormat.parse("1999:06:07:8:9:10");
+      final Date createDate = dateFormat.parse("1999:06:07:8:9:10");
 
-      long createTime = createDate.getTime();
+      final long createTime = createDate.getTime();
 
       project.setCreateTimestamp(createTime);
-    }
-    catch (ParseException e) {
+    } catch (final ParseException e) {
       e.printStackTrace();
     }
     return project;
diff --git a/azkaban-web-server/src/test/java/azkaban/fixture/MockResourceContext.java b/azkaban-web-server/src/test/java/azkaban/fixture/MockResourceContext.java
index bce0e90..2796941 100644
--- a/azkaban-web-server/src/test/java/azkaban/fixture/MockResourceContext.java
+++ b/azkaban-web-server/src/test/java/azkaban/fixture/MockResourceContext.java
@@ -22,7 +22,6 @@ import com.linkedin.r2.message.rest.RestRequest;
 import com.linkedin.restli.server.PathKeys;
 import com.linkedin.restli.server.ProjectionMode;
 import com.linkedin.restli.server.ResourceContext;
-
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -30,113 +29,114 @@ import java.util.Map;
 
 public class MockResourceContext implements ResourceContext {
 
-    Map<String, String> requestHeaders;
-    RequestContext requestContext;
+  Map<String, String> requestHeaders;
+  RequestContext requestContext;
 
-    @Override
-    public RestRequest getRawRequest() {
-        return null;
-    }
+  public MockResourceContext() {
+    this.requestHeaders = new HashMap<>();
+    this.requestContext = new RequestContext();
+  }
 
-    @Override
-    public String getRequestMethod() {
-        return null;
-    }
+  public static MockResourceContext getResourceContextWithUpstream(final String clientIp,
+      final String upstream) {
+    final MockResourceContext ctx = new MockResourceContext();
 
-    @Override
-    public PathKeys getPathKeys() {
-        return null;
-    }
+    ctx.setLocalAttr("REMOTE_ADDR", clientIp);
+    ctx.setRequestHeader("X-Forwarded-For", upstream);
 
-    @Override
-    public MaskTree getProjectionMask() {
-        return null;
-    }
+    return ctx;
+  }
 
-    @Override
-    public boolean hasParameter(String key) {
-        return false;
-    }
+  public static MockResourceContext getResourceContextWithMultipleUpstreams(final String clientIp,
+      final String firstUpstream) {
+    final MockResourceContext ctx = new MockResourceContext();
 
-    @Override
-    public String getParameter(String key) {
-        return null;
-    }
+    ctx.setLocalAttr("REMOTE_ADDR", clientIp);
+    ctx.setRequestHeader("X-Forwarded-For", firstUpstream + ",55.55.55.55:55555,1.1.1.1:9999");
 
-    @Override
-    public Object getStructuredParameter(String key) {
-        return null;
-    }
+    return ctx;
+  }
 
-    @Override
-    public List<String> getParameterValues(String key) {
-        return null;
-    }
+  public static MockResourceContext getResourceContext(final String clientIp) {
+    final MockResourceContext ctx = new MockResourceContext();
 
-    public void setRequestHeader(String name, String value){
+    ctx.setLocalAttr("REMOTE_ADDR", clientIp);
 
-        this.requestHeaders.put(name, value);
-    }
+    return ctx;
+  }
 
-    @Override
-    public Map<String, String> getRequestHeaders() {
-        return this.requestHeaders;
-    }
+  @Override
+  public RestRequest getRawRequest() {
+    return null;
+  }
 
-    @Override
-    public void setResponseHeader(String name, String value) {
+  @Override
+  public String getRequestMethod() {
+    return null;
+  }
 
-    }
+  @Override
+  public PathKeys getPathKeys() {
+    return null;
+  }
 
-    @Override
-    public RequestContext getRawRequestContext() {
-        return this.requestContext;
-    }
+  @Override
+  public MaskTree getProjectionMask() {
+    return null;
+  }
 
-    @Override
-    public ProjectionMode getProjectionMode() {
-        return null;
-    }
+  @Override
+  public boolean hasParameter(final String key) {
+    return false;
+  }
 
-    @Override
-    public void setProjectionMode(ProjectionMode mode) {
+  @Override
+  public String getParameter(final String key) {
+    return null;
+  }
 
-    }
+  @Override
+  public Object getStructuredParameter(final String key) {
+    return null;
+  }
 
-    public void setLocalAttr(String name, String value){
-        requestContext.putLocalAttr(name, value);
-    }
+  @Override
+  public List<String> getParameterValues(final String key) {
+    return null;
+  }
 
-    public MockResourceContext(){
-        requestHeaders = new HashMap<>();
-        requestContext = new RequestContext();
-    }
+  public void setRequestHeader(final String name, final String value) {
 
-    public static MockResourceContext getResourceContextWithUpstream(String clientIp, String upstream){
-        MockResourceContext ctx = new MockResourceContext();
+    this.requestHeaders.put(name, value);
+  }
 
-        ctx.setLocalAttr("REMOTE_ADDR", clientIp);
-        ctx.setRequestHeader("X-Forwarded-For", upstream);
+  @Override
+  public Map<String, String> getRequestHeaders() {
+    return this.requestHeaders;
+  }
 
-        return ctx;
-    }
+  @Override
+  public void setResponseHeader(final String name, final String value) {
 
-    public static MockResourceContext getResourceContextWithMultipleUpstreams(String clientIp,
-                                                                              String firstUpstream){
-        MockResourceContext ctx = new MockResourceContext();
+  }
 
-        ctx.setLocalAttr("REMOTE_ADDR", clientIp);
-        ctx.setRequestHeader("X-Forwarded-For", firstUpstream + ",55.55.55.55:55555,1.1.1.1:9999");
+  @Override
+  public RequestContext getRawRequestContext() {
+    return this.requestContext;
+  }
 
-        return ctx;
-    }
+  @Override
+  public ProjectionMode getProjectionMode() {
+    return null;
+  }
 
-    public static MockResourceContext getResourceContext(String clientIp){
-        MockResourceContext ctx = new MockResourceContext();
+  @Override
+  public void setProjectionMode(final ProjectionMode mode) {
 
-        ctx.setLocalAttr("REMOTE_ADDR", clientIp);
+  }
 
-        return ctx;
-    }
+  public void setLocalAttr(final String name, final String value) {
+    this.requestContext.putLocalAttr(name, value);
+  }
 
 }
diff --git a/azkaban-web-server/src/test/java/azkaban/fixture/VelocityContextTestUtil.java b/azkaban-web-server/src/test/java/azkaban/fixture/VelocityContextTestUtil.java
index 9a77d41..a71f38a 100644
--- a/azkaban-web-server/src/test/java/azkaban/fixture/VelocityContextTestUtil.java
+++ b/azkaban-web-server/src/test/java/azkaban/fixture/VelocityContextTestUtil.java
@@ -9,6 +9,7 @@ import org.apache.velocity.tools.generic.EscapeTool;
  * The type Velocity context test util.
  */
 public class VelocityContextTestUtil {
+
   /**
    * Gets an instance of the velocity context
    *
@@ -17,9 +18,9 @@ public class VelocityContextTestUtil {
    * @return the instance
    */
   public static VelocityContext getInstance() {
-    VelocityContext context = new VelocityContext();
+    final VelocityContext context = new VelocityContext();
     context.put("esc", new EscapeTool());
-    WebUtils utils = new WebUtils();
+    final WebUtils utils = new WebUtils();
     context.put("utils", utils);
     return context;
   }
diff --git a/azkaban-web-server/src/test/java/azkaban/fixture/WebFileAssertion.java b/azkaban-web-server/src/test/java/azkaban/fixture/WebFileAssertion.java
index 52b5929..0ad0b84 100644
--- a/azkaban-web-server/src/test/java/azkaban/fixture/WebFileAssertion.java
+++ b/azkaban-web-server/src/test/java/azkaban/fixture/WebFileAssertion.java
@@ -7,6 +7,7 @@ import java.io.IOException;
  * Utility to assert based on expected files in the webserver project.
  */
 public class WebFileAssertion {
+
   private static final String EXPECTED_FILE_DIR = "src/test/expected/";
 
   /**
@@ -16,9 +17,10 @@ public class WebFileAssertion {
    * @param actual the actual
    * @throws IOException the io exception
    */
-  public static void assertStringEqualFileContent(String expectedFileName, String actual)
+  public static void assertStringEqualFileContent(final String expectedFileName,
+      final String actual)
       throws IOException {
-    String expectedFilePath = EXPECTED_FILE_DIR + expectedFileName;
+    final String expectedFilePath = EXPECTED_FILE_DIR + expectedFileName;
     FileAssertion.assertStringEqualFileContent(expectedFilePath, actual);
   }
 }
diff --git a/azkaban-web-server/src/test/java/azkaban/restli/DeployProjectTest.java b/azkaban-web-server/src/test/java/azkaban/restli/DeployProjectTest.java
index a42abcc..0555851 100644
--- a/azkaban-web-server/src/test/java/azkaban/restli/DeployProjectTest.java
+++ b/azkaban-web-server/src/test/java/azkaban/restli/DeployProjectTest.java
@@ -19,15 +19,12 @@ package azkaban.restli;
 import static org.junit.Assert.assertEquals;
 
 import azkaban.project.validator.ValidationReport;
-
 import com.linkedin.restli.common.HttpStatus;
 import com.linkedin.restli.server.RestLiServiceException;
-
 import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Set;
-
 import org.junit.Test;
 
 /**
@@ -38,10 +35,11 @@ import org.junit.Test;
  */
 
 public class DeployProjectTest {
+
   @Test
   public void testWarnedDeploy() {
-    ProjectManagerResource resource = new ProjectManagerResource();
-    Map<String, ValidationReport> reports = new LinkedHashMap<String, ValidationReport>();
+    final ProjectManagerResource resource = new ProjectManagerResource();
+    final Map<String, ValidationReport> reports = new LinkedHashMap<>();
     for (int i = 0; i < 3; i++) {
       addMockWarning(reports, "Test warn level info message.");
     }
@@ -52,8 +50,8 @@ public class DeployProjectTest {
 
   @Test
   public void testErrorDeploy() {
-    ProjectManagerResource resource = new ProjectManagerResource();
-    Map<String, ValidationReport> reports = new LinkedHashMap<String, ValidationReport>();
+    final ProjectManagerResource resource = new ProjectManagerResource();
+    final Map<String, ValidationReport> reports = new LinkedHashMap<>();
     for (int i = 0; i < 3; i++) {
       addMockError(reports, "Test error level info message.");
     }
@@ -61,7 +59,7 @@ public class DeployProjectTest {
     // report with errors. Uncaught exceptions will result in failure
     try {
       resource.checkReports(reports);
-    } catch (RestLiServiceException e) {
+    } catch (final RestLiServiceException e) {
       //Ensure we have the right status code and exit
       assertEquals(e.getStatus(), HttpStatus.S_400_BAD_REQUEST);
     }
@@ -69,14 +67,13 @@ public class DeployProjectTest {
 
   @Test
   public void testWarnErrorDeploy() {
-    ProjectManagerResource resource = new ProjectManagerResource();
-    Map<String, ValidationReport> reports = new LinkedHashMap<String, ValidationReport>();
+    final ProjectManagerResource resource = new ProjectManagerResource();
+    final Map<String, ValidationReport> reports = new LinkedHashMap<>();
     for (int i = 0; i < 7; i++) {
       // If i is even, make an error report, otherwise make a warning report
       if (i % 2 == 0) {
         addMockError(reports, "Test error level info message.");
-      }
-      else {
+      } else {
         addMockWarning(reports, "Test warn level info message.");
       }
     }
@@ -85,7 +82,7 @@ public class DeployProjectTest {
     // report with errors. Uncaught exceptions will result in failure
     try {
       resource.checkReports(reports);
-    } catch (RestLiServiceException e) {
+    } catch (final RestLiServiceException e) {
       //Ensure we have the right status code and exit
       assertEquals(e.getStatus(), HttpStatus.S_400_BAD_REQUEST);
     }
@@ -96,8 +93,8 @@ public class DeployProjectTest {
    */
   @Test
   public void testErrorMessageDeploy() {
-    ProjectManagerResource resource = new ProjectManagerResource();
-    Map<String, ValidationReport> reports = new LinkedHashMap<String, ValidationReport>();
+    final ProjectManagerResource resource = new ProjectManagerResource();
+    final Map<String, ValidationReport> reports = new LinkedHashMap<>();
 
     addMockError(reports, "This should show up.");
 
@@ -105,7 +102,7 @@ public class DeployProjectTest {
     // report with errors. Uncaught exceptions will result in failure
     try {
       resource.checkReports(reports);
-    } catch (RestLiServiceException e) {
+    } catch (final RestLiServiceException e) {
       //Ensure we have the right status code and exit
       assertEquals(e.getStatus(), HttpStatus.S_400_BAD_REQUEST);
       assertEquals(e.getMessage(), "Validator Error reports errors: This should show up."
@@ -113,17 +110,17 @@ public class DeployProjectTest {
     }
   }
 
-  private void addMockWarning(Map<String, ValidationReport> reports, String msg) {
-    Set<String> warnMsgs = new HashSet<String>();
-    ValidationReport warnRpt = new ValidationReport();
+  private void addMockWarning(final Map<String, ValidationReport> reports, final String msg) {
+    final Set<String> warnMsgs = new HashSet<>();
+    final ValidationReport warnRpt = new ValidationReport();
     warnMsgs.add(msg);
     warnRpt.addWarningMsgs(warnMsgs);
     reports.put("Warn", warnRpt);
   }
 
-  private void addMockError(Map<String, ValidationReport> reports, String msg) {
-    Set<String> errorMsgs = new HashSet<String>();
-    ValidationReport errorRpt = new ValidationReport();
+  private void addMockError(final Map<String, ValidationReport> reports, final String msg) {
+    final Set<String> errorMsgs = new HashSet<>();
+    final ValidationReport errorRpt = new ValidationReport();
     errorMsgs.add(msg);
     errorRpt.addErrorMsgs(errorMsgs);
     reports.put("Error", errorRpt);
diff --git a/azkaban-web-server/src/test/java/azkaban/restli/ResourceUtilsTest.java b/azkaban-web-server/src/test/java/azkaban/restli/ResourceUtilsTest.java
index c6203b5..ff2378b 100644
--- a/azkaban-web-server/src/test/java/azkaban/restli/ResourceUtilsTest.java
+++ b/azkaban-web-server/src/test/java/azkaban/restli/ResourceUtilsTest.java
@@ -16,62 +16,63 @@
 
 package azkaban.restli;
 
-import azkaban.fixture.MockResourceContext;
-
-import org.junit.Test;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
+import azkaban.fixture.MockResourceContext;
+import org.junit.Test;
+
 public class ResourceUtilsTest {
 
-    @Test
-    public void testWhenNoXForwardedForHeaderUseClientIp(){
+  @Test
+  public void testWhenNoXForwardedForHeaderUseClientIp() {
 
-        String clientIp = "127.0.0.1:10000";
-        MockResourceContext ctx = MockResourceContext.getResourceContext(clientIp);
-        assertNotNull(ctx);
+    final String clientIp = "127.0.0.1:10000";
+    final MockResourceContext ctx = MockResourceContext.getResourceContext(clientIp);
+    assertNotNull(ctx);
 
-        String ip = ResourceUtils.getRealClientIpAddr(ctx);
+    final String ip = ResourceUtils.getRealClientIpAddr(ctx);
 
-        assertEquals(ip, "127.0.0.1");
-    }
+    assertEquals(ip, "127.0.0.1");
+  }
 
-    @Test
-    public void testWhenClientIpNoPort(){
+  @Test
+  public void testWhenClientIpNoPort() {
 
-        String clientIp = "192.168.1.1";
-        MockResourceContext ctx = MockResourceContext.getResourceContext(clientIp);
-        assertNotNull(ctx);
+    final String clientIp = "192.168.1.1";
+    final MockResourceContext ctx = MockResourceContext.getResourceContext(clientIp);
+    assertNotNull(ctx);
 
-        String ip = ResourceUtils.getRealClientIpAddr(ctx);
+    final String ip = ResourceUtils.getRealClientIpAddr(ctx);
 
-        assertEquals(ip, "192.168.1.1");
-    }
+    assertEquals(ip, "192.168.1.1");
+  }
 
-    @Test
-    public void testWhenXForwardedForHeaderUseHeader(){
+  @Test
+  public void testWhenXForwardedForHeaderUseHeader() {
 
-        String clientIp = "127.0.0.1:10000";
-        String upstreamIp = "192.168.1.1:10000";
-        MockResourceContext ctx = MockResourceContext.getResourceContextWithUpstream(clientIp, upstreamIp);
-        assertNotNull(ctx);
+    final String clientIp = "127.0.0.1:10000";
+    final String upstreamIp = "192.168.1.1:10000";
+    final MockResourceContext ctx = MockResourceContext
+        .getResourceContextWithUpstream(clientIp, upstreamIp);
+    assertNotNull(ctx);
 
-        String ip = ResourceUtils.getRealClientIpAddr(ctx);
+    final String ip = ResourceUtils.getRealClientIpAddr(ctx);
 
-        assertEquals(ip, "192.168.1.1");
-    }
+    assertEquals(ip, "192.168.1.1");
+  }
 
-    @Test
-    public void testWhenXForwardedForHeaderMultipleUpstreamsUseHeader(){
+  @Test
+  public void testWhenXForwardedForHeaderMultipleUpstreamsUseHeader() {
 
-        String clientIp = "127.0.0.1:10000";
-        String upstreamIp = "192.168.1.1:10000";
-        MockResourceContext ctx = MockResourceContext.getResourceContextWithMultipleUpstreams(clientIp, upstreamIp);
-        assertNotNull(ctx);
+    final String clientIp = "127.0.0.1:10000";
+    final String upstreamIp = "192.168.1.1:10000";
+    final MockResourceContext ctx = MockResourceContext
+        .getResourceContextWithMultipleUpstreams(clientIp, upstreamIp);
+    assertNotNull(ctx);
 
-        String ip = ResourceUtils.getRealClientIpAddr(ctx);
+    final String ip = ResourceUtils.getRealClientIpAddr(ctx);
 
-        assertEquals(ip, "192.168.1.1");
-    }
+    assertEquals(ip, "192.168.1.1");
+  }
 }
diff --git a/azkaban-web-server/src/test/java/azkaban/webapp/AzkabanWebServerTest.java b/azkaban-web-server/src/test/java/azkaban/webapp/AzkabanWebServerTest.java
index bb6cf7e..14b2f0b 100644
--- a/azkaban-web-server/src/test/java/azkaban/webapp/AzkabanWebServerTest.java
+++ b/azkaban-web-server/src/test/java/azkaban/webapp/AzkabanWebServerTest.java
@@ -17,8 +17,13 @@
 
 package azkaban.webapp;
 
+import static azkaban.ServiceProvider.SERVICE_PROVIDER;
+import static azkaban.executor.ExecutorManager.AZKABAN_USE_MULTIPLE_EXECUTORS;
+import static java.util.Objects.requireNonNull;
+import static org.apache.commons.io.FileUtils.deleteQuietly;
+import static org.junit.Assert.assertNotNull;
+
 import azkaban.AzkabanCommonModule;
-import azkaban.Constants;
 import azkaban.database.AzkabanDatabaseSetup;
 import azkaban.database.AzkabanDatabaseUpdater;
 import azkaban.executor.Executor;
@@ -35,30 +40,26 @@ import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import static azkaban.ServiceProvider.*;
-import static azkaban.executor.ExecutorManager.*;
-import static java.util.Objects.*;
-import static org.apache.commons.io.FileUtils.*;
-import static org.junit.Assert.*;
-
 
 public class AzkabanWebServerTest {
+
   public static final String AZKABAN_DB_SQL_PATH = "azkaban-db/src/main/sql";
 
   private static final Props props = new Props();
 
   private static String getUserManagerXmlFile() {
-    URL resource = AzkabanWebServerTest.class.getClassLoader().getResource("azkaban-users.xml");
+    final URL resource = AzkabanWebServerTest.class.getClassLoader()
+        .getResource("azkaban-users.xml");
     return requireNonNull(resource).getPath();
   }
 
   private static String getSqlScriptsDir() throws IOException {
     // Dummy because any resource file works.
     final String dummyResourcePath = getUserManagerXmlFile();
-    Path resources = Paths.get(dummyResourcePath).getParent();
-    Path azkabanRoot = resources.getParent().getParent().getParent().getParent();
+    final Path resources = Paths.get(dummyResourcePath).getParent();
+    final Path azkabanRoot = resources.getParent().getParent().getParent().getParent();
 
-    File sqlScriptDir = Paths.get(azkabanRoot.toString(), AZKABAN_DB_SQL_PATH).toFile();
+    final File sqlScriptDir = Paths.get(azkabanRoot.toString(), AZKABAN_DB_SQL_PATH).toFile();
     return sqlScriptDir.getCanonicalPath();
   }
 
@@ -66,7 +67,7 @@ public class AzkabanWebServerTest {
   public static void setUp() throws Exception {
     tearDown();
 
-    String sqlScriptsDir = getSqlScriptsDir();
+    final String sqlScriptsDir = getSqlScriptsDir();
     props.put(AzkabanDatabaseSetup.DATABASE_SQL_SCRIPT_DIR, sqlScriptsDir);
 
     props.put("database.type", "h2");
@@ -95,17 +96,17 @@ public class AzkabanWebServerTest {
 
   @Test
   public void testInjection() throws Exception {
-    Injector injector = Guice.createInjector(
+    final Injector injector = Guice.createInjector(
         new AzkabanCommonModule(props),
         new AzkabanWebServerModule()
     );
     SERVICE_PROVIDER.unsetInjector();
     SERVICE_PROVIDER.setInjector(injector);
 
-    ExecutorLoader executorLoader = injector.getInstance(ExecutorLoader.class);
+    final ExecutorLoader executorLoader = injector.getInstance(ExecutorLoader.class);
     assertNotNull(executorLoader);
 
-    Executor executor = executorLoader.addExecutor("localhost", 60000);
+    final Executor executor = executorLoader.addExecutor("localhost", 60000);
     executor.setActive(true);
     executorLoader.updateExecutor(executor);
 
diff --git a/azkaban-web-server/src/test/java/azkaban/webapp/servlet/ExecutionFlowViewTest.java b/azkaban-web-server/src/test/java/azkaban/webapp/servlet/ExecutionFlowViewTest.java
index 09fe06a..4a33cf4 100644
--- a/azkaban-web-server/src/test/java/azkaban/webapp/servlet/ExecutionFlowViewTest.java
+++ b/azkaban-web-server/src/test/java/azkaban/webapp/servlet/ExecutionFlowViewTest.java
@@ -2,11 +2,10 @@ package azkaban.webapp.servlet;
 
 import static org.junit.Assert.assertTrue;
 
-import org.apache.velocity.VelocityContext;
-import org.junit.Test;
-
 import azkaban.fixture.VelocityContextTestUtil;
 import azkaban.fixture.VelocityTemplateTestUtil;
+import org.apache.velocity.VelocityContext;
+import org.junit.Test;
 
 /**
  * Test flow execution page.
@@ -15,16 +14,18 @@ public class ExecutionFlowViewTest {
 
   private static final String EXTERNAL_ANALYZER_ELEMENT =
       "<li><a id=\"analyzerButton\" href=\"http://elephant.linkedin.com/\" "
-      + "class=\"btn btn-info btn-sm\" type=\"button\" target=\"_blank\" "
-      + "title=\"Analyze job in Dr. Elephant\">Dr. Elephant</a></li>";
+          + "class=\"btn btn-info btn-sm\" type=\"button\" target=\"_blank\" "
+          + "title=\"Analyze job in Dr. Elephant\">Dr. Elephant</a></li>";
+
   /**
    * Test aims to check that the external analyzer button is displayed
    * in the page.
+   *
    * @throws Exception the exception
    */
   @Test
   public void testExternalAnalyzerButton() throws Exception {
-    VelocityContext context = VelocityContextTestUtil.getInstance();
+    final VelocityContext context = VelocityContextTestUtil.getInstance();
 
     context.put("execid", 1);
     context.put("executionExternalLinkURL", "http://elephant.linkedin.com/");
@@ -33,8 +34,9 @@ public class ExecutionFlowViewTest {
     context.put("projectName", "user-hello-pig-azkaban");
     context.put("flowid", 27);
 
-    String result =
-        VelocityTemplateTestUtil.renderTemplate("executingflowpage", context).replaceAll("\\s+", "");
+    final String result =
+        VelocityTemplateTestUtil.renderTemplate("executingflowpage", context)
+            .replaceAll("\\s+", "");
     assertTrue(result.contains(EXTERNAL_ANALYZER_ELEMENT.replaceAll("\\s+", "")));
   }
 }
diff --git a/azkaban-web-server/src/test/java/azkaban/webapp/servlet/LoginAbstractAzkabanServletTest.java b/azkaban-web-server/src/test/java/azkaban/webapp/servlet/LoginAbstractAzkabanServletTest.java
index 564ba8b..f1d2f60 100644
--- a/azkaban-web-server/src/test/java/azkaban/webapp/servlet/LoginAbstractAzkabanServletTest.java
+++ b/azkaban-web-server/src/test/java/azkaban/webapp/servlet/LoginAbstractAzkabanServletTest.java
@@ -17,177 +17,161 @@
 package azkaban.webapp.servlet;
 
 
-import azkaban.fixture.MockLoginAzkabanServlet;
-import azkaban.server.session.Session;
-import azkaban.server.session.SessionCache;
-import org.junit.Test;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.io.Writer;
-
-import static junit.framework.Assert.assertNotNull;
 import static junit.framework.TestCase.assertEquals;
 import static junit.framework.TestCase.assertNotSame;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-public class LoginAbstractAzkabanServletTest {
-
-    private HttpServletResponse getResponse(StringWriter stringWriter){
-        HttpServletResponse resp = mock(HttpServletResponse.class);
-        PrintWriter writer = new PrintWriter(stringWriter);
-
-        try{
-            when(resp.getWriter()).thenReturn(writer);
-        }
-        catch(IOException ex){
-            System.out.println(ex);
-        }
-
-        return resp;
-    }
-
-    @Test
-    public void testWhenGetRequestSessionIsValid() throws Exception, IOException, ServletException {
-
-        String clientIp = "127.0.0.1:10000";
-        String sessionId = "111";
-
-
-        HttpServletRequest req = MockLoginAzkabanServlet.getRequestWithNoUpstream(clientIp, sessionId, "GET");
-
-        StringWriter writer = new StringWriter();
-        HttpServletResponse resp = getResponse(writer);
+import azkaban.fixture.MockLoginAzkabanServlet;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.junit.Test;
 
-        MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
-                "user", "127.0.0.1");
+public class LoginAbstractAzkabanServletTest {
 
-        servlet.doGet(req, resp);
+  private HttpServletResponse getResponse(final StringWriter stringWriter) {
+    final HttpServletResponse resp = mock(HttpServletResponse.class);
+    final PrintWriter writer = new PrintWriter(stringWriter);
 
-        // Assert that our response was written (we have a valid session)
-        assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
+    try {
+      when(resp.getWriter()).thenReturn(writer);
+    } catch (final IOException ex) {
+      System.out.println(ex);
     }
 
-    @Test
-    public void testWhenPostRequestSessionIsValid() throws Exception{
-
-        String clientIp = "127.0.0.1:10000";
-        String sessionId = "111";
+    return resp;
+  }
 
+  @Test
+  public void testWhenGetRequestSessionIsValid() throws Exception, IOException, ServletException {
 
-        HttpServletRequest req = MockLoginAzkabanServlet.getRequestWithNoUpstream(clientIp, sessionId, "POST");
-        StringWriter writer = new StringWriter();
-        HttpServletResponse resp = getResponse(writer);
+    final String clientIp = "127.0.0.1:10000";
+    final String sessionId = "111";
 
-        MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
-                "user", "127.0.0.1");
+    final HttpServletRequest req = MockLoginAzkabanServlet
+        .getRequestWithNoUpstream(clientIp, sessionId, "GET");
 
+    final StringWriter writer = new StringWriter();
+    final HttpServletResponse resp = getResponse(writer);
 
-        servlet.doPost(req, resp);
+    final MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
+        "user", "127.0.0.1");
 
-        // Assert that our response was written (we have a valid session)
-        assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
-    }
-
-    @Test
-    public void testWhenPostRequestChangedClientIpSessionIsInvalid() throws Exception{
-
-        String clientIp = "127.0.0.2:10000";
-        String sessionId = "111";
-
-
-        HttpServletRequest req = MockLoginAzkabanServlet.getRequestWithNoUpstream(clientIp, sessionId, "POST");
+    servlet.doGet(req, resp);
 
-        StringWriter writer = new StringWriter();
-        HttpServletResponse resp = getResponse(writer);
+    // Assert that our response was written (we have a valid session)
+    assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
+  }
 
+  @Test
+  public void testWhenPostRequestSessionIsValid() throws Exception {
 
-        MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
-                "user", "127.0.0.1");
+    final String clientIp = "127.0.0.1:10000";
+    final String sessionId = "111";
 
+    final HttpServletRequest req = MockLoginAzkabanServlet
+        .getRequestWithNoUpstream(clientIp, sessionId, "POST");
+    final StringWriter writer = new StringWriter();
+    final HttpServletResponse resp = getResponse(writer);
 
-        servlet.doPost(req, resp);
+    final MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
+        "user", "127.0.0.1");
 
-        // Assert that our response was written (we have a valid session)
-        assertNotSame("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
-    }
+    servlet.doPost(req, resp);
 
-    @Test
-    public void testWhenPostRequestChangedClientPortSessionIsValid() throws Exception{
+    // Assert that our response was written (we have a valid session)
+    assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
+  }
 
-        String clientIp = "127.0.0.1:10000";
-        String sessionId = "111";
+  @Test
+  public void testWhenPostRequestChangedClientIpSessionIsInvalid() throws Exception {
 
+    final String clientIp = "127.0.0.2:10000";
+    final String sessionId = "111";
 
-        HttpServletRequest req = MockLoginAzkabanServlet.getRequestWithNoUpstream(clientIp, sessionId, "POST");
+    final HttpServletRequest req = MockLoginAzkabanServlet
+        .getRequestWithNoUpstream(clientIp, sessionId, "POST");
 
-        StringWriter writer = new StringWriter();
-        HttpServletResponse resp = getResponse(writer);
+    final StringWriter writer = new StringWriter();
+    final HttpServletResponse resp = getResponse(writer);
 
+    final MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
+        "user", "127.0.0.1");
 
-        MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
-                "user", "127.0.0.1");
+    servlet.doPost(req, resp);
 
+    // Assert that our response was written (we have a valid session)
+    assertNotSame("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
+  }
 
-        servlet.doPost(req, resp);
+  @Test
+  public void testWhenPostRequestChangedClientPortSessionIsValid() throws Exception {
 
-        // Assert that our response was written (we have a valid session)
-        assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
-    }
+    final String clientIp = "127.0.0.1:10000";
+    final String sessionId = "111";
 
-    @Test
-    public void testWhenPostRequestWithUpstreamSessionIsValid() throws Exception{
+    final HttpServletRequest req = MockLoginAzkabanServlet
+        .getRequestWithNoUpstream(clientIp, sessionId, "POST");
 
-        String clientIp = "127.0.0.1:10000";
-        String upstreamIp = "192.168.1.1:11111";
-        String sessionId = "111";
+    final StringWriter writer = new StringWriter();
+    final HttpServletResponse resp = getResponse(writer);
 
+    final MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
+        "user", "127.0.0.1");
 
-        HttpServletRequest req = MockLoginAzkabanServlet.getRequestWithUpstream(clientIp, upstreamIp,
-                sessionId, "POST");
+    servlet.doPost(req, resp);
 
-        StringWriter writer = new StringWriter();
-        HttpServletResponse resp = getResponse(writer);
+    // Assert that our response was written (we have a valid session)
+    assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
+  }
 
+  @Test
+  public void testWhenPostRequestWithUpstreamSessionIsValid() throws Exception {
 
-        MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
-                "user", "192.168.1.1");
+    final String clientIp = "127.0.0.1:10000";
+    final String upstreamIp = "192.168.1.1:11111";
+    final String sessionId = "111";
 
+    final HttpServletRequest req = MockLoginAzkabanServlet
+        .getRequestWithUpstream(clientIp, upstreamIp,
+            sessionId, "POST");
 
-        servlet.doPost(req, resp);
+    final StringWriter writer = new StringWriter();
+    final HttpServletResponse resp = getResponse(writer);
 
-        // Assert that our response was written (we have a valid session)
-        assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
-    }
+    final MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
+        "user", "192.168.1.1");
 
-    @Test
-    public void testWhenPostRequestWithMultipleUpstreamsSessionIsValid() throws Exception{
+    servlet.doPost(req, resp);
 
-        String clientIp = "127.0.0.1:10000";
-        String upstreamIp = "192.168.1.1:11111,888.8.8.8:2222,5.5.5.5:5555";
-        String sessionId = "111";
+    // Assert that our response was written (we have a valid session)
+    assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
+  }
 
+  @Test
+  public void testWhenPostRequestWithMultipleUpstreamsSessionIsValid() throws Exception {
 
-        HttpServletRequest req = MockLoginAzkabanServlet.getRequestWithUpstream(clientIp, upstreamIp,
-                sessionId, "POST");
+    final String clientIp = "127.0.0.1:10000";
+    final String upstreamIp = "192.168.1.1:11111,888.8.8.8:2222,5.5.5.5:5555";
+    final String sessionId = "111";
 
-        StringWriter writer = new StringWriter();
-        HttpServletResponse resp = getResponse(writer);
+    final HttpServletRequest req = MockLoginAzkabanServlet
+        .getRequestWithUpstream(clientIp, upstreamIp,
+            sessionId, "POST");
 
+    final StringWriter writer = new StringWriter();
+    final HttpServletResponse resp = getResponse(writer);
 
-        MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
-                "user", "192.168.1.1");
+    final MockLoginAzkabanServlet servlet = MockLoginAzkabanServlet.getServletWithSession(sessionId,
+        "user", "192.168.1.1");
 
+    servlet.doPost(req, resp);
 
-        servlet.doPost(req, resp);
-
-        // Assert that our response was written (we have a valid session)
-        assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
-    }
+    // Assert that our response was written (we have a valid session)
+    assertEquals("SUCCESS_MOCK_LOGIN_SERVLET", writer.toString());
+  }
 }
diff --git a/azkaban-web-server/src/test/java/azkaban/webapp/WebMetricsTest.java b/azkaban-web-server/src/test/java/azkaban/webapp/WebMetricsTest.java
index c668ec7..1130b3e 100644
--- a/azkaban-web-server/src/test/java/azkaban/webapp/WebMetricsTest.java
+++ b/azkaban-web-server/src/test/java/azkaban/webapp/WebMetricsTest.java
@@ -16,13 +16,13 @@
 
 package azkaban.webapp;
 
+import static org.junit.Assert.assertEquals;
+
 import azkaban.metrics.MetricsManager;
 import azkaban.metrics.MetricsTestUtility;
 import org.junit.Before;
 import org.junit.Test;
 
-import static org.junit.Assert.*;
-
 
 public class WebMetricsTest {
 
@@ -32,13 +32,13 @@ public class WebMetricsTest {
   @Before
   public void setUp() {
     // todo HappyRay: move MetricsManager, WebMetrics to use Juice.
-    testUtil = new MetricsTestUtility(MetricsManager.INSTANCE.getRegistry());
-    metrics = WebMetrics.INSTANCE;
+    this.testUtil = new MetricsTestUtility(MetricsManager.INSTANCE.getRegistry());
+    this.metrics = WebMetrics.INSTANCE;
   }
 
   @Test
   public void testLogFetchLatencyMetrics() {
-    metrics.setFetchLogLatency(14);
-    assertEquals(14, testUtil.getGaugeValue("fetchLogLatency"));
+    this.metrics.setFetchLogLatency(14);
+    assertEquals(14, this.testUtil.getGaugeValue("fetchLogLatency"));
   }
 }