You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@falcon.apache.org by aj...@apache.org on 2016/07/06 11:05:16 UTC

[1/2] falcon git commit: FALCON-1609 Add entity commands to falcon spring-shell CLI

Repository: falcon
Updated Branches:
  refs/heads/master 60e2f68b8 -> b2526d8f4


http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/client/src/main/java/org/apache/falcon/client/AbstractFalconClient.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/falcon/client/AbstractFalconClient.java b/client/src/main/java/org/apache/falcon/client/AbstractFalconClient.java
index 4f86d9b..b3fd3ae 100644
--- a/client/src/main/java/org/apache/falcon/client/AbstractFalconClient.java
+++ b/client/src/main/java/org/apache/falcon/client/AbstractFalconClient.java
@@ -24,9 +24,11 @@ import org.apache.falcon.resource.APIResult;
 import org.apache.falcon.resource.EntityList;
 import org.apache.falcon.resource.EntitySummaryResult;
 import org.apache.falcon.resource.FeedInstanceResult;
+import org.apache.falcon.resource.FeedLookupResult;
 import org.apache.falcon.resource.InstanceDependencyResult;
 import org.apache.falcon.resource.InstancesResult;
 import org.apache.falcon.resource.InstancesSummaryResult;
+import org.apache.falcon.resource.SchedulableEntityInstanceResult;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -52,10 +54,9 @@ public abstract class AbstractFalconClient {
      * @param entityType Entity type. Valid options are cluster, feed or process.
      * @param filePath Path for the entity definition
      * @return
-     * @throws FalconCLIException
+     * @throws IOException
      */
-    public abstract APIResult submit(String entityType, String filePath, String doAsUser) throws FalconCLIException,
-            IOException;
+    public abstract APIResult submit(String entityType, String filePath, String doAsUser);
 
     /**
      * Schedules an submitted process entity immediately.
@@ -63,10 +64,9 @@ public abstract class AbstractFalconClient {
      * @param entityName Name of the entity.
      * @param colo Cluster name.
      * @return
-     * @throws FalconCLIException
      */
     public abstract APIResult schedule(EntityType entityType, String entityName, String colo, Boolean skipDryRun,
-                                        String doAsuser, String properties) throws FalconCLIException;
+                                       String doAsuser, String properties);
 
     /**
      * Delete the specified entity.
@@ -74,10 +74,9 @@ public abstract class AbstractFalconClient {
      * @param entityName Name of the entity.
      * @param doAsUser Proxy User.
      * @return
-     * @throws FalconCLIException
      */
     public abstract APIResult delete(EntityType entityType, String entityName,
-                                     String doAsUser) throws FalconCLIException;
+                                     String doAsUser);
 
     /**
      * Validates the submitted entity.
@@ -86,10 +85,9 @@ public abstract class AbstractFalconClient {
      * @param skipDryRun Dry run.
      * @param doAsUser Proxy User.
      * @return
-     * @throws FalconCLIException
-     */
+    \     */
     public abstract APIResult validate(String entityType, String filePath, Boolean skipDryRun,
-                                       String doAsUser) throws FalconCLIException;
+                                       String doAsUser);
 
     /**
      * Updates the submitted entity.
@@ -99,10 +97,9 @@ public abstract class AbstractFalconClient {
      * @param skipDryRun Dry run.
      * @param doAsUser Proxy User.
      * @return
-     * @throws FalconCLIException
      */
     public abstract APIResult update(String entityType, String entityName, String filePath,
-                                                       Boolean skipDryRun, String doAsUser) throws FalconCLIException;
+                                     Boolean skipDryRun, String doAsUser);
 
     /**
      * Get definition of the entity.
@@ -110,11 +107,9 @@ public abstract class AbstractFalconClient {
      * @param entityName Name of the entity.
      * @param doAsUser Proxy user.
      * @return
-     * @throws FalconCLIException
      */
     public abstract Entity getDefinition(String entityType, String entityName,
-                                         String doAsUser) throws FalconCLIException;
-
+                                         String doAsUser);
 
 
     /**
@@ -133,11 +128,10 @@ public abstract class AbstractFalconClient {
      * @param doAsUser proxy user
      * @param allAttempts To get the instances corresponding to each run-id
      * @return
-     * @throws FalconCLIException
      */
     public abstract InstancesResult getStatusOfInstances(String type, String entity, String start, String end, String
-            colo, List<LifeCycle> lifeCycles, String filterBy, String orderBy, String sortOrder, Integer offset, Integer
-            numResults, String doAsUser, Boolean allAttempts) throws FalconCLIException;
+        colo, List<LifeCycle> lifeCycles, String filterBy, String orderBy, String sortOrder, Integer offset, Integer
+                                                             numResults, String doAsUser, Boolean allAttempts);
 
     /**
      * Suspend an entity.
@@ -146,10 +140,8 @@ public abstract class AbstractFalconClient {
      * @param colo Colo on which the query should be run.
      * @param doAsUser proxy user
      * @return Status of the entity.
-     * @throws FalconCLIException
      */
-    public abstract APIResult suspend(EntityType entityType, String entityName, String colo, String doAsUser) throws
-            FalconCLIException;
+    public abstract APIResult suspend(EntityType entityType, String entityName, String colo, String doAsUser);
 
     /**
      * Resume a supended entity.
@@ -158,10 +150,8 @@ public abstract class AbstractFalconClient {
      * @param colo Colo on which the query should be run.
      * @param doAsUser proxy user
      * @return Result of the resume command.
-     * @throws FalconCLIException
      */
-    public abstract APIResult resume(EntityType entityType, String entityName, String colo, String doAsUser) throws
-            FalconCLIException;
+    public abstract APIResult resume(EntityType entityType, String entityName, String colo, String doAsUser);
 
     /**
      * Get status of the entity.
@@ -171,10 +161,9 @@ public abstract class AbstractFalconClient {
      * @param doAsUser proxy user
      * @param showScheduler whether the call should return the scheduler on which the entity is scheduled.
      * @return Status of the entity.
-     * @throws FalconCLIException
      */
     public abstract APIResult getStatus(EntityType entityType, String entityName, String colo, String doAsUser,
-                                        boolean showScheduler) throws FalconCLIException;
+                                        boolean showScheduler);
 
     /**
      * Submits and schedules an entity.
@@ -185,7 +174,7 @@ public abstract class AbstractFalconClient {
      * @return Result of the submit and schedule command.
      */
     public abstract APIResult submitAndSchedule(String entityType, String filePath, Boolean skipDryRun, String doAsUser,
-                                       String properties) throws FalconCLIException;
+                                                String properties);
 
     /**
      *
@@ -221,8 +210,8 @@ public abstract class AbstractFalconClient {
      * @return Total number of results and a list of entities.
      */
     public abstract EntityList getEntityList(String entityType, String fields, String nameSubsequence, String
-            tagKeywords, String filterBy, String filterTags, String orderBy, String sortOrder, Integer offset, Integer
-            numResults, String doAsUser) throws FalconCLIException;
+        tagKeywords, String filterBy, String filterTags, String orderBy, String sortOrder, Integer offset, Integer
+                                                 numResults, String doAsUser);
 
     /**
      * Given an EntityType and cluster, get list of entities along with summary of N recent instances of each entity.
@@ -254,9 +243,8 @@ public abstract class AbstractFalconClient {
      */
     public abstract EntitySummaryResult getEntitySummary(String entityType, String cluster, String start, String end,
                                                          String fields, String filterBy, String filterTags, String
-                                                         orderBy, String sortOrder, Integer offset, Integer
-                                                         numResults, Integer numInstances, String doAsUser) throws
-            FalconCLIException;
+                                                             orderBy, String sortOrder, Integer offset, Integer
+                                                             numResults, Integer numInstances, String doAsUser);
 
     /**
      * Force updates the entity.
@@ -268,7 +256,7 @@ public abstract class AbstractFalconClient {
      * @return Result of the validation.
      */
     public abstract APIResult touch(String entityType, String entityName, String colo, Boolean skipDryRun,
-                                    String doAsUser) throws FalconCLIException;
+                                    String doAsUser);
 
     /**
      * Kill currently running instance(s) of an entity.
@@ -281,11 +269,11 @@ public abstract class AbstractFalconClient {
      *                   process.
      * @param doAsUser proxy user
      * @return Result of the kill operation.
+     * @throws UnsupportedEncodingException
      */
     public abstract InstancesResult killInstances(String type, String entity, String start, String end, String colo,
                                                   String clusters, String sourceClusters, List<LifeCycle> lifeCycles,
-                                                  String doAsUser) throws FalconCLIException,
-            UnsupportedEncodingException;
+                                                  String doAsUser) throws UnsupportedEncodingException;
 
     /**
      * Suspend instances of an entity.
@@ -298,10 +286,11 @@ public abstract class AbstractFalconClient {
      *                   process.
      * @param doAsUser proxy user
      * @return Results of the suspend command.
+     * @throws UnsupportedEncodingException
      */
     public abstract InstancesResult suspendInstances(String type, String entity, String start, String end, String colo,
-                                            String clusters, String sourceClusters, List<LifeCycle> lifeCycles,
-                                            String doAsUser) throws FalconCLIException, UnsupportedEncodingException;
+                                                     String clusters, String sourceClusters, List<LifeCycle> lifeCycles,
+                                                     String doAsUser) throws UnsupportedEncodingException;
 
     /**
      * Resume suspended instances of an entity.
@@ -314,10 +303,11 @@ public abstract class AbstractFalconClient {
      *                   process.
      * @param doAsUser proxy user
      * @return Results of the resume command.
+     * @throws UnsupportedEncodingException
      */
     public abstract InstancesResult resumeInstances(String type, String entity, String start, String end, String colo,
-                                           String clusters, String sourceClusters, List<LifeCycle> lifeCycles,
-                                           String doAsUser) throws FalconCLIException, UnsupportedEncodingException;
+                                                    String clusters, String sourceClusters, List<LifeCycle> lifeCycles,
+                                                    String doAsUser) throws UnsupportedEncodingException;
 
     /**
      * Rerun instances of an entity. On issuing a rerun, by default the execution resumes from the last failed node in
@@ -332,11 +322,12 @@ public abstract class AbstractFalconClient {
      * @param isForced <optional param> can be used to forcefully rerun the entire instance.
      * @param doAsUser proxy user
      * @return Results of the rerun command.
+     * @throws IOException
      */
     public abstract InstancesResult rerunInstances(String type, String entity, String start, String end,
                                                    String filePath, String colo, String clusters,
                                                    String sourceClusters, List<LifeCycle> lifeCycles, Boolean isForced,
-                                                   String doAsUser) throws FalconCLIException, IOException;
+                                                   String doAsUser) throws IOException;
 
     /**
      * Get summary of instance/instances of an entity.
@@ -363,7 +354,7 @@ public abstract class AbstractFalconClient {
     public abstract InstancesSummaryResult getSummaryOfInstances(String type, String entity, String start, String end,
                                                                  String colo, List<LifeCycle> lifeCycles,
                                                                  String filterBy, String orderBy, String sortOrder,
-                                                                 String doAsUser) throws FalconCLIException;
+                                                                 String doAsUser);
 
     /**
      * Get falcon feed instance availability.
@@ -378,7 +369,7 @@ public abstract class AbstractFalconClient {
      * @return Feed instance availability status
      */
     public abstract FeedInstanceResult getFeedListing(String type, String entity, String start, String end, String colo,
-                                                      String doAsUser) throws FalconCLIException;
+                                                      String doAsUser);
 
     /**
      * Get log of a specific instance of an entity.
@@ -408,8 +399,7 @@ public abstract class AbstractFalconClient {
     public abstract InstancesResult getLogsOfInstances(String type, String entity, String start, String end,
                                                        String colo, String runId, List<LifeCycle> lifeCycles,
                                                        String filterBy, String orderBy, String sortOrder,
-                                                       Integer offset, Integer numResults, String doAsUser) throws
-            FalconCLIException;
+                                                       Integer offset, Integer numResults, String doAsUser);
 
     //RESUME CHECKSTYLE CHECK ParameterNumberCheck
 
@@ -423,10 +413,11 @@ public abstract class AbstractFalconClient {
      *                   Execution(default).
      * @param doAsUser proxy user
      * @return List of instances currently running.
+     * @throws UnsupportedEncodingException
      */
     public abstract InstancesResult getParamsOfInstance(String type, String entity, String start, String colo,
                                                         List<LifeCycle> lifeCycles, String doAsUser) throws
-            FalconCLIException, UnsupportedEncodingException;
+        UnsupportedEncodingException;
 
     /**
      * Get dependent instances for a particular instance.
@@ -437,17 +428,16 @@ public abstract class AbstractFalconClient {
      * @return Dependent instances for the specified instance
      */
     public abstract InstanceDependencyResult getInstanceDependencies(String entityType, String entityName,
-                                                                     String instanceTime, String colo) throws
-            FalconCLIException;
+                                                                     String instanceTime, String colo);
 
     /**
      * Get version of the falcon server.
      * @return Version of the server.
      */
-    public abstract String getVersion(String doAsUser) throws FalconCLIException;
+    public abstract String getVersion(String doAsUser);
 
     protected InputStream getServletInputStream(String clusters, String sourceClusters, String properties) throws
-            FalconCLIException, UnsupportedEncodingException {
+        UnsupportedEncodingException {
 
         InputStream stream;
         StringBuilder buffer = new StringBuilder();
@@ -463,4 +453,11 @@ public abstract class AbstractFalconClient {
         stream = new ByteArrayInputStream(buffer.toString().getBytes());
         return (buffer.length() == 0) ? null : stream;
     }
+
+    public abstract SchedulableEntityInstanceResult getFeedSlaMissPendingAlerts(String entityType, String entityName,
+                                                                                String start, String end, String colo);
+
+    public abstract FeedLookupResult reverseLookUp(String entityType, String path, String doAs);
+
+    public abstract EntityList getDependency(String entityType, String entityName, String doAs);
 }

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/client/src/main/java/org/apache/falcon/client/FalconCLIException.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/falcon/client/FalconCLIException.java b/client/src/main/java/org/apache/falcon/client/FalconCLIException.java
index bd36243..de53595 100644
--- a/client/src/main/java/org/apache/falcon/client/FalconCLIException.java
+++ b/client/src/main/java/org/apache/falcon/client/FalconCLIException.java
@@ -26,8 +26,13 @@ import java.io.InputStream;
 
 /**
  * Exception thrown by FalconClient.
+ * This was converted to RuntimeException in FALCON-1609.
+ * Reasons:
+ *  Ultimate goal of switching from current CLI to spring shell based CLI
+ *  Spring Shell doesn't work well with unchecked Exceptions
+ *  The exception currently only gets surfaced in CLI, and in code existing catch clauses will still work.
  */
-public class FalconCLIException extends Exception {
+public class FalconCLIException extends RuntimeException{
 
     private static final int MB = 1024 * 1024;
 

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/client/src/main/java/org/apache/falcon/client/FalconClient.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/falcon/client/FalconClient.java b/client/src/main/java/org/apache/falcon/client/FalconClient.java
index 1014d64..371828f 100644
--- a/client/src/main/java/org/apache/falcon/client/FalconClient.java
+++ b/client/src/main/java/org/apache/falcon/client/FalconClient.java
@@ -131,7 +131,6 @@ public class FalconClient extends AbstractFalconClient {
 
     private static final String PROPERTIES_SUFFIX = ".properties";
     public static final HostnameVerifier ALL_TRUSTING_HOSTNAME_VERIFIER = new HostnameVerifier() {
-        @Override
         public boolean verify(String hostname, SSLSession sslSession) {
             return true;
         }
@@ -150,9 +149,9 @@ public class FalconClient extends AbstractFalconClient {
      * Create a Falcon client instance.
      *
      * @param falconUrl of the server to which client interacts
-     * @throws FalconCLIException - If unable to initialize SSL Props
+     * @ - If unable to initialize SSL Props
      */
-    public FalconClient(String falconUrl) throws FalconCLIException {
+    public FalconClient(String falconUrl) {
         this(falconUrl, new Properties());
     }
 
@@ -161,9 +160,9 @@ public class FalconClient extends AbstractFalconClient {
      *
      * @param falconUrl of the server to which client interacts
      * @param properties client properties
-     * @throws FalconCLIException - If unable to initialize SSL Props
+     * @ - If unable to initialize SSL Props
      */
-    public FalconClient(String falconUrl, Properties properties) throws FalconCLIException {
+    public FalconClient(String falconUrl, Properties properties)  {
         try {
             String baseUrl = notEmpty(falconUrl, "FalconUrl");
             if (!baseUrl.endsWith("/")) {
@@ -212,7 +211,7 @@ public class FalconClient extends AbstractFalconClient {
         this.debugMode = debugMode;
     }
 
-    public static AuthenticatedURL.Token getToken(String baseUrl) throws FalconCLIException {
+    public static AuthenticatedURL.Token getToken(String baseUrl)  {
         AuthenticatedURL.Token currentToken = new AuthenticatedURL.Token();
         try {
             URL url = new URL(baseUrl + AUTH_URL);
@@ -373,7 +372,7 @@ public class FalconClient extends AbstractFalconClient {
     }
 
     public APIResult schedule(EntityType entityType, String entityName, String colo,
-                              Boolean skipDryRun, String doAsUser, String properties) throws FalconCLIException {
+                              Boolean skipDryRun, String doAsUser, String properties) {
         String type = entityType.toString().toLowerCase();
         ClientResponse clientResponse = new ResourceBuilder().path(Entities.SCHEDULE.path, type, entityName)
             .addQueryParam(COLO, colo).addQueryParam(SKIP_DRYRUN, skipDryRun)
@@ -381,31 +380,28 @@ public class FalconClient extends AbstractFalconClient {
         return getResponse(APIResult.class, clientResponse);
     }
 
-    public APIResult suspend(EntityType entityType, String entityName, String colo, String doAsUser)
-        throws FalconCLIException {
+    public APIResult suspend(EntityType entityType, String entityName, String colo, String doAsUser) {
         String type = entityType.toString().toLowerCase();
         ClientResponse clientResponse = new ResourceBuilder().path(Entities.SUSPEND.path, type, entityName)
             .addQueryParam(COLO, colo).addQueryParam(DO_AS_OPT, doAsUser).call(Entities.SUSPEND);
         return getResponse(APIResult.class, clientResponse);
     }
 
-    public APIResult resume(EntityType entityType, String entityName, String colo, String doAsUser)
-        throws FalconCLIException {
+    public APIResult resume(EntityType entityType, String entityName, String colo, String doAsUser) {
         String type = entityType.toString().toLowerCase();
         ClientResponse clientResponse = new ResourceBuilder().path(Entities.RESUME.path, type, entityName)
             .addQueryParam(COLO, colo).addQueryParam(DO_AS_OPT, doAsUser).call(Entities.RESUME);
         return getResponse(APIResult.class, clientResponse);
     }
 
-    public APIResult delete(EntityType entityType, String entityName, String doAsUser) throws FalconCLIException {
+    public APIResult delete(EntityType entityType, String entityName, String doAsUser) {
         String type = entityType.toString().toLowerCase();
         ClientResponse clientResponse = new ResourceBuilder().path(Entities.DELETE.path, type, entityName)
             .addQueryParam(DO_AS_OPT, doAsUser).call(Entities.DELETE);
         return getResponse(APIResult.class, clientResponse);
     }
 
-    public APIResult validate(String entityType, String filePath, Boolean skipDryRun, String doAsUser)
-        throws FalconCLIException {
+    public APIResult validate(String entityType, String filePath, Boolean skipDryRun, String doAsUser) {
         InputStream entityStream = getServletInputStream(filePath);
         ClientResponse clientResponse = new ResourceBuilder().path(Entities.VALIDATE.path, entityType)
             .addQueryParam(SKIP_DRYRUN, skipDryRun).addQueryParam(DO_AS_OPT, doAsUser)
@@ -413,8 +409,7 @@ public class FalconClient extends AbstractFalconClient {
         return getResponse(APIResult.class, clientResponse);
     }
 
-    public APIResult submit(String entityType, String filePath, String doAsUser)
-        throws FalconCLIException {
+    public APIResult submit(String entityType, String filePath, String doAsUser) {
         InputStream entityStream = getServletInputStream(filePath);
         ClientResponse clientResponse = new ResourceBuilder().path(Entities.SUBMIT.path, entityType)
             .addQueryParam(DO_AS_OPT, doAsUser).call(Entities.SUBMIT, entityStream);
@@ -422,7 +417,7 @@ public class FalconClient extends AbstractFalconClient {
     }
 
     public APIResult update(String entityType, String entityName, String filePath,
-                            Boolean skipDryRun, String doAsUser) throws FalconCLIException {
+                            Boolean skipDryRun, String doAsUser) {
         InputStream entityStream = getServletInputStream(filePath);
         Entities operation = Entities.UPDATE;
         ClientResponse clientResponse = new ResourceBuilder().path(operation.path, entityType, entityName)
@@ -432,7 +427,7 @@ public class FalconClient extends AbstractFalconClient {
     }
 
     public APIResult updateClusterDependents(String clusterName, Boolean skipDryRun,
-                                             String doAsUser) throws FalconCLIException {
+                                             String doAsUser)  {
         ClientResponse clientResponse = new ResourceBuilder().path(Entities.UPDATEDEPENDENTS.path, clusterName)
                 .addQueryParam(SKIP_DRYRUN, skipDryRun).addQueryParam(DO_AS_OPT, doAsUser)
                 .call(Entities.UPDATEDEPENDENTS);
@@ -441,7 +436,7 @@ public class FalconClient extends AbstractFalconClient {
 
     @Override
     public APIResult submitAndSchedule(String entityType, String filePath, Boolean skipDryRun,
-                                       String doAsUser, String properties) throws FalconCLIException {
+                                       String doAsUser, String properties) {
         InputStream entityStream = getServletInputStream(filePath);
         ClientResponse clientResponse = new ResourceBuilder().path(Entities.SUBMITANDSCHEDULE.path, entityType)
             .addQueryParam(SKIP_DRYRUN, skipDryRun).addQueryParam(DO_AS_OPT, doAsUser)
@@ -450,7 +445,7 @@ public class FalconClient extends AbstractFalconClient {
     }
 
     public APIResult getStatus(EntityType entityType, String entityName, String colo,
-                               String doAsUser, boolean showScheduler) throws FalconCLIException {
+                               String doAsUser, boolean showScheduler) {
         String type = entityType.toString().toLowerCase();
         ClientResponse clientResponse = new ResourceBuilder().path(Entities.STATUS.path, type, entityName)
             .addQueryParam(COLO, colo).addQueryParam(DO_AS_OPT, doAsUser)
@@ -459,15 +454,14 @@ public class FalconClient extends AbstractFalconClient {
         return getResponse(APIResult.class, clientResponse);
     }
 
-    public Entity getDefinition(String entityType, String entityName, String doAsUser) throws FalconCLIException {
+    public Entity getDefinition(String entityType, String entityName, String doAsUser) {
         ClientResponse clientResponse = new ResourceBuilder().path(Entities.DEFINITION.path, entityType, entityName)
             .call(Entities.DEFINITION);
         String entity = getResponseAsString(clientResponse);
         return Entity.fromString(EntityType.getEnum(entityType), entity);
     }
 
-    public EntityList getDependency(String entityType, String entityName, String doAsUser)
-        throws FalconCLIException {
+    public EntityList getDependency(String entityType, String entityName, String doAsUser) {
 
         ClientResponse clientResponse = new ResourceBuilder().path(Entities.DEPENDENCY.path, entityType, entityName)
             .addQueryParam(DO_AS_OPT, doAsUser).call(Entities.DEPENDENCY);
@@ -485,7 +479,7 @@ public class FalconClient extends AbstractFalconClient {
     //SUSPEND CHECKSTYLE CHECK ParameterNumberCheck
 
     public SchedulableEntityInstanceResult getFeedSlaMissPendingAlerts(String entityType, String entityName,
-                                           String startTime, String endTime, String colo) throws FalconCLIException {
+                                           String startTime, String endTime, String colo) {
         ClientResponse clientResponse  = new ResourceBuilder().path(Entities.SLA.path, entityType)
             .addQueryParam(START, startTime).addQueryParam(COLO, colo).addQueryParam(END, endTime)
             .addQueryParam(ENTITY_NAME, entityName).call(Entities.SLA);
@@ -493,7 +487,7 @@ public class FalconClient extends AbstractFalconClient {
     }
 
     public TriageResult triage(String entityType, String entityName, String instanceTime,
-                               String colo) throws FalconCLIException {
+                               String colo) {
         ClientResponse clientResponse = new ResourceBuilder().path(Instances.TRIAGE.path, entityType, entityName)
             .addQueryParam(START, instanceTime).addQueryParam(COLO, colo).call(Instances.TRIAGE);
         return getResponse(TriageResult.class, clientResponse);
@@ -502,7 +496,7 @@ public class FalconClient extends AbstractFalconClient {
     @Override
     public EntityList getEntityList(String entityType, String fields, String nameSubsequence, String tagKeywords,
                                     String filterBy, String filterTags, String orderBy, String sortOrder,
-                                    Integer offset, Integer numResults, String doAsUser) throws FalconCLIException {
+                                    Integer offset, Integer numResults, String doAsUser) {
         Entities operation = Entities.LIST;
         ClientResponse clientResponse = new ResourceBuilder().path(operation.path, entityType)
             .addQueryParam(DO_AS_OPT, doAsUser).addQueryParam(NUM_RESULTS, numResults)
@@ -526,7 +520,7 @@ public class FalconClient extends AbstractFalconClient {
     public EntitySummaryResult getEntitySummary(String entityType, String cluster, String start, String end,
                                    String fields, String filterBy, String filterTags,
                                    String orderBy, String sortOrder, Integer offset, Integer numResults,
-                                   Integer numInstances, String doAsUser) throws FalconCLIException {
+                                   Integer numInstances, String doAsUser) {
         ClientResponse clientResponse = new ResourceBuilder().path(Entities.SUMMARY.path, entityType)
             .addQueryParam(CLUSTER, cluster).addQueryParam(START, start).addQueryParam(END, end)
             .addQueryParam(SORT_ORDER, sortOrder).addQueryParam(ORDER_BY, orderBy)
@@ -539,7 +533,7 @@ public class FalconClient extends AbstractFalconClient {
 
     @Override
     public APIResult touch(String entityType, String entityName, String colo,
-                           Boolean skipDryRun, String doAsUser) throws FalconCLIException {
+                           Boolean skipDryRun, String doAsUser) {
         Entities operation = Entities.TOUCH;
         ClientResponse clientResponse = new ResourceBuilder().path(operation.path, entityType, entityName)
             .addQueryParam(COLO, colo).addQueryParam(SKIP_DRYRUN, skipDryRun)
@@ -549,7 +543,7 @@ public class FalconClient extends AbstractFalconClient {
 
     public InstancesResult getRunningInstances(String type, String entity, String colo, List<LifeCycle> lifeCycles,
                                       String filterBy, String orderBy, String sortOrder,
-                                      Integer offset, Integer numResults, String doAsUser) throws FalconCLIException {
+                                      Integer offset, Integer numResults, String doAsUser) {
         ClientResponse clientResponse = new ResourceBuilder().path(Instances.RUNNING.path, type, entity)
             .addQueryParam(FILTER_BY, filterBy).addQueryParam(ORDER_BY, orderBy)
             .addQueryParam(SORT_ORDER, sortOrder).addQueryParam(OFFSET, offset)
@@ -562,7 +556,7 @@ public class FalconClient extends AbstractFalconClient {
     public InstancesResult getStatusOfInstances(String type, String entity, String start, String end, String colo,
                                                 List<LifeCycle> lifeCycles, String filterBy, String orderBy,
                                                 String sortOrder, Integer offset, Integer numResults,
-                                                String doAsUser, Boolean allAttempts) throws FalconCLIException {
+                                                String doAsUser, Boolean allAttempts) {
         ClientResponse clientResponse = new ResourceBuilder().path(Instances.STATUS.path, type, entity)
             .addQueryParam(START, start).addQueryParam(END, end).addQueryParam(COLO, colo)
             .addQueryParam(LIFECYCLE, lifeCycles, type).addQueryParam(FILTER_BY, filterBy)
@@ -576,7 +570,7 @@ public class FalconClient extends AbstractFalconClient {
                                         String start, String end,
                                         String colo, List<LifeCycle> lifeCycles,
                                         String filterBy, String orderBy, String sortOrder,
-                                        String doAsUser) throws FalconCLIException {
+                                        String doAsUser) {
         ClientResponse clientResponse = new ResourceBuilder().path(Instances.SUMMARY.path, type, entity)
             .addQueryParam(START, start).addQueryParam(END, end).addQueryParam(COLO, colo)
             .addQueryParam(LIFECYCLE, lifeCycles, type).addQueryParam(USER, doAsUser).call(Instances.SUMMARY);
@@ -585,7 +579,7 @@ public class FalconClient extends AbstractFalconClient {
 
 
     public FeedInstanceResult getFeedListing(String type, String entity, String start,
-                                     String end, String colo, String doAsUser) throws FalconCLIException {
+                                     String end, String colo, String doAsUser) {
         ClientResponse clientResponse = new ResourceBuilder().path(Instances.KILL.path, type, entity)
             .addQueryParam(START, start).addQueryParam(END, end).addQueryParam(COLO, colo)
             .addQueryParam(USER, doAsUser).call(Instances.LISTING);
@@ -594,7 +588,7 @@ public class FalconClient extends AbstractFalconClient {
 
     public InstancesResult searchInstances(String type, String nameSubsequence, String tagKeywords,
                                            String start, String end, String status, String orderBy,
-                                           Integer offset, Integer numResults) throws FalconCLIException {
+                                           Integer offset, Integer numResults)  {
         ClientResponse clientResponse = new ResourceBuilder().path(Instances.SEARCH.path)
                 .addQueryParam(ENTITY_TYPE, type)
                 .addQueryParam(NAME_SUBSEQUENCE, nameSubsequence)
@@ -612,7 +606,7 @@ public class FalconClient extends AbstractFalconClient {
     public InstancesResult killInstances(String type, String entity, String start,
                                 String end, String colo, String clusters,
                                 String sourceClusters, List<LifeCycle> lifeCycles,
-                                String doAsUser) throws FalconCLIException, UnsupportedEncodingException {
+                                String doAsUser) throws UnsupportedEncodingException {
         InputStream props = getServletInputStream(clusters, sourceClusters, null);
         ClientResponse clientResponse = new ResourceBuilder().path(Instances.KILL.path, type, entity)
             .addQueryParam(START, start).addQueryParam(END, end).addQueryParam(COLO, colo)
@@ -622,7 +616,7 @@ public class FalconClient extends AbstractFalconClient {
 
     public InstancesResult suspendInstances(String type, String entity, String start, String end, String colo,
                                             String clusters, String sourceClusters, List<LifeCycle> lifeCycles,
-                                            String doAsUser) throws FalconCLIException, UnsupportedEncodingException {
+                                            String doAsUser) throws UnsupportedEncodingException {
         ClientResponse clientResponse = new ResourceBuilder().path(Instances.SUSPEND.path, type, entity)
             .addQueryParam(START, start).addQueryParam(END, end).addQueryParam(COLO, colo)
             .addQueryParam(LIFECYCLE, lifeCycles, type).addQueryParam(USER, doAsUser).call(Instances.SUSPEND);
@@ -631,7 +625,7 @@ public class FalconClient extends AbstractFalconClient {
 
     public InstancesResult resumeInstances(String type, String entity, String start, String end, String colo,
                                            String clusters, String sourceClusters, List<LifeCycle> lifeCycles,
-                                           String doAsUser) throws FalconCLIException, UnsupportedEncodingException {
+                                           String doAsUser) throws UnsupportedEncodingException {
         ClientResponse clientResponse = new ResourceBuilder().path(Instances.RESUME.path, type, entity)
             .addQueryParam(START, start).addQueryParam(END, end).addQueryParam(COLO, colo)
             .addQueryParam(LIFECYCLE, lifeCycles, type).addQueryParam(USER, doAsUser).call(Instances.RESUME);
@@ -641,8 +635,7 @@ public class FalconClient extends AbstractFalconClient {
     public InstancesResult rerunInstances(String type, String entity, String start,
                                  String end, String filePath, String colo,
                                  String clusters, String sourceClusters, List<LifeCycle> lifeCycles,
-                                 Boolean isForced, String doAsUser)
-        throws FalconCLIException, IOException {
+                                 Boolean isForced, String doAsUser) throws IOException {
 
         StringBuilder buffer = new StringBuilder();
         if (filePath != null) {
@@ -671,7 +664,7 @@ public class FalconClient extends AbstractFalconClient {
                                               String end, String colo, String runId,
                                               List<LifeCycle> lifeCycles, String filterBy,
                                               String orderBy, String sortOrder, Integer offset,
-                                              Integer numResults, String doAsUser) throws FalconCLIException {
+                                              Integer numResults, String doAsUser) {
         ClientResponse clientResponse = new ResourceBuilder().path(Instances.LOG.path, type, entity)
             .addQueryParam(START, start).addQueryParam(END, end).addQueryParam(COLO, colo)
             .addQueryParam(RUN_ID, runId).addQueryParam(LIFECYCLE, lifeCycles, type)
@@ -685,7 +678,7 @@ public class FalconClient extends AbstractFalconClient {
                                       String start, String colo,
                                       List<LifeCycle> lifeCycles,
                                       String doAsUser)
-        throws FalconCLIException, UnsupportedEncodingException {
+        throws UnsupportedEncodingException {
         if (!DateValidator.validate(start)) {
             throw new FalconCLIException("Start date is mandatory and should be"
                     + " a valid date in  YYYY-MM-DDTHH:MMZ format.");
@@ -697,16 +690,16 @@ public class FalconClient extends AbstractFalconClient {
         return getResponse(InstancesResult.class, clientResponse);
     }
 
-    public String getThreadDump(String doAsUser) throws FalconCLIException {
+    public String getThreadDump(String doAsUser) {
         return sendAdminRequest(AdminOperations.STACK, doAsUser);
     }
 
     @Override
-    public String getVersion(String doAsUser) throws FalconCLIException {
+    public String getVersion(String doAsUser) {
         return sendAdminRequest(AdminOperations.VERSION, doAsUser);
     }
 
-    public int getStatus(String doAsUser) throws FalconCLIException {
+    public int getStatus(String doAsUser) {
         AdminOperations job =  AdminOperations.VERSION;
         ClientResponse clientResponse = new ResourceBuilder().path(job.path).addQueryParam(DO_AS_OPT, doAsUser)
             .call(job);
@@ -714,7 +707,7 @@ public class FalconClient extends AbstractFalconClient {
         return clientResponse.getStatus();
     }
 
-    public ClientResponse setSafemode(String safemode, String doAsUser) throws FalconCLIException {
+    public ClientResponse setSafemode(String safemode, String doAsUser)  {
         AdminOperations job =  AdminOperations.SAFEMODE;
         ClientResponse clientResponse = new ResourceBuilder().path(job.path).path(safemode)
                 .addQueryParam(DO_AS_OPT, doAsUser).call(job);
@@ -722,17 +715,17 @@ public class FalconClient extends AbstractFalconClient {
         return clientResponse;
     }
 
-    public String getDimensionList(String dimensionType, String cluster, String doAsUser) throws FalconCLIException {
+    public String getDimensionList(String dimensionType, String cluster, String doAsUser)  {
         return sendMetadataDiscoveryRequest(MetadataOperations.LIST, dimensionType, null, cluster, doAsUser);
     }
 
     public String getReplicationMetricsDimensionList(String schedEntityType, String schedEntityName,
-                                                     Integer numResults, String doAsUser) throws FalconCLIException {
+                                                     Integer numResults, String doAsUser) {
         return sendRequestForReplicationMetrics(MetadataOperations.LIST,
                 schedEntityType, schedEntityName, numResults, doAsUser);
     }
 
-    public LineageGraphResult getEntityLineageGraph(String pipelineName, String doAsUser) throws FalconCLIException {
+    public LineageGraphResult getEntityLineageGraph(String pipelineName, String doAsUser) {
         MetadataOperations operation = MetadataOperations.LINEAGE;
         ClientResponse clientResponse = new ResourceBuilder().path(operation.path).addQueryParam(DO_AS_OPT, doAsUser)
             .addQueryParam(FalconCLIConstants.PIPELINE_OPT, pipelineName).call(operation);
@@ -742,7 +735,7 @@ public class FalconClient extends AbstractFalconClient {
     }
 
     public String getDimensionRelations(String dimensionType, String dimensionName,
-                                        String doAsUser) throws FalconCLIException {
+                                        String doAsUser) {
         return sendMetadataDiscoveryRequest(MetadataOperations.RELATIONS, dimensionType, dimensionName, null, doAsUser);
     }
 
@@ -751,10 +744,8 @@ public class FalconClient extends AbstractFalconClient {
      *
      * @param filePath - Path of file to stream
      * @return ServletInputStream
-     * @throws FalconCLIException
      */
-    private InputStream getServletInputStream(String filePath)
-        throws FalconCLIException {
+    private InputStream getServletInputStream(String filePath) {
 
         if (filePath == null) {
             return null;
@@ -769,13 +760,13 @@ public class FalconClient extends AbstractFalconClient {
     }
 
     private <T> T getResponse(Class<T> clazz,
-                                                ClientResponse clientResponse) throws FalconCLIException {
+                                                ClientResponse clientResponse) {
         printClientResponse(clientResponse);
         checkIfSuccessful(clientResponse);
         return clientResponse.getEntity(clazz);
     }
 
-    private String getResponseAsString(ClientResponse clientResponse) throws FalconCLIException {
+    private String getResponseAsString(ClientResponse clientResponse) {
         printClientResponse(clientResponse);
         checkIfSuccessful(clientResponse);
         return clientResponse.getEntity(String.class);
@@ -817,7 +808,7 @@ public class FalconClient extends AbstractFalconClient {
         }
 
         public ResourceBuilder addQueryParam(String paramName, List<LifeCycle> lifeCycles,
-                                             String type) throws FalconCLIException {
+                                             String type) {
             if (lifeCycles != null) {
                 checkLifeCycleOption(lifeCycles, type);
                 for (LifeCycle lifeCycle : lifeCycles) {
@@ -876,7 +867,7 @@ public class FalconClient extends AbstractFalconClient {
         }
     }
 
-    public FeedLookupResult reverseLookUp(String type, String path, String doAsUser) throws FalconCLIException {
+    public FeedLookupResult reverseLookUp(String type, String path, String doAsUser) {
         Entities api = Entities.LOOKUP;
         ClientResponse response = new ResourceBuilder().path(api.path, type).addQueryParam(DO_AS_OPT, doAsUser)
             .addQueryParam(PATH, path).call(api);
@@ -884,7 +875,7 @@ public class FalconClient extends AbstractFalconClient {
     }
 
     public FeedInstanceResult getFeedInstanceListing(String type, String entity, String start, String end, String colo
-            , String doAsUser) throws FalconCLIException {
+            , String doAsUser) {
 
         checkType(type);
         Instances api = Instances.LISTING;
@@ -896,7 +887,7 @@ public class FalconClient extends AbstractFalconClient {
 
 
     public InstanceDependencyResult getInstanceDependencies(String entityType, String entityName, String instanceTime,
-                                                            String colo) throws FalconCLIException {
+                                                            String colo) {
         checkType(entityType);
         Instances api = Instances.DEPENDENCY;
         ClientResponse clientResponse = new ResourceBuilder().path(api.path, entityType, entityName)
@@ -906,7 +897,7 @@ public class FalconClient extends AbstractFalconClient {
 
     //RESUME CHECKSTYLE CHECK VisibilityModifierCheck
 
-    private void checkLifeCycleOption(List<LifeCycle> lifeCycles, String type) throws FalconCLIException {
+    private void checkLifeCycleOption(List<LifeCycle> lifeCycles, String type) {
         if (lifeCycles != null && !lifeCycles.isEmpty()) {
             EntityType entityType = EntityType.getEnum(type);
             for (LifeCycle lifeCycle : lifeCycles) {
@@ -917,7 +908,7 @@ public class FalconClient extends AbstractFalconClient {
         }
     }
 
-    protected void checkType(String type) throws FalconCLIException {
+    protected void checkType(String type) {
         if (type == null || type.isEmpty()) {
             throw new FalconCLIException("entity type is empty");
         } else {
@@ -929,7 +920,7 @@ public class FalconClient extends AbstractFalconClient {
         }
     }
 
-    private String sendAdminRequest(AdminOperations job, String doAsUser) throws FalconCLIException {
+    private String sendAdminRequest(AdminOperations job, String doAsUser) {
         ClientResponse clientResponse = new ResourceBuilder().path(job.path).addQueryParam(DO_AS_OPT, doAsUser)
             .call(job);
         return getResponseAsString(clientResponse);
@@ -937,7 +928,7 @@ public class FalconClient extends AbstractFalconClient {
 
     private String sendRequestForReplicationMetrics(final MetadataOperations operation, final String schedEntityType,
                                                     final String schedEntityName, Integer numResults,
-                                                    final String doAsUser) throws FalconCLIException {
+                                                    final String doAsUser) {
         WebResource resource = service.path(operation.path)
                 .path(schedEntityName)
                 .path(RelationshipType.REPLICATION_METRICS.getName())
@@ -971,7 +962,7 @@ public class FalconClient extends AbstractFalconClient {
                                                 final String dimensionType,
                                                 final String dimensionName,
                                                 final String cluster,
-                                                final String doAsUser) throws FalconCLIException {
+                                                final String doAsUser) {
         WebResource resource;
         switch (operation) {
         case LIST:
@@ -1011,45 +1002,44 @@ public class FalconClient extends AbstractFalconClient {
     }
 
 
-    public String getVertex(String id, String doAsUser) throws FalconCLIException {
+    public String getVertex(String id, String doAsUser) {
         return sendMetadataLineageRequest(MetadataOperations.VERTICES, id, doAsUser);
     }
 
-    public String getVertices(String key, String value, String doAsUser) throws FalconCLIException {
+    public String getVertices(String key, String value, String doAsUser) {
         return sendMetadataLineageRequest(MetadataOperations.VERTICES, key, value, doAsUser);
     }
 
-    public String getVertexEdges(String id, String direction, String doAsUser) throws FalconCLIException {
+    public String getVertexEdges(String id, String direction, String doAsUser) {
         return sendMetadataLineageRequestForEdges(MetadataOperations.VERTICES, id, direction, doAsUser);
     }
 
-    public String getEdge(String id, String doAsUser) throws FalconCLIException {
+    public String getEdge(String id, String doAsUser) {
         return sendMetadataLineageRequest(MetadataOperations.EDGES, id, doAsUser);
     }
 
-    public String enumerateExtensions() throws FalconCLIException {
+    public String enumerateExtensions()  {
         ClientResponse clientResponse = new ResourceBuilder()
                 .path(ExtensionOperations.ENUMERATE.path)
                 .call(ExtensionOperations.ENUMERATE);
         return getResponse(String.class, clientResponse);
     }
 
-    public String getExtensionDefinition(final String extensionName) throws FalconCLIException {
+    public String getExtensionDefinition(final String extensionName)  {
         ClientResponse clientResponse = new ResourceBuilder()
                 .path(ExtensionOperations.DEFINITION.path, extensionName)
                 .call(ExtensionOperations.DEFINITION);
         return getResponse(String.class, clientResponse);
     }
 
-    public String getExtensionDescription(final String extensionName) throws FalconCLIException {
+    public String getExtensionDescription(final String extensionName)  {
         ClientResponse clientResponse = new ResourceBuilder()
                 .path(ExtensionOperations.DESCRIBE.path, extensionName)
                 .call(ExtensionOperations.DESCRIBE);
         return getResponse(String.class, clientResponse);
     }
 
-    public APIResult submitExtensionJob(final String extensionName, final String filePath, final String doAsUser)
-        throws FalconCLIException {
+    public APIResult submitExtensionJob(final String extensionName, final String filePath, final String doAsUser) {
         InputStream entityStream = getServletInputStream(filePath);
         ClientResponse clientResponse = new ResourceBuilder()
                 .path(ExtensionOperations.SUBMIT.path, extensionName)
@@ -1059,7 +1049,7 @@ public class FalconClient extends AbstractFalconClient {
     }
 
     public APIResult submitAndScheduleExtensionJob(final String extensionName, final String filePath,
-                                                   final String doAsUser) throws FalconCLIException {
+                                                   final String doAsUser)  {
         InputStream entityStream = getServletInputStream(filePath);
         ClientResponse clientResponse = new ResourceBuilder()
                 .path(ExtensionOperations.SUBMIT_AND_SCHEDULE.path, extensionName)
@@ -1068,8 +1058,7 @@ public class FalconClient extends AbstractFalconClient {
         return getResponse(APIResult.class, clientResponse);
     }
 
-    public APIResult updateExtensionJob(final String extensionName, final String filePath, final String doAsUser)
-        throws FalconCLIException {
+    public APIResult updateExtensionJob(final String extensionName, final String filePath, final String doAsUser) {
         InputStream entityStream = getServletInputStream(filePath);
         ClientResponse clientResponse = new ResourceBuilder()
                 .path(ExtensionOperations.UPDATE.path, extensionName)
@@ -1078,8 +1067,7 @@ public class FalconClient extends AbstractFalconClient {
         return getResponse(APIResult.class, clientResponse);
     }
 
-    public APIResult validateExtensionJob(final String extensionName, final String filePath, final String doAsUser)
-        throws FalconCLIException {
+    public APIResult validateExtensionJob(final String extensionName, final String filePath, final String doAsUser) {
         InputStream entityStream = getServletInputStream(filePath);
         ClientResponse clientResponse = new ResourceBuilder()
                 .path(ExtensionOperations.VALIDATE.path, extensionName)
@@ -1088,7 +1076,7 @@ public class FalconClient extends AbstractFalconClient {
         return getResponse(APIResult.class, clientResponse);
     }
 
-    public APIResult scheduleExtensionJob(final String jobName, final String doAsUser) throws FalconCLIException {
+    public APIResult scheduleExtensionJob(final String jobName, final String doAsUser)  {
         ClientResponse clientResponse = new ResourceBuilder()
                 .path(ExtensionOperations.SCHEDULE.path, jobName)
                 .addQueryParam(DO_AS_OPT, doAsUser)
@@ -1096,7 +1084,7 @@ public class FalconClient extends AbstractFalconClient {
         return getResponse(APIResult.class, clientResponse);
     }
 
-    public APIResult suspendExtensionJob(final String jobName, final String doAsUser) throws FalconCLIException {
+    public APIResult suspendExtensionJob(final String jobName, final String doAsUser)  {
         ClientResponse clientResponse = new ResourceBuilder()
                 .path(ExtensionOperations.SUSPEND.path, jobName)
                 .addQueryParam(DO_AS_OPT, doAsUser)
@@ -1104,7 +1092,7 @@ public class FalconClient extends AbstractFalconClient {
         return getResponse(APIResult.class, clientResponse);
     }
 
-    public APIResult resumeExtensionJob(final String jobName, final String doAsUser) throws FalconCLIException {
+    public APIResult resumeExtensionJob(final String jobName, final String doAsUser)  {
         ClientResponse clientResponse = new ResourceBuilder()
                 .path(ExtensionOperations.RESUME.path, jobName)
                 .addQueryParam(DO_AS_OPT, doAsUser)
@@ -1112,7 +1100,7 @@ public class FalconClient extends AbstractFalconClient {
         return getResponse(APIResult.class, clientResponse);
     }
 
-    public APIResult deleteExtensionJob(final String jobName, final String doAsUser) throws FalconCLIException {
+    public APIResult deleteExtensionJob(final String jobName, final String doAsUser)  {
         ClientResponse clientResponse = new ResourceBuilder()
                 .path(ExtensionOperations.DELETE.path, jobName)
                 .addQueryParam(DO_AS_OPT, doAsUser)
@@ -1122,7 +1110,7 @@ public class FalconClient extends AbstractFalconClient {
 
     public ExtensionJobList listExtensionJob(final String extensionName, final String doAsUser,
                                              final String sortOrder, final String offset,
-                                             final String numResults, final String fields) throws FalconCLIException {
+                                             final String numResults, final String fields)  {
         ClientResponse clientResponse = new ResourceBuilder()
                 .path(ExtensionOperations.LIST.path, extensionName)
                 .addQueryParam(DO_AS_OPT, doAsUser)
@@ -1137,8 +1125,7 @@ public class FalconClient extends AbstractFalconClient {
     public ExtensionInstanceList listExtensionInstance(final String jobName, final String doAsUser, final String fields,
                                                        final String start, final String end, final String status,
                                                        final String orderBy, final String sortOrder,
-                                                       final String offset, final String numResults)
-        throws FalconCLIException {
+                                                       final String offset, final String numResults) {
         ClientResponse clientResponse = new ResourceBuilder()
                 .path(ExtensionOperations.INSTANCES.path, jobName)
                 .addQueryParam(DO_AS_OPT, doAsUser)
@@ -1155,7 +1142,7 @@ public class FalconClient extends AbstractFalconClient {
     }
 
     private String sendExtensionRequest(final ExtensionOperations operation,
-                                        final String extensionName) throws FalconCLIException {
+                                        final String extensionName)  {
         WebResource resource;
         switch (operation) {
         case ENUMERATE:
@@ -1181,27 +1168,27 @@ public class FalconClient extends AbstractFalconClient {
     }
 
     private String sendMetadataLineageRequest(MetadataOperations job, String id,
-                                              String doAsUser) throws FalconCLIException {
+                                              String doAsUser) {
         ClientResponse clientResponse = new ResourceBuilder().path(job.path, id).addQueryParam(DO_AS_OPT, doAsUser)
             .call(job);
         return getResponseAsString(clientResponse);
     }
 
     private String sendMetadataLineageRequest(MetadataOperations job, String key,
-                                              String value, String doAsUser) throws FalconCLIException {
+                                              String value, String doAsUser) {
         ClientResponse clientResponse = new ResourceBuilder().path(job.path).addQueryParam(DO_AS_OPT, doAsUser)
             .addQueryParam(KEY, key).addQueryParam(VALUE, value).call(job);
         return getResponseAsString(clientResponse);
     }
 
     private String sendMetadataLineageRequestForEdges(MetadataOperations job, String id,
-                                                      String direction, String doAsUser) throws FalconCLIException {
+                                                      String direction, String doAsUser) {
         ClientResponse clientResponse = new ResourceBuilder().path(job.path, id, direction)
             .addQueryParam(DO_AS_OPT, doAsUser).call(job);
         return getResponseAsString(clientResponse);
     }
 
-    private void checkIfSuccessful(ClientResponse clientResponse) throws FalconCLIException {
+    private void checkIfSuccessful(ClientResponse clientResponse) {
         Response.Status.Family statusFamily = clientResponse.getClientResponseStatus().getFamily();
         if (statusFamily != Response.Status.Family.SUCCESSFUL && statusFamily != Response.Status.Family.INFORMATIONAL) {
             throw FalconCLIException.fromReponse(clientResponse);

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/client/src/main/java/org/apache/falcon/resource/EntityList.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/falcon/resource/EntityList.java b/client/src/main/java/org/apache/falcon/resource/EntityList.java
index b91bdbe..1a208fa 100644
--- a/client/src/main/java/org/apache/falcon/resource/EntityList.java
+++ b/client/src/main/java/org/apache/falcon/resource/EntityList.java
@@ -56,14 +56,14 @@ public class EntityList {
     /**
      * List of fields returned by RestAPI.
      */
-    public static enum EntityFieldList {
+    public enum EntityFieldList {
         TYPE, NAME, STATUS, TAGS, PIPELINES, CLUSTERS
     }
 
     /**
      * Filter by these Fields is supported by RestAPI.
      */
-    public static enum EntityFilterByFields {
+    public enum EntityFilterByFields {
         TYPE, NAME, STATUS, PIPELINES, CLUSTER, TAGS
     }
 

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/prism/src/main/java/org/apache/falcon/resource/AbstractEntityManager.java
----------------------------------------------------------------------
diff --git a/prism/src/main/java/org/apache/falcon/resource/AbstractEntityManager.java b/prism/src/main/java/org/apache/falcon/resource/AbstractEntityManager.java
index 6c9237b..9169c18 100644
--- a/prism/src/main/java/org/apache/falcon/resource/AbstractEntityManager.java
+++ b/prism/src/main/java/org/apache/falcon/resource/AbstractEntityManager.java
@@ -319,7 +319,7 @@ public abstract class AbstractEntityManager extends AbstractMetadataResource {
             Entity entity = deserializeEntity(inputStream, entityType);
             verifySafemodeOperation(entity, EntityUtil.ENTITY_OPERATION.UPDATE);
             return update(entity, type, entityName, skipDryRun);
-        } catch (IOException | FalconException e) {
+        } catch (FalconException e) {
             LOG.error("Update failed", e);
             throw FalconWebException.newAPIException(e, Response.Status.INTERNAL_SERVER_ERROR);
         }
@@ -756,7 +756,7 @@ public abstract class AbstractEntityManager extends AbstractMetadataResource {
     }
 
     protected Entity deserializeEntity(InputStream xmlStream, EntityType entityType)
-        throws IOException, FalconException {
+        throws FalconException {
 
         EntityParser<?> entityParser = EntityParserFactory.getParser(entityType);
         if (xmlStream.markSupported()) {

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/unit/src/main/java/org/apache/falcon/unit/FalconUnitClient.java
----------------------------------------------------------------------
diff --git a/unit/src/main/java/org/apache/falcon/unit/FalconUnitClient.java b/unit/src/main/java/org/apache/falcon/unit/FalconUnitClient.java
index 37221f3..fed50cf 100644
--- a/unit/src/main/java/org/apache/falcon/unit/FalconUnitClient.java
+++ b/unit/src/main/java/org/apache/falcon/unit/FalconUnitClient.java
@@ -35,9 +35,11 @@ import org.apache.falcon.resource.APIResult;
 import org.apache.falcon.resource.EntityList;
 import org.apache.falcon.resource.EntitySummaryResult;
 import org.apache.falcon.resource.FeedInstanceResult;
+import org.apache.falcon.resource.FeedLookupResult;
 import org.apache.falcon.resource.InstanceDependencyResult;
 import org.apache.falcon.resource.InstancesResult;
 import org.apache.falcon.resource.InstancesSummaryResult;
+import org.apache.falcon.resource.SchedulableEntityInstanceResult;
 import org.apache.falcon.resource.admin.AdminResource;
 import org.apache.falcon.util.DateUtil;
 import org.apache.falcon.workflow.WorkflowEngineFactory;
@@ -96,11 +98,11 @@ public class FalconUnitClient extends AbstractFalconClient {
      * @return boolean
      */
     @Override
-    public APIResult submit(String type, String filePath, String doAsUser) throws IOException, FalconCLIException {
+    public APIResult submit(String type, String filePath, String doAsUser) {
 
         try {
             return localSchedulableEntityManager.submit(type, filePath, doAsUser);
-        } catch (FalconException e) {
+        } catch (FalconException | IOException e) {
             throw new FalconCLIException("FAILED", e);
         }
     }
@@ -112,17 +114,14 @@ public class FalconUnitClient extends AbstractFalconClient {
      * @param entityName entity name
      * @param cluster    cluster on which it has to be scheduled
      * @return
-     * @throws FalconCLIException
      * @throws FalconException
      */
     @Override
     public APIResult schedule(EntityType entityType, String entityName, String cluster,
-                              Boolean skipDryRun, String doAsUser, String properties) throws FalconCLIException {
+                              Boolean skipDryRun, String doAsUser, String properties) {
         try {
             return localSchedulableEntityManager.schedule(entityType, entityName, skipDryRun, properties);
-        } catch (FalconException e) {
-            throw new FalconCLIException(e);
-        } catch (AuthorizationException e) {
+        } catch (FalconException | AuthorizationException e) {
             throw new FalconCLIException(e);
         }
     }
@@ -134,7 +133,7 @@ public class FalconUnitClient extends AbstractFalconClient {
 
     @Override
     public APIResult validate(String entityType, String filePath, Boolean skipDryRun,
-                              String doAsUser) throws FalconCLIException {
+                              String doAsUser) {
         try {
             return localSchedulableEntityManager.validate(entityType, filePath, skipDryRun, doAsUser);
         } catch (FalconException e) {
@@ -144,7 +143,7 @@ public class FalconUnitClient extends AbstractFalconClient {
 
     @Override
     public APIResult update(String entityType, String entityName, String filePath,
-                            Boolean skipDryRun, String doAsUser) throws FalconCLIException {
+                            Boolean skipDryRun, String doAsUser) {
         try {
             return localSchedulableEntityManager.update(entityType, entityName, filePath,
                     skipDryRun, "local", doAsUser);
@@ -154,7 +153,7 @@ public class FalconUnitClient extends AbstractFalconClient {
     }
 
     @Override
-    public Entity getDefinition(String entityType, String entityName, String doAsUser) throws FalconCLIException {
+    public Entity getDefinition(String entityType, String entityName, String doAsUser) {
         String entity = localSchedulableEntityManager.getEntityDefinition(entityType, entityName);
         return Entity.fromString(EntityType.getEnum(entityType), entity);
     }
@@ -164,7 +163,7 @@ public class FalconUnitClient extends AbstractFalconClient {
     public InstancesResult getStatusOfInstances(String type, String entity, String start, String end, String colo,
                                                 List<LifeCycle> lifeCycles, String filterBy, String orderBy,
                                                 String sortOrder, Integer offset, Integer numResults, String doAsUser,
-                                                Boolean allAttempts) throws FalconCLIException {
+                                                Boolean allAttempts) {
         if (orderBy == null) {
             orderBy = DEFAULT_ORDERBY;
         }
@@ -193,7 +192,7 @@ public class FalconUnitClient extends AbstractFalconClient {
      * @return boolean
      */
     public APIResult schedule(EntityType entityType, String entityName, String startTime, int numInstances,
-                              String cluster, Boolean skipDryRun, String properties) throws FalconCLIException {
+                              String cluster, Boolean skipDryRun, String properties) {
         try {
             FalconUnitHelper.checkSchedulableEntity(entityType.toString());
             Entity entity = EntityUtil.getEntity(entityType, entityName);
@@ -238,32 +237,28 @@ public class FalconUnitClient extends AbstractFalconClient {
     }
 
     @Override
-    public APIResult suspend(EntityType entityType, String entityName, String colo, String doAsUser) throws
-            FalconCLIException {
+    public APIResult suspend(EntityType entityType, String entityName, String colo, String doAsUser) {
         return localSchedulableEntityManager.suspend(entityType.name(), entityName, colo);
     }
 
     @Override
-    public APIResult resume(EntityType entityType, String entityName, String colo, String doAsUser) throws
-            FalconCLIException {
+    public APIResult resume(EntityType entityType, String entityName, String colo, String doAsUser) {
         return localSchedulableEntityManager.resume(entityType.name(), entityName, colo);
     }
 
     @Override
     public APIResult getStatus(EntityType entityType, String entityName, String colo, String doAsUser,
-                               boolean showScheduler) throws FalconCLIException {
+                               boolean showScheduler) {
         return localSchedulableEntityManager.getStatus(entityType.name(), entityName, colo, showScheduler);
     }
 
     @Override
     public APIResult submitAndSchedule(String entityType, String filePath, Boolean skipDryRun, String doAsUser,
-                                       String properties) throws FalconCLIException {
+                                       String properties) {
         try {
             return localSchedulableEntityManager.submitAndSchedule(entityType, filePath, skipDryRun, doAsUser,
                     properties);
-        } catch (FalconException e) {
-            throw new FalconCLIException(e);
-        } catch (IOException e) {
+        } catch (FalconException | IOException e) {
             throw new FalconCLIException(e);
         }
     }
@@ -271,7 +266,7 @@ public class FalconUnitClient extends AbstractFalconClient {
     @Override
     public EntityList getEntityList(String entityType, String fields, String nameSubsequence, String tagKeywords,
                                     String filterBy, String filterTags, String orderBy, String sortOrder,
-                                    Integer offset, Integer numResults, String doAsUser) throws FalconCLIException {
+                                    Integer offset, Integer numResults, String doAsUser) {
         return localSchedulableEntityManager.getEntityList(fields, nameSubsequence, tagKeywords, entityType, filterTags,
                 filterBy, orderBy, sortOrder, offset, numResults, doAsUser);
     }
@@ -280,34 +275,34 @@ public class FalconUnitClient extends AbstractFalconClient {
     public EntitySummaryResult getEntitySummary(String entityType, String cluster, String start, String end,
                                                 String fields, String filterBy, String filterTags, String orderBy,
                                                 String sortOrder, Integer offset, Integer numResults,
-                                                Integer numInstances, String doAsUser) throws FalconCLIException {
+                                                Integer numInstances, String doAsUser) {
         return localSchedulableEntityManager.getEntitySummary(entityType, cluster, start, end, fields, filterBy,
                 filterTags, orderBy, sortOrder, offset, numResults, numInstances, doAsUser);
     }
 
     @Override
     public APIResult touch(String entityType, String entityName, String colo, Boolean skipDryRun,
-                           String doAsUser) throws FalconCLIException {
+                           String doAsUser) {
         return localSchedulableEntityManager.touch(entityType, entityName, colo, skipDryRun);
     }
 
     public InstancesResult killInstances(String type, String entity, String start, String end, String colo,
                                          String clusters, String sourceClusters, List<LifeCycle> lifeCycles,
-                                         String doAsUser) throws FalconCLIException, UnsupportedEncodingException {
+                                         String doAsUser) throws UnsupportedEncodingException {
         Properties props = getProperties(clusters, sourceClusters);
         return localInstanceManager.killInstance(props, type, entity, start, end, colo, lifeCycles);
     }
 
     public InstancesResult suspendInstances(String type, String entity, String start, String end, String colo,
                                             String clusters, String sourceClusters, List<LifeCycle> lifeCycles,
-                                            String doAsUser) throws FalconCLIException, UnsupportedEncodingException {
+                                            String doAsUser) throws UnsupportedEncodingException {
         Properties props = getProperties(clusters, sourceClusters);
         return localInstanceManager.suspendInstance(props, type, entity, start, end, colo, lifeCycles);
     }
 
     public InstancesResult resumeInstances(String type, String entity, String start, String end, String colo,
                                            String clusters, String sourceClusters, List<LifeCycle> lifeCycles,
-                                           String doAsUser) throws FalconCLIException, UnsupportedEncodingException {
+                                           String doAsUser) throws UnsupportedEncodingException {
         Properties props = getProperties(clusters, sourceClusters);
         return localInstanceManager.resumeInstance(props, type, entity, start, end, colo, lifeCycles);
     }
@@ -315,15 +310,14 @@ public class FalconUnitClient extends AbstractFalconClient {
     public InstancesResult rerunInstances(String type, String entity, String start, String end, String filePath,
                                           String colo, String clusters, String sourceClusters,
                                           List<LifeCycle> lifeCycles, Boolean isForced, String doAsUser) throws
-            FalconCLIException, IOException {
+            IOException {
         Properties props = getProperties(clusters, sourceClusters);
         return localInstanceManager.reRunInstance(type, entity, start, end, props, colo, lifeCycles, isForced);
     }
 
     public InstancesSummaryResult getSummaryOfInstances(String type, String entity, String start, String end,
                                                         String colo, List<LifeCycle> lifeCycles, String filterBy,
-                                                        String orderBy, String sortOrder, String doAsUser) throws
-            FalconCLIException {
+                                                        String orderBy, String sortOrder, String doAsUser) {
         if (StringUtils.isBlank(orderBy)) {
             orderBy = DEFAULT_ORDERBY;
         }
@@ -335,32 +329,32 @@ public class FalconUnitClient extends AbstractFalconClient {
     }
 
     public FeedInstanceResult getFeedListing(String type, String entity, String start, String end, String colo,
-                                             String doAsUser) throws FalconCLIException {
+                                             String doAsUser) {
         return localInstanceManager.getListing(type, entity, start, end, colo);
     }
 
     public InstancesResult getLogsOfInstances(String type, String entity, String start, String end, String colo,
                                               String runId, List<LifeCycle> lifeCycles, String filterBy,
                                               String orderBy, String sortOrder, Integer offset, Integer numResults,
-                                              String doAsUser) throws FalconCLIException {
+                                              String doAsUser) {
         return localInstanceManager.getLogs(type, entity, start, end, colo, runId, lifeCycles, filterBy, orderBy,
                 sortOrder, offset, numResults);
     }
 
     public InstancesResult getParamsOfInstance(String type, String entity, String start, String colo,
-                                               List<LifeCycle> lifeCycles, String doAsUser) throws FalconCLIException,
+                                               List<LifeCycle> lifeCycles, String doAsUser) throws
             UnsupportedEncodingException {
         return localInstanceManager.getInstanceParams(type, entity, start, colo, lifeCycles);
     }
     //RESUME CHECKSTYLE CHECK ParameterNumberCheck
 
     public InstanceDependencyResult getInstanceDependencies(String entityType, String entityName, String instanceTime,
-                                                            String colo) throws FalconCLIException {
+                                                            String colo) {
         return localInstanceManager.getInstanceDependencies(entityType, entityName, instanceTime, colo);
     }
 
     @Override
-    public String getVersion(String doAsUser) throws FalconCLIException {
+    public String getVersion(String doAsUser) {
         AdminResource resource = new AdminResource();
         AdminResource.PropertyList propertyList = resource.getVersion();
         Map<String, String> version = new LinkedHashMap<>();
@@ -375,6 +369,21 @@ public class FalconUnitClient extends AbstractFalconClient {
         return version.toString();
     }
 
+    @Override
+    public SchedulableEntityInstanceResult getFeedSlaMissPendingAlerts(String entityType, String entityName, String start, String end, String colo) {
+        return null;
+    }
+
+    @Override
+    public FeedLookupResult reverseLookUp(String entityType, String path, String doAs) {
+        return null;
+    }
+
+    @Override
+    public EntityList getDependency(String entityType, String entityName, String doAs) {
+        return null;
+    }
+
     private boolean checkAndUpdateCluster(Entity entity, EntityType entityType, String cluster) {
         if (entityType == EntityType.FEED) {
             return checkAndUpdateFeedClusters(entity, cluster);


[2/2] falcon git commit: FALCON-1609 Add entity commands to falcon spring-shell CLI

Posted by aj...@apache.org.
FALCON-1609 Add entity commands to falcon spring-shell CLI

Author: Rajat Khandelwal <ra...@gmail.com>

Reviewers: Ajay Yadava <aj...@apache.org>, Balu Vellanki<ba...@apache.org>

Closes #14 from prongs/FALCON-1609


Project: http://git-wip-us.apache.org/repos/asf/falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/falcon/commit/b2526d8f
Tree: http://git-wip-us.apache.org/repos/asf/falcon/tree/b2526d8f
Diff: http://git-wip-us.apache.org/repos/asf/falcon/diff/b2526d8f

Branch: refs/heads/master
Commit: b2526d8f4b8043ed0e1c005b89533683815e2373
Parents: 60e2f68
Author: Rajat Khandelwal <ra...@gmail.com>
Authored: Wed Jul 6 16:10:28 2016 +0530
Committer: Ajay Yadava <aj...@gmail.com>
Committed: Wed Jul 6 16:10:28 2016 +0530

----------------------------------------------------------------------
 .../org/apache/falcon/cli/FalconAdminCLI.java   |   2 +-
 .../java/org/apache/falcon/cli/FalconCLI.java   |  58 +++-
 .../falcon/cli/FalconCLIRuntimeException.java   |  37 ---
 .../org/apache/falcon/cli/FalconEntityCLI.java  | 208 +++++++------
 .../apache/falcon/cli/FalconExtensionCLI.java   |   5 +-
 .../apache/falcon/cli/FalconInstanceCLI.java    |   6 +-
 .../apache/falcon/cli/FalconMetadataCLI.java    |  16 +-
 .../falcon/cli/commands/BaseFalconCommands.java |  40 ++-
 .../cli/commands/FalconConnectionCommands.java  |   2 +
 .../cli/commands/FalconEntityCommands.java      | 300 +++++++++++++++++++
 .../cli/commands/FalconInstanceCommands.java    |   3 +
 .../falcon/cli/commands/FalconCLITest.java      |  67 +++++
 .../commands/FalconConnectionCommandsTest.java  |  47 +++
 client/pom.xml                                  |   8 +
 .../org/apache/falcon/FalconCLIConstants.java   |   6 +-
 .../falcon/client/AbstractFalconClient.java     |  95 +++---
 .../falcon/client/FalconCLIException.java       |   7 +-
 .../org/apache/falcon/client/FalconClient.java  | 163 +++++-----
 .../org/apache/falcon/resource/EntityList.java  |   4 +-
 .../falcon/resource/AbstractEntityManager.java  |   4 +-
 .../apache/falcon/unit/FalconUnitClient.java    |  79 ++---
 21 files changed, 813 insertions(+), 344 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/cli/src/main/java/org/apache/falcon/cli/FalconAdminCLI.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/falcon/cli/FalconAdminCLI.java b/cli/src/main/java/org/apache/falcon/cli/FalconAdminCLI.java
index e8ea06b..1b6d289 100644
--- a/cli/src/main/java/org/apache/falcon/cli/FalconAdminCLI.java
+++ b/cli/src/main/java/org/apache/falcon/cli/FalconAdminCLI.java
@@ -74,7 +74,7 @@ public class FalconAdminCLI extends FalconCLI {
     }
 
     public int adminCommand(CommandLine commandLine, FalconClient client,
-                             String falconUrl) throws FalconCLIException, IOException {
+                             String falconUrl) throws IOException {
         String result;
         Set<String> optionsList = new HashSet<String>();
         for (Option option : commandLine.getOptions()) {

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/cli/src/main/java/org/apache/falcon/cli/FalconCLI.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/falcon/cli/FalconCLI.java b/cli/src/main/java/org/apache/falcon/cli/FalconCLI.java
index 2977e72..bff818a 100644
--- a/cli/src/main/java/org/apache/falcon/cli/FalconCLI.java
+++ b/cli/src/main/java/org/apache/falcon/cli/FalconCLI.java
@@ -48,7 +48,45 @@ public class FalconCLI {
     public static final AtomicReference<PrintStream> ERR = new AtomicReference<PrintStream>(System.err);
     public static final AtomicReference<PrintStream> OUT = new AtomicReference<PrintStream>(System.out);
 
-    private static final String FALCON_URL = "FALCON_URL";
+    public static final String ENV_FALCON_DEBUG = "FALCON_DEBUG";
+    public static final String DEBUG_OPTION = "debug";
+    public static final String URL_OPTION = "url";
+    public static final String FALCON_URL = "FALCON_URL";
+
+    public static final String ADMIN_CMD = "admin";
+    public static final String HELP_CMD = "help";
+    public static final String METADATA_CMD = "metadata";
+    public static final String ENTITY_CMD = "entity";
+    public static final String INSTANCE_CMD = "instance";
+    public static final String RECIPE_CMD = "recipe";
+
+    public static final String TYPE_OPT = "type";
+    public static final String COLO_OPT = "colo";
+    public static final String CLUSTER_OPT = "cluster";
+    public static final String FEED_OPT = "feed";
+    public static final String PROCESS_OPT = "process";
+    public static final String ENTITY_NAME_OPT = "name";
+    public static final String FILE_PATH_OPT = "file";
+    public static final String VERSION_OPT = "version";
+    public static final String SCHEDULE_OPT = "schedule";
+    public static final String SUSPEND_OPT = "suspend";
+    public static final String RESUME_OPT = "resume";
+    public static final String STATUS_OPT = "status";
+    public static final String SUMMARY_OPT = "summary";
+    public static final String DEPENDENCY_OPT = "dependency";
+    public static final String LIST_OPT = "list";
+    public static final String SKIPDRYRUN_OPT = "skipDryRun";
+    public static final String FILTER_BY_OPT = "filterBy";
+    public static final String ORDER_BY_OPT = "orderBy";
+    public static final String SORT_ORDER_OPT = "sortOrder";
+    public static final String OFFSET_OPT = "offset";
+    public static final String NUM_RESULTS_OPT = "numResults";
+    public static final String START_OPT = "start";
+    public static final String END_OPT = "end";
+    public static final String CURRENT_COLO = "current.colo";
+    public static final String CLIENT_PROPERTIES = "/client.properties";
+    public static final String DO_AS_OPT = "doAs";
+
     private final Properties clientProperties;
 
     public FalconCLI() throws Exception {
@@ -155,8 +193,7 @@ public class FalconCLI {
         }
     }
 
-    protected Integer parseIntegerInput(String optionValue, Integer defaultVal, String optionName)
-        throws FalconCLIException {
+    protected Integer parseIntegerInput(String optionValue, Integer defaultVal, String optionName) {
         Integer integer = defaultVal;
         if (optionValue != null) {
             try {
@@ -169,7 +206,7 @@ public class FalconCLI {
         return integer;
     }
 
-    protected void validateEntityTypeForSummary(String type) throws FalconCLIException {
+    public static void validateEntityTypeForSummary(String type) {
         EntityType entityType = EntityType.getEnum(type);
         if (!entityType.isSchedulable()) {
             throw new FalconCLIException("Invalid entity type " + entityType
@@ -177,13 +214,13 @@ public class FalconCLI {
         }
     }
 
-    protected void validateNotEmpty(String paramVal, String paramName) throws FalconCLIException {
+    protected void validateNotEmpty(String paramVal, String paramName) {
         if (StringUtils.isBlank(paramVal)) {
             throw new FalconCLIException("Missing argument : " + paramName);
         }
     }
 
-    protected void validateSortOrder(String sortOrder) throws FalconCLIException {
+    protected void validateSortOrder(String sortOrder) {
         if (!StringUtils.isBlank(sortOrder)) {
             if (!sortOrder.equalsIgnoreCase("asc") && !sortOrder.equalsIgnoreCase("desc")) {
                 throw new FalconCLIException("Value for param sortOrder should be \"asc\" or \"desc\". It is  : "
@@ -192,7 +229,7 @@ public class FalconCLI {
         }
     }
 
-    protected String getColo(String colo) throws FalconCLIException, IOException {
+    protected String getColo(String colo) throws IOException {
         if (colo == null) {
             Properties prop = getClientProperties();
             colo = prop.getProperty(FalconCLIConstants.CURRENT_COLO, "*");
@@ -200,7 +237,7 @@ public class FalconCLI {
         return colo;
     }
 
-    protected void validateFilterBy(String filterBy, String filterType) throws FalconCLIException {
+    public static void validateFilterBy(String filterBy, String filterType) {
         if (StringUtils.isEmpty(filterBy)) {
             return;
         }
@@ -223,7 +260,7 @@ public class FalconCLI {
         }
     }
 
-    protected void validateOrderBy(String orderBy, String action) throws FalconCLIException {
+    public static void validateOrderBy(String orderBy, String action) {
         if (StringUtils.isBlank(orderBy)) {
             return;
         }
@@ -245,7 +282,8 @@ public class FalconCLI {
         throw new FalconCLIException("Invalid orderBy argument : " + orderBy);
     }
 
-    protected String getFalconEndpoint(CommandLine commandLine) throws FalconCLIException, IOException {
+
+    protected String getFalconEndpoint(CommandLine commandLine) throws IOException {
         String url = commandLine.getOptionValue(FalconCLIConstants.URL_OPTION);
         if (url == null) {
             url = System.getenv(FALCON_URL);

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/cli/src/main/java/org/apache/falcon/cli/FalconCLIRuntimeException.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/falcon/cli/FalconCLIRuntimeException.java b/cli/src/main/java/org/apache/falcon/cli/FalconCLIRuntimeException.java
deleted file mode 100644
index b7fa4cd..0000000
--- a/cli/src/main/java/org/apache/falcon/cli/FalconCLIRuntimeException.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.falcon.cli;
-
-/**
- * Runtime exception in CLI. Since most methods are invoked through reflection, checked exceptions
- * end up being thrown as UndeclaredThrowableException. Instead of that, let's throw our own RuntimeException.
- */
-public class FalconCLIRuntimeException extends RuntimeException {
-    public FalconCLIRuntimeException(Throwable e) {
-        super(e);
-    }
-
-    public FalconCLIRuntimeException(String message) {
-        super(message);
-    }
-
-    public FalconCLIRuntimeException(String message, Throwable cause) {
-        super(message, cause);
-    }
-}

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/cli/src/main/java/org/apache/falcon/cli/FalconEntityCLI.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/falcon/cli/FalconEntityCLI.java b/cli/src/main/java/org/apache/falcon/cli/FalconEntityCLI.java
index 11aa2b4..facb147 100644
--- a/cli/src/main/java/org/apache/falcon/cli/FalconEntityCLI.java
+++ b/cli/src/main/java/org/apache/falcon/cli/FalconEntityCLI.java
@@ -43,16 +43,65 @@ import java.util.Set;
  */
 public class FalconEntityCLI extends FalconCLI {
 
-    private static final String DEFINITION_OPT = "definition";
-    public static final String SLA_MISS_ALERT_OPT = "slaAlert";
+    public static final String SUBMIT_OPT_DESCRIPTION = "Submits an entity xml to Falcon";
+    public static final String UPDATE_OPT_DESCRIPTION = "Updates an existing entity";
+    public static final String DELETE_OPT_DESCRIPTION = "Deletes an entity in Falcon, and kills its instance from "
+            + "workflow engine";
+    public static final String SUBMIT_AND_SCHEDULE_OPT = "submitAndSchedule";
+    public static final String SUBMIT_AND_SCHEDULE_OPT_DESCRIPTION = "Submits an entity to Falcon and "
+            + "schedules it immediately";
+    public static final String VALIDATE_OPT = "validate";
+    public static final String VALIDATE_OPT_DESCRIPTION = "Validates an entity based on the entity type";
+    public static final String DEFINITION_OPT_DESCRIPTION = "Gets the Definition of entity";
+    public static final String SLA_MISS_ALERT_OPT_DESCRIPTION = "Get missing feed instances which missed SLA";
 
-    private static final String LOOKUP_OPT = "lookup";
-    private static final String PATH_OPT = "path";
-    private static final String TOUCH_OPT = "touch";
-    private static final String PROPS_OPT = "properties";
-    private static final String TAGS_OPT = "tags";
-    private static final String NUM_INSTANCES_OPT = "numInstances";
-    private static final String SHOWSCHEDULER_OPT = "showScheduler";
+
+    public static final String LOOKUP_OPT_DESCRIPTION = "Lookup a feed given its instance's path";
+    public static final String PATH_OPT = "path";
+    public static final String PATH_OPT_DESCRIPTION = "Path for a feed's instance";
+    public static final String TOUCH_OPT_DESCRIPTION = "Force update the entity in workflow engine"
+            + "(even without any changes to entity)";
+    public static final String PROPS_OPT = "properties";
+    public static final String PROPS_OPT_DESCRIPTION = "User supplied comma separated key value properties";
+    public static final String FIELDS_OPT = "fields";
+    public static final String FIELDS_OPT_DESCRIPTION = "Entity fields to show for a request";
+    public static final String TAGS_OPT = "tags";
+    public static final String TAGS_OPT_DESCRIPTION = "Filter returned entities by the specified tags";
+    public static final String NUM_INSTANCES_OPT = "numInstances";
+    public static final String NUM_INSTANCES_OPT_DESCRIPTION = "Number of instances to return per entity "
+            + "summary request";
+    public static final String NAMESEQ_OPT = "nameseq";
+    public static final String NAMESEQ_OPT_DESCRIPTION = "Subsequence of entity name";
+    public static final String TAGKEYS_OPT = "tagkeys";
+    public static final String TAGKEYS_OPT_DESCRIPTION = "Keywords in tags";
+    public static final String OFFSET_OPT_DESCRIPTION = "Start returning entities from this offset";
+    public static final String SHOWSCHEDULER_OPT = "showScheduler";
+    public static final String SHOWSCHEDULER_OPT_DESCRIPTION = "To return the scheduler "
+            + "on which the entity is scheduled.";
+    public static final String DEBUG_OPTION_DESCRIPTION = "Use debug mode to see debugging statements on stdout";
+    public static final String URL_OPTION_DESCRIPTION = "Falcon URL";
+    public static final String TYPE_OPT_DESCRIPTION = "Type of the entity. Valid entity types are: cluster, feed, "
+        + "process and datasource.";
+    public static final String COLO_OPT_DESCRIPTION = "Colo name";
+    public static final String END_OPT_DESCRIPTION = "End time is optional for summary";
+    public static final String CLUSTER_OPT_DESCRIPTION = "Cluster name";
+    public static final String ENTITY_NAME_OPT_DESCRIPTION = "Name of the entity, recommended but not mandatory "
+        + "to be unique.";
+    public static final String FILE_PATH_OPT_DESCRIPTION = "Path to entity xml file";
+    public static final String SCHEDULE_OPT_DESCRIPTION = "Schedules a submited entity in Falcon";
+    public static final String SUSPEND_OPT_DESCRIPTION = "Suspends a running entity in Falcon";
+    public static final String RESUME_OPT_DESCRIPTION = "Resumes a suspended entity in Falcon";
+    public static final String STATUS_OPT_DESCRIPTION = "Gets the status of entity";
+    public static final String SUMMARY_OPT_DESCRIPTION = "Get summary of instances for list of entities";
+    public static final String DEPENDENCY_OPT_DESCRIPTION = "Gets the dependencies of entity";
+    public static final String LIST_OPT_DESCRIPTION = "List entities registered for a type";
+    public static final String SKIPDRYRUN_OPT_DESCRIPTION = "skip dry run in workflow engine";
+    public static final String FILTER_BY_OPT_DESCRIPTION = "Filter returned entities by the specified status";
+    public static final String ORDER_BY_OPT_DESCRIPTION = "Order returned entities by this field";
+    public static final String SORT_ORDER_OPT_DESCRIPTION = "asc or desc order for results";
+    public static final String NUM_RESULTS_OPT_DESCRIPTION = "Number of results to return per request";
+    public static final String START_OPT_DESCRIPTION = "Start time is optional for summary";
+    public static final String DO_AS_OPT_DESCRIPTION = "doAs user";
 
     public FalconEntityCLI() throws Exception {
         super();
@@ -62,38 +111,26 @@ public class FalconEntityCLI extends FalconCLI {
 
         Options entityOptions = new Options();
 
-        Option submit = new Option(FalconCLIConstants.SUBMIT_OPT, false,
-                "Submits an entity xml to Falcon");
-        Option update = new Option(FalconCLIConstants.UPDATE_OPT, false,
-                "Updates an existing entity xml");
+        Option submit = new Option(FalconCLIConstants.SUBMIT_OPT, false, SUBMIT_OPT_DESCRIPTION);
+        Option update = new Option(FalconCLIConstants.UPDATE_OPT, false, UPDATE_OPT_DESCRIPTION);
+        Option schedule = new Option(FalconCLIConstants.SCHEDULE_OPT, false, SCHEDULE_OPT_DESCRIPTION);
+        Option suspend = new Option(FalconCLIConstants.SUSPEND_OPT, false, SUSPEND_OPT_DESCRIPTION);
+        Option resume = new Option(FalconCLIConstants.RESUME_OPT, false, RESUME_OPT_DESCRIPTION);
+        Option delete = new Option(FalconCLIConstants.DELETE_OPT, false, DELETE_OPT_DESCRIPTION);
+        Option submitAndSchedule = new Option(FalconCLIConstants.SUBMIT_AND_SCHEDULE_OPT, false,
+                SUBMIT_AND_SCHEDULE_OPT_DESCRIPTION);
+        Option validate = new Option(FalconCLIConstants.VALIDATE_OPT, false, VALIDATE_OPT_DESCRIPTION);
+        Option status = new Option(FalconCLIConstants.STATUS_OPT, false, STATUS_OPT_DESCRIPTION);
+        Option definition = new Option(FalconCLIConstants.DEFINITION_OPT, false, DEFINITION_OPT_DESCRIPTION);
+        Option dependency = new Option(FalconCLIConstants.DEPENDENCY_OPT, false, DEPENDENCY_OPT_DESCRIPTION);
+        Option list = new Option(FalconCLIConstants.LIST_OPT, false, LIST_OPT_DESCRIPTION);
+        Option lookup = new Option(FalconCLIConstants.LOOKUP_OPT, false, LOOKUP_OPT_DESCRIPTION);
+        Option slaAlert = new Option(FalconCLIConstants.SLA_MISS_ALERT_OPT, false, SLA_MISS_ALERT_OPT_DESCRIPTION);
+        Option entitySummary = new Option(FalconCLIConstants.SUMMARY_OPT, false, SUMMARY_OPT_DESCRIPTION);
+        Option touch = new Option(FalconCLIConstants.TOUCH_OPT, false, TOUCH_OPT_DESCRIPTION);
+
         Option updateClusterDependents = new Option(FalconCLIConstants.UPDATE_CLUSTER_DEPENDENTS_OPT, false,
                 "Updates dependent entities of a cluster in workflow engine");
-        Option schedule = new Option(FalconCLIConstants.SCHEDULE_OPT, false,
-                "Schedules a submited entity in Falcon");
-        Option suspend = new Option(FalconCLIConstants.SUSPEND_OPT, false,
-                "Suspends a running entity in Falcon");
-        Option resume = new Option(FalconCLIConstants.RESUME_OPT, false,
-                "Resumes a suspended entity in Falcon");
-        Option delete = new Option(FalconCLIConstants.DELETE_OPT, false,
-                "Deletes an entity in Falcon, and kills its instance from workflow engine");
-        Option submitAndSchedule = new Option(FalconCLIConstants.SUBMIT_AND_SCHEDULE_OPT, false,
-                "Submits and entity to Falcon and schedules it immediately");
-        Option validate = new Option(FalconCLIConstants.VALIDATE_OPT, false,
-                "Validates an entity based on the entity type");
-        Option status = new Option(FalconCLIConstants.STATUS_OPT, false,
-                "Gets the status of entity");
-        Option definition = new Option(DEFINITION_OPT, false,
-                "Gets the Definition of entity");
-        Option dependency = new Option(FalconCLIConstants.DEPENDENCY_OPT, false,
-                "Gets the dependencies of entity");
-        Option list = new Option(FalconCLIConstants.LIST_OPT, false,
-                "List entities registered for a type");
-        Option lookup = new Option(LOOKUP_OPT, false, "Lookup a feed given its instance's path");
-        Option slaAlert = new Option(SLA_MISS_ALERT_OPT, false, "Get missing feed instances which missed SLA");
-        Option entitySummary = new Option(FalconCLIConstants.SUMMARY_OPT, false,
-                "Get summary of instances for list of entities");
-        Option touch = new Option(TOUCH_OPT, false,
-                "Force update the entity in workflow engine(even without any changes to entity)");
 
         OptionGroup group = new OptionGroup();
         group.addOption(submit);
@@ -114,41 +151,32 @@ public class FalconEntityCLI extends FalconCLI {
         group.addOption(entitySummary);
         group.addOption(touch);
 
-        Option url = new Option(FalconCLIConstants.URL_OPTION, true, "Falcon URL");
-        Option entityType = new Option(FalconCLIConstants.TYPE_OPT, true,
-                "Entity type, can be cluster, feed or process xml");
-        Option filePath = new Option(FalconCLIConstants.FILE_PATH_OPT, true,
-                "Path to entity xml file");
-        Option entityName = new Option(FalconCLIConstants.ENTITY_NAME_OPT, true,
-                "Entity type, can be cluster, feed or process xml");
-        Option start = new Option(FalconCLIConstants.START_OPT, true, "Start time is optional for summary");
-        Option end = new Option(FalconCLIConstants.END_OPT, true, "End time is optional for summary");
-        Option colo = new Option(FalconCLIConstants.COLO_OPT, true, "Colo name");
-        Option cluster = new Option(FalconCLIConstants.CLUSTER_OPT, true, "Cluster name");
+        Option url = new Option(URL_OPTION, true, URL_OPTION_DESCRIPTION);
+        Option entityType = new Option(TYPE_OPT, true, TYPE_OPT_DESCRIPTION);
+        Option filePath = new Option(FILE_PATH_OPT, true, FILE_PATH_OPT_DESCRIPTION);
+        Option entityName = new Option(ENTITY_NAME_OPT, true, ENTITY_NAME_OPT_DESCRIPTION);
+        Option start = new Option(START_OPT, true, START_OPT_DESCRIPTION);
+        Option end = new Option(END_OPT, true, END_OPT_DESCRIPTION);
+        Option colo = new Option(COLO_OPT, true, COLO_OPT_DESCRIPTION);
+        Option cluster = new Option(CLUSTER_OPT, true, CLUSTER_OPT_DESCRIPTION);
         colo.setRequired(false);
-        Option fields = new Option(FalconCLIConstants.FIELDS_OPT, true, "Entity fields to show for a request");
-        Option filterBy = new Option(FalconCLIConstants.FILTER_BY_OPT, true,
-                "Filter returned entities by the specified status");
-        Option filterTags = new Option(TAGS_OPT, true, "Filter returned entities by the specified tags");
-        Option nameSubsequence = new Option(FalconCLIConstants.NAMESEQ_OPT, true, "Subsequence of entity name");
-        Option tagKeywords = new Option(FalconCLIConstants.TAGKEYS_OPT, true, "Keywords in tags");
-        Option orderBy = new Option(FalconCLIConstants.ORDER_BY_OPT, true,
-                "Order returned entities by this field");
-        Option sortOrder = new Option(FalconCLIConstants.SORT_ORDER_OPT, true, "asc or desc order for results");
-        Option offset = new Option(FalconCLIConstants.OFFSET_OPT, true,
-                "Start returning entities from this offset");
-        Option numResults = new Option(FalconCLIConstants.NUM_RESULTS_OPT, true,
-                "Number of results to return per request");
-        Option numInstances = new Option(NUM_INSTANCES_OPT, true,
-                "Number of instances to return per entity summary request");
-        Option path = new Option(PATH_OPT, true, "Path for a feed's instance");
-        Option skipDryRun = new Option(FalconCLIConstants.SKIPDRYRUN_OPT, false, "skip dry run in workflow engine");
-        Option doAs = new Option(FalconCLIConstants.DO_AS_OPT, true, "doAs user");
-        Option userProps = new Option(PROPS_OPT, true, "User supplied comma separated key value properties");
-        Option showScheduler = new Option(SHOWSCHEDULER_OPT, false, "To return the scheduler "
-                + "on which the entity is scheduled.");
-        Option debug = new Option(FalconCLIConstants.DEBUG_OPTION, false,
-                "Use debug mode to see debugging statements on stdout");
+
+        Option fields = new Option(FIELDS_OPT, true, FIELDS_OPT_DESCRIPTION);
+        Option filterBy = new Option(FILTER_BY_OPT, true, FILTER_BY_OPT_DESCRIPTION);
+        Option filterTags = new Option(TAGS_OPT, true, TAGS_OPT_DESCRIPTION);
+        Option nameSubsequence = new Option(NAMESEQ_OPT, true, NAMESEQ_OPT_DESCRIPTION);
+        Option tagKeywords = new Option(TAGKEYS_OPT, true, TAGKEYS_OPT_DESCRIPTION);
+        Option orderBy = new Option(ORDER_BY_OPT, true, ORDER_BY_OPT_DESCRIPTION);
+        Option sortOrder = new Option(SORT_ORDER_OPT, true, SORT_ORDER_OPT_DESCRIPTION);
+        Option offset = new Option(OFFSET_OPT, true, OFFSET_OPT_DESCRIPTION);
+        Option numResults = new Option(NUM_RESULTS_OPT, true, NUM_RESULTS_OPT_DESCRIPTION);
+        Option numInstances = new Option(NUM_INSTANCES_OPT, true, NUM_INSTANCES_OPT_DESCRIPTION);
+        Option path = new Option(PATH_OPT, true, PATH_OPT_DESCRIPTION);
+        Option skipDryRun = new Option(SKIPDRYRUN_OPT, false, SKIPDRYRUN_OPT_DESCRIPTION);
+        Option doAs = new Option(DO_AS_OPT, true, DO_AS_OPT_DESCRIPTION);
+        Option userProps = new Option(PROPS_OPT, true, PROPS_OPT_DESCRIPTION);
+        Option showScheduler = new Option(SHOWSCHEDULER_OPT, false, SHOWSCHEDULER_OPT_DESCRIPTION);
+        Option debug = new Option(DEBUG_OPTION, false, DEBUG_OPTION_DESCRIPTION);
 
         entityOptions.addOption(url);
         entityOptions.addOption(path);
@@ -179,12 +207,11 @@ public class FalconEntityCLI extends FalconCLI {
         return entityOptions;
     }
 
-    public void entityCommand(CommandLine commandLine, FalconClient client) throws FalconCLIException, IOException {
+    public void entityCommand(CommandLine commandLine, FalconClient client) throws IOException {
         Set<String> optionsList = new HashSet<String>();
         for (Option option : commandLine.getOptions()) {
             optionsList.add(option.getOpt());
         }
-
         String result = null;
         String entityType = commandLine.getOptionValue(FalconCLIConstants.TYPE_OPT);
         String entityName = commandLine.getOptionValue(FalconCLIConstants.ENTITY_NAME_OPT);
@@ -206,19 +233,16 @@ public class FalconEntityCLI extends FalconCLI {
         Integer numResults = parseIntegerInput(commandLine.getOptionValue(FalconCLIConstants.NUM_RESULTS_OPT),
                 null, "numResults");
         String doAsUser = commandLine.getOptionValue(FalconCLIConstants.DO_AS_OPT);
-
         Integer numInstances = parseIntegerInput(commandLine.getOptionValue(NUM_INSTANCES_OPT), 7, "numInstances");
         Boolean skipDryRun = null;
         if (optionsList.contains(FalconCLIConstants.SKIPDRYRUN_OPT)) {
             skipDryRun = true;
         }
-
         String userProps = commandLine.getOptionValue(PROPS_OPT);
         boolean showScheduler = false;
         if (optionsList.contains(SHOWSCHEDULER_OPT)) {
             showScheduler = true;
         }
-
         EntityType entityTypeEnum = null;
         if (optionsList.contains(FalconCLIConstants.LIST_OPT)
                 || optionsList.contains(FalconCLIConstants.UPDATE_CLUSTER_DEPENDENTS_OPT)) {
@@ -238,7 +262,7 @@ public class FalconEntityCLI extends FalconCLI {
         validateSortOrder(sortOrder);
         String entityAction = "entity";
 
-        if (optionsList.contains(SLA_MISS_ALERT_OPT)) {
+        if (optionsList.contains(FalconCLIConstants.SLA_MISS_ALERT_OPT)) {
             validateNotEmpty(entityType, FalconCLIConstants.TYPE_OPT);
             validateNotEmpty(start, FalconCLIConstants.START_OPT);
             parseDateString(start);
@@ -247,10 +271,10 @@ public class FalconEntityCLI extends FalconCLI {
                     entityName, start, end, colo);
             result = ResponseHelper.getString(response);
         } else if (optionsList.contains(FalconCLIConstants.SUBMIT_OPT)) {
-            validateNotEmpty(filePath, "file");
+            validateNotEmpty(filePath, FILE_PATH_OPT);
             validateColo(optionsList);
             result = client.submit(entityType, filePath, doAsUser).getMessage();
-        } else if (optionsList.contains(LOOKUP_OPT)) {
+        } else if (optionsList.contains(FalconCLIConstants.LOOKUP_OPT)) {
             validateNotEmpty(feedInstancePath, PATH_OPT);
             FeedLookupResult resp = client.reverseLookUp(entityType, feedInstancePath, doAsUser);
             result = ResponseHelper.getString(resp);
@@ -259,17 +283,21 @@ public class FalconEntityCLI extends FalconCLI {
             validateColo(optionsList);
             validateNotEmpty(entityName, FalconCLIConstants.ENTITY_NAME_OPT);
             result = client.update(entityType, entityName, filePath, skipDryRun, doAsUser).getMessage();
+        } else if (optionsList.contains(SUBMIT_AND_SCHEDULE_OPT)) {
+            validateNotEmpty(filePath, FILE_PATH_OPT);
+            validateColo(optionsList);
+            result = client.submitAndSchedule(entityType, filePath, skipDryRun, doAsUser, userProps).getMessage();
         }  else if (optionsList.contains(FalconCLIConstants.UPDATE_CLUSTER_DEPENDENTS_OPT)) {
             validateNotEmpty(cluster, FalconCLIConstants.CLUSTER_OPT);
             result = client.updateClusterDependents(cluster, skipDryRun, doAsUser).getMessage();
+        } else if (optionsList.contains(VALIDATE_OPT)) {
+            validateNotEmpty(filePath, FILE_PATH_OPT);
+            validateColo(optionsList);
+            result = client.validate(entityType, filePath, skipDryRun, doAsUser).getMessage();
         } else if (optionsList.contains(FalconCLIConstants.SUBMIT_AND_SCHEDULE_OPT)) {
             validateNotEmpty(filePath, "file");
             validateColo(optionsList);
             result = client.submitAndSchedule(entityType, filePath, skipDryRun, doAsUser, userProps).getMessage();
-        } else if (optionsList.contains(FalconCLIConstants.VALIDATE_OPT)) {
-            validateNotEmpty(filePath, "file");
-            validateColo(optionsList);
-            result = client.validate(entityType, filePath, skipDryRun, doAsUser).getMessage();
         } else if (optionsList.contains(FalconCLIConstants.SCHEDULE_OPT)) {
             validateNotEmpty(entityName, FalconCLIConstants.ENTITY_NAME_OPT);
             colo = getColo(colo);
@@ -290,7 +318,7 @@ public class FalconEntityCLI extends FalconCLI {
             validateNotEmpty(entityName, FalconCLIConstants.ENTITY_NAME_OPT);
             colo = getColo(colo);
             result = client.getStatus(entityTypeEnum, entityName, colo, doAsUser, showScheduler).getMessage();
-        } else if (optionsList.contains(DEFINITION_OPT)) {
+        } else if (optionsList.contains(FalconCLIConstants.DEFINITION_OPT)) {
             validateColo(optionsList);
             validateNotEmpty(entityName, FalconCLIConstants.ENTITY_NAME_OPT);
             result = client.getDefinition(entityType, entityName, doAsUser).toString();
@@ -315,7 +343,7 @@ public class FalconEntityCLI extends FalconCLI {
             result = ResponseHelper.getString(client.getEntitySummary(
                     entityType, cluster, start, end, fields, filterBy, filterTags,
                     orderBy, sortOrder, offset, numResults, numInstances, doAsUser));
-        } else if (optionsList.contains(TOUCH_OPT)) {
+        } else if (optionsList.contains(FalconCLIConstants.TOUCH_OPT)) {
             validateNotEmpty(entityName, FalconCLIConstants.ENTITY_NAME_OPT);
             colo = getColo(colo);
             result = client.touch(entityType, entityName, colo, skipDryRun, doAsUser).getMessage();
@@ -329,13 +357,13 @@ public class FalconEntityCLI extends FalconCLI {
         OUT.get().println(result);
     }
 
-    private void validateColo(Set<String> optionsList) throws FalconCLIException {
+    private void validateColo(Set<String> optionsList) {
         if (optionsList.contains(FalconCLIConstants.COLO_OPT)) {
             throw new FalconCLIException("Invalid argument : " + FalconCLIConstants.COLO_OPT);
         }
     }
 
-    private void validateEntityFields(String fields) throws FalconCLIException {
+    public static void validateEntityFields(String fields) {
         if (StringUtils.isEmpty(fields)) {
             return;
         }
@@ -349,7 +377,7 @@ public class FalconEntityCLI extends FalconCLI {
         }
     }
 
-    private Date parseDateString(String time) throws FalconCLIException {
+    private Date parseDateString(String time) {
         if (time != null && !time.isEmpty()) {
             try {
                 return SchemaHelper.parseDateUTC(time);

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/cli/src/main/java/org/apache/falcon/cli/FalconExtensionCLI.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/falcon/cli/FalconExtensionCLI.java b/cli/src/main/java/org/apache/falcon/cli/FalconExtensionCLI.java
index 393603e..a8a30ab 100644
--- a/cli/src/main/java/org/apache/falcon/cli/FalconExtensionCLI.java
+++ b/cli/src/main/java/org/apache/falcon/cli/FalconExtensionCLI.java
@@ -57,7 +57,7 @@ public class FalconExtensionCLI {
     public FalconExtensionCLI() {
     }
 
-    public void extensionCommand(CommandLine commandLine, FalconClient client) throws FalconCLIException {
+    public void extensionCommand(CommandLine commandLine, FalconClient client) {
         Set<String> optionsList = new HashSet<>();
         for (Option option : commandLine.getOptions()) {
             optionsList.add(option.getOpt());
@@ -207,8 +207,7 @@ public class FalconExtensionCLI {
         return extensionOptions;
     }
 
-    private void validateRequiredParameter(final String parameter, final String parameterName)
-        throws FalconCLIException {
+    private void validateRequiredParameter(final String parameter, final String parameterName) {
         if (StringUtils.isBlank(parameter)) {
             throw new FalconCLIException("The parameter " + parameterName + " cannot be null or empty");
         }

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/cli/src/main/java/org/apache/falcon/cli/FalconInstanceCLI.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/falcon/cli/FalconInstanceCLI.java b/cli/src/main/java/org/apache/falcon/cli/FalconInstanceCLI.java
index 3b5d7ca..f882eb5 100644
--- a/cli/src/main/java/org/apache/falcon/cli/FalconInstanceCLI.java
+++ b/cli/src/main/java/org/apache/falcon/cli/FalconInstanceCLI.java
@@ -190,7 +190,7 @@ public class FalconInstanceCLI extends FalconCLI {
         return instanceOptions;
     }
 
-    public void instanceCommand(CommandLine commandLine, FalconClient client) throws FalconCLIException, IOException {
+    public void instanceCommand(CommandLine commandLine, FalconClient client) throws IOException {
         Set<String> optionsList = new HashSet<String>();
         for (Option option : commandLine.getOptions()) {
             optionsList.add(option.getOpt());
@@ -307,7 +307,7 @@ public class FalconInstanceCLI extends FalconCLI {
 
     private void validateInstanceCommands(Set<String> optionsList,
                                           String entity, String type,
-                                          String colo) throws FalconCLIException {
+                                          String colo) {
 
         validateNotEmpty(entity, FalconCLIConstants.ENTITY_NAME_OPT);
         validateNotEmpty(type, FalconCLIConstants.TYPE_OPT);
@@ -338,7 +338,7 @@ public class FalconInstanceCLI extends FalconCLI {
         }
     }
 
-    private List<LifeCycle> getLifeCycle(String lifeCycleValue) throws FalconCLIException {
+    private List<LifeCycle> getLifeCycle(String lifeCycleValue) {
 
         if (lifeCycleValue != null) {
             String[] lifeCycleValues = lifeCycleValue.split(",");

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/cli/src/main/java/org/apache/falcon/cli/FalconMetadataCLI.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/falcon/cli/FalconMetadataCLI.java b/cli/src/main/java/org/apache/falcon/cli/FalconMetadataCLI.java
index d8cd124..98a29ef 100644
--- a/cli/src/main/java/org/apache/falcon/cli/FalconMetadataCLI.java
+++ b/cli/src/main/java/org/apache/falcon/cli/FalconMetadataCLI.java
@@ -127,7 +127,7 @@ public class FalconMetadataCLI extends FalconCLI {
         return metadataOptions;
     }
 
-    public void metadataCommand(CommandLine commandLine, FalconClient client) throws FalconCLIException {
+    public void metadataCommand(CommandLine commandLine, FalconClient client) {
         Set<String> optionsList = new HashSet<String>();
         for (Option option : commandLine.getOptions()) {
             optionsList.add(option.getOpt());
@@ -196,13 +196,13 @@ public class FalconMetadataCLI extends FalconCLI {
         OUT.get().println(result);
     }
 
-    private void validatePipelineName(String pipeline) throws FalconCLIException {
+    private void validatePipelineName(String pipeline) {
         if (StringUtils.isEmpty(pipeline)) {
             throw new FalconCLIException("Invalid value for pipeline");
         }
     }
 
-    private void validateDimensionType(String dimensionType) throws FalconCLIException {
+    private void validateDimensionType(String dimensionType) {
         if (StringUtils.isEmpty(dimensionType)
                 ||  dimensionType.contains("INSTANCE")) {
             throw new FalconCLIException("Invalid value provided for queryParam \"type\" " + dimensionType);
@@ -214,13 +214,13 @@ public class FalconMetadataCLI extends FalconCLI {
         }
     }
 
-    private void validateDimensionName(String dimensionName, String action) throws FalconCLIException {
+    private void validateDimensionName(String dimensionName, String action) {
         if (StringUtils.isEmpty(dimensionName)) {
             throw new FalconCLIException("Dimension ID cannot be empty or null for action " + action);
         }
     }
 
-    private void validateScheduleEntity(String schedEntityType, String schedEntityName) throws FalconCLIException {
+    private void validateScheduleEntity(String schedEntityType, String schedEntityName) {
         if (StringUtils.isBlank(schedEntityType)) {
             throw new FalconCLIException("Entity must be schedulable type : -feed/process");
         }
@@ -230,13 +230,13 @@ public class FalconMetadataCLI extends FalconCLI {
         }
     }
 
-    private void validateId(String id) throws FalconCLIException {
+    private void validateId(String id) {
         if (id == null || id.length() == 0) {
             throw new FalconCLIException("Missing argument: id");
         }
     }
 
-    private void validateVerticesCommand(String key, String value) throws FalconCLIException {
+    private void validateVerticesCommand(String key, String value) {
         if (key == null || key.length() == 0) {
             throw new FalconCLIException("Missing argument: key");
         }
@@ -246,7 +246,7 @@ public class FalconMetadataCLI extends FalconCLI {
         }
     }
 
-    private void validateVertexEdgesCommand(String id, String direction) throws FalconCLIException {
+    private void validateVertexEdgesCommand(String id, String direction) {
         if (id == null || id.length() == 0) {
             throw new FalconCLIException("Missing argument: id");
         }

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/cli/src/main/java/org/apache/falcon/cli/commands/BaseFalconCommands.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/falcon/cli/commands/BaseFalconCommands.java b/cli/src/main/java/org/apache/falcon/cli/commands/BaseFalconCommands.java
index dbd28fb..acff70e 100644
--- a/cli/src/main/java/org/apache/falcon/cli/commands/BaseFalconCommands.java
+++ b/cli/src/main/java/org/apache/falcon/cli/commands/BaseFalconCommands.java
@@ -20,7 +20,7 @@ package org.apache.falcon.cli.commands;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.falcon.cli.FalconCLIRuntimeException;
+import org.apache.falcon.client.AbstractFalconClient;
 import org.apache.falcon.client.FalconCLIException;
 import org.apache.falcon.client.FalconClient;
 import org.springframework.shell.core.ExecutionProcessor;
@@ -30,18 +30,21 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.Properties;
 
+import static org.apache.falcon.cli.FalconCLI.CURRENT_COLO;
+import static org.apache.falcon.cli.FalconCLI.FALCON_URL;
+
 /**
  * Common code for all falcon command classes.
  */
 public class BaseFalconCommands implements ExecutionProcessor {
-    private static final String FALCON_URL = "FALCON_URL";
     private static final String FALCON_URL_PROPERTY = "falcon.url";
     private static final String DO_AS = "DO_AS";
     private static final String DO_AS_PROPERTY = "do.as";
     private static final String CLIENT_PROPERTIES = "/client.properties";
+    protected static final String FALCON_URL_ABSENT = "Failed to get falcon url from environment or client properties";
     private static Properties clientProperties;
     private static Properties backupProperties = new Properties();
-    private static FalconClient client;
+    private static AbstractFalconClient client;
 
     protected static Properties getClientProperties() {
         if (clientProperties == null) {
@@ -54,7 +57,7 @@ public class BaseFalconCommands implements ExecutionProcessor {
                     try {
                         prop.load(inputStream);
                     } catch (IOException e) {
-                        throw new FalconCLIRuntimeException(e);
+                        throw new FalconCLIException(e);
                     }
                 }
             } finally {
@@ -65,7 +68,7 @@ public class BaseFalconCommands implements ExecutionProcessor {
                 prop.setProperty(FALCON_URL_PROPERTY, urlOverride);
             }
             if (prop.getProperty(FALCON_URL_PROPERTY) == null) {
-                throw new FalconCLIRuntimeException("Failed to get falcon url from environment or client properties");
+                throw new FalconCLIException(FALCON_URL_ABSENT);
             }
             String doAsOverride = System.getenv(DO_AS);
             if (doAsOverride != null) {
@@ -81,7 +84,7 @@ public class BaseFalconCommands implements ExecutionProcessor {
         Properties props;
         try {
             props = getClientProperties();
-        } catch (FalconCLIRuntimeException e) {
+        } catch (FalconCLIException e) {
             props = backupProperties;
         }
         if (StringUtils.isBlank(value)) {
@@ -93,18 +96,29 @@ public class BaseFalconCommands implements ExecutionProcessor {
         client = null;
     }
 
-    public static FalconClient getFalconClient() {
+    public static AbstractFalconClient getFalconClient() {
         if (client == null) {
-            try {
-                client = new FalconClient(getClientProperties().getProperty(FALCON_URL_PROPERTY),
-                        getClientProperties());
-            } catch (FalconCLIException e) {
-                throw new FalconCLIRuntimeException(e.getMessage(), e.getCause());
-            }
+            client = new FalconClient(getClientProperties().getProperty(FALCON_URL_PROPERTY), getClientProperties());
         }
         return client;
     }
 
+    public static void setFalconClient(AbstractFalconClient abstractFalconClient) {
+        client = abstractFalconClient;
+    }
+
+    protected String getColo(String colo) {
+        if (colo == null) {
+            Properties prop = getClientProperties();
+            colo = prop.getProperty(CURRENT_COLO, "*");
+        }
+        return colo;
+    }
+
+    protected String getDoAs() {
+        return getClientProperties().getProperty(DO_AS_PROPERTY);
+    }
+
     @Override
     public ParseResult beforeInvocation(ParseResult parseResult) {
         Object[] args = parseResult.getArguments();

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/cli/src/main/java/org/apache/falcon/cli/commands/FalconConnectionCommands.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/falcon/cli/commands/FalconConnectionCommands.java b/cli/src/main/java/org/apache/falcon/cli/commands/FalconConnectionCommands.java
index cabe5a8..c1e7e30 100644
--- a/cli/src/main/java/org/apache/falcon/cli/commands/FalconConnectionCommands.java
+++ b/cli/src/main/java/org/apache/falcon/cli/commands/FalconConnectionCommands.java
@@ -23,12 +23,14 @@ package org.apache.falcon.cli.commands;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
+import org.springframework.stereotype.Component;
 
 import javax.annotation.Nonnull;
 
 /**
  * Connection Commands.
  */
+@Component
 public class FalconConnectionCommands extends BaseFalconCommands {
 
     @CliCommand(value = "get", help = "get properties")

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/cli/src/main/java/org/apache/falcon/cli/commands/FalconEntityCommands.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/falcon/cli/commands/FalconEntityCommands.java b/cli/src/main/java/org/apache/falcon/cli/commands/FalconEntityCommands.java
index 6e091ef..427ba1c 100644
--- a/cli/src/main/java/org/apache/falcon/cli/commands/FalconEntityCommands.java
+++ b/cli/src/main/java/org/apache/falcon/cli/commands/FalconEntityCommands.java
@@ -18,9 +18,309 @@
 
 package org.apache.falcon.cli.commands;
 
+import org.apache.falcon.ResponseHelper;
+import org.apache.falcon.entity.v0.EntityType;
+import org.apache.falcon.resource.EntityList;
+import org.apache.falcon.resource.FeedLookupResult;
+import org.apache.falcon.resource.SchedulableEntityInstanceResult;
+import org.springframework.shell.core.annotation.CliCommand;
+import org.springframework.shell.core.annotation.CliOption;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+
+import static org.apache.falcon.FalconCLIConstants.DEFINITION_OPT;
+import static org.apache.falcon.FalconCLIConstants .DELETE_OPT;
+import static org.apache.falcon.FalconCLIConstants .LOOKUP_OPT;
+import static org.apache.falcon.FalconCLIConstants.SLA_MISS_ALERT_OPT;
+import static org.apache.falcon.FalconCLIConstants.SUBMIT_OPT;
+import static org.apache.falcon.FalconCLIConstants.UPDATE_OPT;
+import static org.apache.falcon.cli.FalconCLI.validateEntityTypeForSummary;
+import static org.apache.falcon.cli.FalconCLI.validateFilterBy;
+import static org.apache.falcon.cli.FalconCLI.validateOrderBy;
+import static org.apache.falcon.cli.FalconEntityCLI.CLUSTER_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.CLUSTER_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.COLO_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.COLO_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.DEFINITION_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.DELETE_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.DEPENDENCY_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.DEPENDENCY_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.END_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.END_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.ENTITY_NAME_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.ENTITY_NAME_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.FIELDS_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.FIELDS_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.FILE_PATH_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.FILE_PATH_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.FILTER_BY_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.FILTER_BY_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.LIST_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.LIST_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.LOOKUP_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.NAMESEQ_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.NAMESEQ_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.NUM_INSTANCES_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.NUM_INSTANCES_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.NUM_RESULTS_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.NUM_RESULTS_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.OFFSET_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.OFFSET_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.ORDER_BY_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.ORDER_BY_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.PATH_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.PATH_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.PROPS_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.PROPS_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.RESUME_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.RESUME_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.SCHEDULE_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.SCHEDULE_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.SHOWSCHEDULER_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.SHOWSCHEDULER_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.SKIPDRYRUN_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.SKIPDRYRUN_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.SLA_MISS_ALERT_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.SORT_ORDER_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.SORT_ORDER_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.START_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.START_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.STATUS_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.STATUS_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.SUBMIT_AND_SCHEDULE_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.SUBMIT_AND_SCHEDULE_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.SUBMIT_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.SUMMARY_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.SUMMARY_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.SUSPEND_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.SUSPEND_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.TAGKEYS_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.TAGKEYS_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.TAGS_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.TAGS_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.TYPE_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.TYPE_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.UPDATE_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.VALIDATE_OPT;
+import static org.apache.falcon.cli.FalconEntityCLI.VALIDATE_OPT_DESCRIPTION;
+import static org.apache.falcon.cli.FalconEntityCLI.validateEntityFields;
+
 /**
  * Entity Commands.
  */
+@Component
 public class FalconEntityCommands extends BaseFalconCommands {
+    public static final String ENTITY_PREFIX = "entity";
+    public static final String ENTITY_COMMAND_PREFIX = ENTITY_PREFIX + " ";
+
+    @CliCommand(value = ENTITY_COMMAND_PREFIX + SLA_MISS_ALERT_OPT, help = SLA_MISS_ALERT_OPT_DESCRIPTION)
+    public String slaAlert(
+            @CliOption(key = {TYPE_OPT}, mandatory = true, help = TYPE_OPT_DESCRIPTION) final EntityType entityType,
+            @CliOption(key = {ENTITY_NAME_OPT}, mandatory = false, help = ENTITY_NAME_OPT_DESCRIPTION)
+            final String entityName,
+            @CliOption(key = {COLO_OPT}, mandatory = false, help = COLO_OPT_DESCRIPTION,
+                    unspecifiedDefaultValue = "*") final String colo,
+            @CliOption(key = {START_OPT}, mandatory = true, help = START_OPT_DESCRIPTION) final String start,
+            @CliOption(key = {END_OPT}, mandatory = false, help = END_OPT_DESCRIPTION) final String end
+    ) {
+        SchedulableEntityInstanceResult response = getFalconClient()
+                .getFeedSlaMissPendingAlerts(entityType.name().toLowerCase(), entityName, start, end, getColo(colo));
+        return ResponseHelper.getString(response);
+    }
+
+    @CliCommand(value = ENTITY_COMMAND_PREFIX + SUBMIT_OPT, help = SUBMIT_OPT_DESCRIPTION)
+    public String submit(
+            @CliOption(key = {TYPE_OPT}, mandatory = true, help = TYPE_OPT_DESCRIPTION) final EntityType entityType,
+            @CliOption(key = {FILE_PATH_OPT}, mandatory = true, help = FILE_PATH_OPT_DESCRIPTION) final File filePath
+    ) {
+
+        return getFalconClient().submit(entityType.name().toLowerCase(), filePath.getPath(), getDoAs()).getMessage();
+    }
+
+    @CliCommand(value = ENTITY_COMMAND_PREFIX + LOOKUP_OPT, help = LOOKUP_OPT_DESCRIPTION)
+    public String lookup(
+            @CliOption(key = {TYPE_OPT}, mandatory = true, help = TYPE_OPT_DESCRIPTION) final EntityType entityType,
+            @CliOption(key = {PATH_OPT}, mandatory = true, help = PATH_OPT_DESCRIPTION) final String feedInstancePath
+    ) {
+
+        FeedLookupResult resp = getFalconClient().reverseLookUp(entityType.name().toLowerCase(),
+                feedInstancePath, getDoAs());
+        return ResponseHelper.getString(resp);
+    }
+
+    @CliCommand(value = ENTITY_COMMAND_PREFIX + UPDATE_OPT, help = UPDATE_OPT_DESCRIPTION)
+    public String update(
+            @CliOption(key = {TYPE_OPT}, mandatory = true, help = TYPE_OPT_DESCRIPTION) final EntityType entityType,
+            @CliOption(key = {ENTITY_NAME_OPT}, mandatory = true, help = ENTITY_NAME_OPT_DESCRIPTION)
+            final String entityName,
+            @CliOption(key = {FILE_PATH_OPT}, mandatory = true, help = FILE_PATH_OPT_DESCRIPTION)
+            final File filePath,
+            @CliOption(key = {SKIPDRYRUN_OPT}, mandatory = false, help = SKIPDRYRUN_OPT_DESCRIPTION,
+                    unspecifiedDefaultValue = "false", specifiedDefaultValue = "true") boolean skipDryRun
+    ) {
+        return getFalconClient()
+                .update(entityType.name().toLowerCase(), entityName, filePath.getPath(), skipDryRun, getDoAs())
+                .getMessage();
+    }
+
+    @CliCommand(value = ENTITY_COMMAND_PREFIX + SUBMIT_AND_SCHEDULE_OPT, help = SUBMIT_AND_SCHEDULE_OPT_DESCRIPTION)
+    public String submitAndSchedule(
+            @CliOption(key = {TYPE_OPT}, mandatory = true, help = TYPE_OPT_DESCRIPTION) final EntityType entityType,
+            @CliOption(key = {FILE_PATH_OPT}, mandatory = true, help = FILE_PATH_OPT_DESCRIPTION) final File filePath,
+            @CliOption(key = {SKIPDRYRUN_OPT}, mandatory = false, help = SKIPDRYRUN_OPT_DESCRIPTION,
+                    unspecifiedDefaultValue = "false", specifiedDefaultValue = "true") boolean skipDryRun,
+            @CliOption(key = {PROPS_OPT}, mandatory = false, help = PROPS_OPT_DESCRIPTION) final String properties
+    ) {
+
+        return getFalconClient()
+                .submitAndSchedule(entityType.name().toLowerCase(), filePath.getPath(), skipDryRun, getDoAs(),
+                        properties)
+                .getMessage();
+    }
+
+    @CliCommand(value = ENTITY_COMMAND_PREFIX + VALIDATE_OPT, help = VALIDATE_OPT_DESCRIPTION)
+    public String validate(
+            @CliOption(key = {TYPE_OPT}, mandatory = true, help = TYPE_OPT_DESCRIPTION) final EntityType entityType,
+            @CliOption(key = {FILE_PATH_OPT}, mandatory = true, help = FILE_PATH_OPT_DESCRIPTION) final File filePath,
+            @CliOption(key = {SKIPDRYRUN_OPT}, mandatory = false, help = SKIPDRYRUN_OPT_DESCRIPTION,
+                    unspecifiedDefaultValue = "false", specifiedDefaultValue = "true") boolean skipDryRun
+    ) {
+
+        return getFalconClient()
+                .validate(entityType.name().toLowerCase(), filePath.getPath(), skipDryRun, getDoAs())
+                .getMessage();
+    }
+
+    @CliCommand(value = ENTITY_COMMAND_PREFIX + SCHEDULE_OPT, help = SCHEDULE_OPT_DESCRIPTION)
+    public String schedule(
+            @CliOption(key = {TYPE_OPT}, mandatory = true, help = TYPE_OPT_DESCRIPTION) final EntityType entityType,
+            @CliOption(key = {ENTITY_NAME_OPT}, mandatory = true, help = ENTITY_NAME_OPT_DESCRIPTION) String entityName,
+            @CliOption(key = {COLO_OPT}, mandatory = false, help = COLO_OPT_DESCRIPTION,
+                    unspecifiedDefaultValue = "*") final String colo,
+            @CliOption(key = {SKIPDRYRUN_OPT}, mandatory = false, help = SKIPDRYRUN_OPT_DESCRIPTION,
+                    unspecifiedDefaultValue = "false", specifiedDefaultValue = "true") boolean skipDryRun,
+            @CliOption(key = {PROPS_OPT}, mandatory = false, help = PROPS_OPT_DESCRIPTION) final String properties
+    ) {
+
+        return getFalconClient().schedule(entityType, entityName, colo, skipDryRun, getDoAs(), properties).getMessage();
+    }
+
+    @CliCommand(value = ENTITY_COMMAND_PREFIX + SUSPEND_OPT, help = SUSPEND_OPT_DESCRIPTION)
+    public String suspend(
+            @CliOption(key = {TYPE_OPT}, mandatory = true, help = TYPE_OPT_DESCRIPTION) final EntityType entityType,
+            @CliOption(key = {ENTITY_NAME_OPT}, mandatory = true, help = ENTITY_NAME_OPT_DESCRIPTION) String entityName,
+            @CliOption(key = {COLO_OPT}, mandatory = false, help = COLO_OPT_DESCRIPTION,
+                    unspecifiedDefaultValue = "*") final String colo
+    ) {
+
+        return getFalconClient().suspend(entityType, entityName, colo, getDoAs()).getMessage();
+    }
+
+    @CliCommand(value = ENTITY_COMMAND_PREFIX + RESUME_OPT, help = RESUME_OPT_DESCRIPTION)
+    public String resume(
+            @CliOption(key = {TYPE_OPT}, mandatory = true, help = TYPE_OPT_DESCRIPTION) final EntityType entityType,
+            @CliOption(key = {ENTITY_NAME_OPT}, mandatory = true, help = ENTITY_NAME_OPT_DESCRIPTION) String entityName,
+            @CliOption(key = {COLO_OPT}, mandatory = false, help = COLO_OPT_DESCRIPTION,
+                    unspecifiedDefaultValue = "*") final String colo
+    ) {
+
+        return getFalconClient().resume(entityType, entityName, colo, getDoAs()).getMessage();
+    }
+
+    @CliCommand(value = ENTITY_COMMAND_PREFIX + DELETE_OPT, help = DELETE_OPT_DESCRIPTION)
+    public String delete(
+            @CliOption(key = {TYPE_OPT}, mandatory = true, help = TYPE_OPT_DESCRIPTION) final EntityType entityType,
+            @CliOption(key = {ENTITY_NAME_OPT}, mandatory = true, help = ENTITY_NAME_OPT_DESCRIPTION) String entityName
+    ) {
+
+        return getFalconClient().delete(entityType, entityName, getDoAs()).getMessage();
+    }
+
+    @CliCommand(value = ENTITY_COMMAND_PREFIX + STATUS_OPT, help = STATUS_OPT_DESCRIPTION)
+    public String getStatus(
+            @CliOption(key = {TYPE_OPT}, mandatory = true, help = TYPE_OPT_DESCRIPTION) final EntityType entityType,
+            @CliOption(key = {ENTITY_NAME_OPT}, mandatory = true, help = ENTITY_NAME_OPT_DESCRIPTION) String entityName,
+            @CliOption(key = {COLO_OPT}, mandatory = false, help = COLO_OPT_DESCRIPTION,
+                    unspecifiedDefaultValue = "*") final String colo,
+            @CliOption(key = {SHOWSCHEDULER_OPT}, mandatory = true,
+                    help = SHOWSCHEDULER_OPT_DESCRIPTION) final boolean showScheduler
+    ) {
+
+        return getFalconClient().getStatus(entityType, entityName, colo, getDoAs(), showScheduler).getMessage();
+    }
+
+    @CliCommand(value = ENTITY_COMMAND_PREFIX + DEFINITION_OPT, help = DEFINITION_OPT_DESCRIPTION)
+    public String getDefinition(
+            @CliOption(key = {TYPE_OPT}, mandatory = true, help = TYPE_OPT_DESCRIPTION) final EntityType entityType,
+            @CliOption(key = {ENTITY_NAME_OPT}, mandatory = true, help = ENTITY_NAME_OPT_DESCRIPTION) String entityName
+    ) {
+
+        return getFalconClient().getDefinition(entityType.name().toLowerCase(), entityName, getDoAs()).toString();
+    }
+
+    @CliCommand(value = ENTITY_COMMAND_PREFIX + DEPENDENCY_OPT, help = DEPENDENCY_OPT_DESCRIPTION)
+    public String getDependency(
+            @CliOption(key = {TYPE_OPT}, mandatory = true, help = TYPE_OPT_DESCRIPTION) final EntityType entityType,
+            @CliOption(key = {ENTITY_NAME_OPT}, mandatory = true, help = ENTITY_NAME_OPT_DESCRIPTION) String entityName
+    ) {
+
+        return getFalconClient().getDependency(entityType.name().toLowerCase(), entityName, getDoAs()).toString();
+    }
+
+    // SUSPEND CHECKSTYLE CHECK ParameterNumberCheck
+    @CliCommand(value = ENTITY_COMMAND_PREFIX + LIST_OPT, help = LIST_OPT_DESCRIPTION)
+    public String list(
+            @CliOption(key = {TYPE_OPT}, mandatory = true, help = TYPE_OPT_DESCRIPTION) final EntityType entityType,
+            @CliOption(key = {FIELDS_OPT}, mandatory = false, help = FIELDS_OPT_DESCRIPTION) final String fields,
+            @CliOption(key = {ORDER_BY_OPT}, mandatory = false, help = ORDER_BY_OPT_DESCRIPTION) final String orderBy,
+            @CliOption(key = {SORT_ORDER_OPT}, mandatory = false,
+                    help = SORT_ORDER_OPT_DESCRIPTION) final String sortOrder,
+            @CliOption(key = {FILTER_BY_OPT}, mandatory = false,
+                    help = FILTER_BY_OPT_DESCRIPTION) final String filterBy,
+            @CliOption(key = {TAGS_OPT}, mandatory = false, help = TAGS_OPT_DESCRIPTION) final String filterTags,
+            @CliOption(key = {NAMESEQ_OPT}, mandatory = false,
+                    help = NAMESEQ_OPT_DESCRIPTION) final String nameSubsequence,
+            @CliOption(key = {TAGKEYS_OPT}, mandatory = false, help = TAGKEYS_OPT_DESCRIPTION) final String tagKeywords,
+            @CliOption(key = {OFFSET_OPT}, mandatory = false, help = OFFSET_OPT_DESCRIPTION) final Integer offset,
+            @CliOption(key = {NUM_RESULTS_OPT}, mandatory = false,
+                    help = NUM_RESULTS_OPT_DESCRIPTION) final Integer numResults
+
+    ) {
+        validateEntityFields(fields);
+        validateOrderBy(orderBy, ENTITY_PREFIX);
+        validateFilterBy(filterBy, ENTITY_PREFIX);
+        EntityList entityList = getFalconClient().getEntityList(entityType.name().toLowerCase(), fields,
+                nameSubsequence, tagKeywords, filterBy, filterTags, orderBy, sortOrder, offset, numResults, getDoAs());
+        return entityList != null ? entityList.toString() : "No entity of type (" + entityType + ") found.";
+    }
+
+    @CliCommand(value = ENTITY_COMMAND_PREFIX + SUMMARY_OPT, help = SUMMARY_OPT_DESCRIPTION)
+    public String summary(
+            @CliOption(key = {TYPE_OPT}, mandatory = true, help = TYPE_OPT_DESCRIPTION) final EntityType entityType,
+            @CliOption(key = {CLUSTER_OPT}, mandatory = true, help = CLUSTER_OPT_DESCRIPTION) final String cluster,
+            @CliOption(key = {START_OPT}, mandatory = false, help = START_OPT_DESCRIPTION) final String start,
+            @CliOption(key = {END_OPT}, mandatory = false, help = END_OPT_DESCRIPTION) final String end,
+            @CliOption(key = {FIELDS_OPT}, mandatory = false, help = FIELDS_OPT_DESCRIPTION) final String fields,
+            @CliOption(key = {ORDER_BY_OPT}, mandatory = false, help = ORDER_BY_OPT_DESCRIPTION) final String orderBy,
+            @CliOption(key = {SORT_ORDER_OPT}, mandatory = false,
+                    help = SORT_ORDER_OPT_DESCRIPTION) final String sortOrder,
+            @CliOption(key = {FILTER_BY_OPT}, mandatory = false, help = FILTER_BY_OPT_DESCRIPTION) final String filterBy,
+            @CliOption(key = {TAGS_OPT}, mandatory = false, help = TAGS_OPT_DESCRIPTION) final String filterTags,
+            @CliOption(key = {OFFSET_OPT}, mandatory = false, help = OFFSET_OPT_DESCRIPTION) final Integer offset,
+            @CliOption(key = {NUM_RESULTS_OPT}, mandatory = false,
+                    help = NUM_RESULTS_OPT_DESCRIPTION) final Integer numResults,
+            @CliOption(key = {NUM_INSTANCES_OPT}, mandatory = false,
+                    help = NUM_INSTANCES_OPT_DESCRIPTION) final Integer numInstances
 
+    ) {
+        validateEntityTypeForSummary(entityType.name().toLowerCase());
+        validateEntityFields(fields);
+        validateFilterBy(filterBy, ENTITY_PREFIX);
+        validateOrderBy(orderBy, ENTITY_PREFIX);
+        return ResponseHelper.getString(getFalconClient().getEntitySummary(
+                entityType.name().toLowerCase(), cluster, start, end, fields, filterBy, filterTags,
+                orderBy, sortOrder, offset, numResults, numInstances, getDoAs()));
+    }
+    // RESUME CHECKSTYLE CHECK ParameterNumberCheck
 }

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/cli/src/main/java/org/apache/falcon/cli/commands/FalconInstanceCommands.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/falcon/cli/commands/FalconInstanceCommands.java b/cli/src/main/java/org/apache/falcon/cli/commands/FalconInstanceCommands.java
index 8f3a2fc..5b62cf0 100644
--- a/cli/src/main/java/org/apache/falcon/cli/commands/FalconInstanceCommands.java
+++ b/cli/src/main/java/org/apache/falcon/cli/commands/FalconInstanceCommands.java
@@ -18,9 +18,12 @@
 
 package org.apache.falcon.cli.commands;
 
+import org.springframework.stereotype.Component;
+
 /**
  * Instance commands.
  */
+@Component
 public class FalconInstanceCommands extends BaseFalconCommands {
 
 }

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/cli/src/test/java/org/apache/falcon/cli/commands/FalconCLITest.java
----------------------------------------------------------------------
diff --git a/cli/src/test/java/org/apache/falcon/cli/commands/FalconCLITest.java b/cli/src/test/java/org/apache/falcon/cli/commands/FalconCLITest.java
new file mode 100644
index 0000000..81b6e45
--- /dev/null
+++ b/cli/src/test/java/org/apache/falcon/cli/commands/FalconCLITest.java
@@ -0,0 +1,67 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.falcon.cli.commands;
+
+import org.apache.falcon.client.FalconCLIException;
+import org.springframework.shell.Bootstrap;
+import org.springframework.shell.core.CommandResult;
+import org.springframework.shell.core.JLineShellComponent;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+
+/**
+ * Base class for falcon cli test cases.
+ */
+public class FalconCLITest {
+    protected static JLineShellComponent shell;
+
+    @BeforeClass
+    public static void startUp() throws InterruptedException {
+        Bootstrap bootstrap = new Bootstrap();
+        shell = bootstrap.getJLineShellComponent();
+    }
+
+
+    public <T> T execute(String command) throws Throwable {
+        CommandResult commandResult = shell.executeCommand(command);
+        if (commandResult.isSuccess()) {
+            return (T) commandResult.getResult();
+        }
+        if (commandResult.getException() != null) {
+            throw commandResult.getException();
+        }
+        throw new FalconCLIException("Result is not success and exception is null");
+    }
+
+    public <T> void execute(String command, T result) throws Throwable {
+        Assert.assertEquals(execute(command), result);
+    }
+
+    public <T> void execute(String command, T result, Throwable throwable) throws Throwable {
+        CommandResult commandResult = shell.executeCommand(command);
+        if (commandResult.isSuccess()) {
+            Assert.assertNull(throwable);
+            Assert.assertEquals(commandResult.getResult(), result);
+        } else {
+            Assert.assertNull(result);
+            Assert.assertEquals(commandResult.getException().getClass(), throwable.getClass());
+            Assert.assertEquals(commandResult.getException().getMessage(), throwable.getMessage());
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/cli/src/test/java/org/apache/falcon/cli/commands/FalconConnectionCommandsTest.java
----------------------------------------------------------------------
diff --git a/cli/src/test/java/org/apache/falcon/cli/commands/FalconConnectionCommandsTest.java b/cli/src/test/java/org/apache/falcon/cli/commands/FalconConnectionCommandsTest.java
new file mode 100644
index 0000000..d6ad6f9
--- /dev/null
+++ b/cli/src/test/java/org/apache/falcon/cli/commands/FalconConnectionCommandsTest.java
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.falcon.cli.commands;
+
+import org.apache.falcon.client.FalconCLIException;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+/**
+ * Tests for Connection commands.
+ */
+public class FalconConnectionCommandsTest extends FalconCLITest {
+    @DataProvider(name = "params-commands", parallel = false)
+    public Object[][] provideCommands() {
+        FalconCLIException e = new FalconCLIException(BaseFalconCommands.FALCON_URL_ABSENT);
+        return new Object[][]{
+            {"get", null, e},
+            {"set a=b", null, null},
+            {"get", null, e},
+            {"get a", null, e},
+            {"set falcon.url=DUMMY", null, null},
+            {"get", "{a=b, falcon.url=DUMMY}", null},
+            {"get a", "b", null},
+        };
+    }
+
+    @Test(dataProvider = "params-commands")
+    public void testGetAndSetParams(String command, Object result, Throwable throwable) throws Throwable {
+        execute(command, result, throwable);
+    }
+}

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/client/pom.xml
----------------------------------------------------------------------
diff --git a/client/pom.xml b/client/pom.xml
index 6f35ca0..1087675 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -150,6 +150,14 @@
                     </plugins>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.7</source>
+                    <target>1.7</target>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 </project>

http://git-wip-us.apache.org/repos/asf/falcon/blob/b2526d8f/client/src/main/java/org/apache/falcon/FalconCLIConstants.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/falcon/FalconCLIConstants.java b/client/src/main/java/org/apache/falcon/FalconCLIConstants.java
index 31ead63..bcf3fe6 100644
--- a/client/src/main/java/org/apache/falcon/FalconCLIConstants.java
+++ b/client/src/main/java/org/apache/falcon/FalconCLIConstants.java
@@ -28,7 +28,10 @@ public final class FalconCLIConstants {
     public static final String ENV_FALCON_DEBUG = "FALCON_DEBUG";
     public static final String DEBUG_OPTION = "debug";
     public static final String URL_OPTION = "url";
-
+    public static final String DEFINITION_OPT = "definition";
+    public static final String LOOKUP_OPT = "lookup";
+    public static final String SLA_MISS_ALERT_OPT = "slaAlert";
+    public static final String TOUCH_OPT = "touch";
     public static final String ADMIN_CMD = "admin";
     public static final String HELP_CMD = "help";
     public static final String METADATA_CMD = "metadata";
@@ -36,7 +39,6 @@ public final class FalconCLIConstants {
     public static final String INSTANCE_CMD = "instance";
     public static final String EXTENSION_CMD = "extension";
     public static final String SAFE_MODE_OPT = "setsafemode";
-
     public static final String TYPE_OPT = "type";
     public static final String COLO_OPT = "colo";
     public static final String CLUSTER_OPT = "cluster";