You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sqoop.apache.org by ja...@apache.org on 2013/07/28 02:43:23 UTC

git commit: SQOOP-1141: Sqoop2: Provide ability to enable/disable connections and jobs

Updated Branches:
  refs/heads/sqoop2 9f8ac6b6b -> 69ecc93d4


SQOOP-1141: Sqoop2: Provide ability to enable/disable connections and jobs

(Mengwei Ding via Jarek Jarcec Cecho)


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

Branch: refs/heads/sqoop2
Commit: 69ecc93d4a0870c83d548903c07cd80642c2ff61
Parents: 9f8ac6b
Author: Jarek Jarcec Cecho <ja...@apache.org>
Authored: Sat Jul 27 17:42:34 2013 -0700
Committer: Jarek Jarcec Cecho <ja...@apache.org>
Committed: Sat Jul 27 17:42:34 2013 -0700

----------------------------------------------------------------------
 .../org/apache/sqoop/client/SqoopClient.java    | 20 ++++++
 .../org/apache/sqoop/client/core/Constants.java | 24 ++++++++
 .../sqoop/client/request/ConnectionRequest.java | 11 ++++
 .../apache/sqoop/client/request/JobRequest.java | 11 ++++
 .../sqoop/client/request/SqoopRequests.java     |  8 +++
 .../sqoop/client/shell/DisableCommand.java      | 64 ++++++++++++++++++++
 .../client/shell/DisableConnectionFunction.java | 51 ++++++++++++++++
 .../sqoop/client/shell/DisableJobFunction.java  | 59 ++++++++++++++++++
 .../sqoop/client/shell/EnableCommand.java       | 64 ++++++++++++++++++++
 .../client/shell/EnableConnectionFunction.java  | 51 ++++++++++++++++
 .../sqoop/client/shell/EnableJobFunction.java   | 59 ++++++++++++++++++
 .../client/shell/ShowConnectionFunction.java    |  6 +-
 .../sqoop/client/shell/ShowJobFunction.java     |  6 +-
 .../apache/sqoop/client/shell/SqoopShell.java   |  2 +
 .../main/resources/client-resource.properties   | 17 +++++-
 .../org/apache/sqoop/json/ConnectionBean.java   |  2 +
 .../java/org/apache/sqoop/json/JobBean.java     |  2 +
 .../sqoop/json/util/FormSerialization.java      |  1 +
 .../apache/sqoop/model/MAccountableEntity.java  | 16 +++++
 .../apache/sqoop/json/TestConnectionBean.java   |  3 +
 .../java/org/apache/sqoop/json/TestJobBean.java |  2 +
 .../sqoop/model/TestMAccountableEntity.java     |  2 +
 .../apache/sqoop/framework/FrameworkError.java  |  4 ++
 .../org/apache/sqoop/framework/JobManager.java  | 12 ++++
 .../apache/sqoop/repository/JdbcRepository.java | 38 ++++++++++++
 .../sqoop/repository/JdbcRepositoryHandler.java | 17 ++++++
 .../org/apache/sqoop/repository/Repository.java | 16 +++++
 .../sqoop/repository/derby/DerbyRepoError.java  |  6 ++
 .../derby/DerbyRepositoryHandler.java           | 42 +++++++++++++
 .../repository/derby/DerbySchemaConstants.java  |  4 ++
 .../repository/derby/DerbySchemaQuery.java      | 54 ++++++++++++++---
 .../sqoop/repository/derby/DerbyTestCase.java   |  2 +
 .../derby/TestConnectionHandling.java           | 19 ++++++
 .../sqoop/repository/derby/TestJobHandling.java | 18 ++++++
 .../sqoop/handler/ConnectionRequestHandler.java | 30 ++++++++-
 .../apache/sqoop/handler/JobRequestHandler.java | 30 ++++++++-
 36 files changed, 755 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/client/src/main/java/org/apache/sqoop/client/SqoopClient.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/SqoopClient.java b/client/src/main/java/org/apache/sqoop/client/SqoopClient.java
index 4ca71a4..158e46c 100644
--- a/client/src/main/java/org/apache/sqoop/client/SqoopClient.java
+++ b/client/src/main/java/org/apache/sqoop/client/SqoopClient.java
@@ -280,6 +280,16 @@ public class SqoopClient {
   }
 
   /**
+   * Enable/disable connection with given id
+   *
+   * @param xid Connection id
+   * @param enabled Enable or disable
+   */
+  public void enableConnection(long xid, boolean enabled) {
+    requests.enableConnection(xid, enabled);
+  }
+
+  /**
    * Delete connection with given id.
    *
    * @param xid Connection id
@@ -346,6 +356,16 @@ public class SqoopClient {
   }
 
   /**
+   * Enable/disable job with given id
+   *
+   * @param jid Job that is going to be enabled/disabled
+   * @param enabled Enable or disable
+   */
+  public void enableJob(long jid, boolean enabled) {
+    requests.enableJob(jid, enabled);
+  }
+
+  /**
    * Delete job with given id.
    *
    * @param jid Job id

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/client/src/main/java/org/apache/sqoop/client/core/Constants.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/core/Constants.java b/client/src/main/java/org/apache/sqoop/client/core/Constants.java
index b7b0436..999790d 100644
--- a/client/src/main/java/org/apache/sqoop/client/core/Constants.java
+++ b/client/src/main/java/org/apache/sqoop/client/core/Constants.java
@@ -103,6 +103,12 @@ public class Constants {
   public static final String CMD_STATUS = "status";
   public static final String CMD_STATUS_SC = "\\stu";
 
+  public static final String CMD_ENABLE = "enable";
+  public static final String CMD_ENABLE_SC = "\\en";
+
+  public static final String CMD_DISABLE = "disable";
+  public static final String CMD_DISABLE_SC = "\\di";
+
   public static final String FN_CONNECTION = "connection";
   public static final String FN_JOB = "job";
   public static final String FN_SUBMISSION = "submission";
@@ -121,6 +127,8 @@ public class Constants {
   public static final String PRE_START = "Start";
   public static final String PRE_STATUS = "Status";
   public static final String PRE_STOP = "Stop";
+  public static final String PRE_ENABLE = "Enable";
+  public static final String PRE_DISABLE = "Disable";
   public static final String SUF_INFO = "Info";
 
 
@@ -188,6 +196,20 @@ public class Constants {
   public static final String RES_DELETE_USAGE =
       "delete.usage";
 
+  public static final String RES_DISABLE_USAGE =
+      "disable.usage";
+  public static final String RES_DISABLE_CONNECTION_SUCCESSFUL =
+      "disable.conn_successful";
+  public static final String RES_DISABLE_JOB_SUCCESSFUL =
+      "disable.job_successful";
+
+  public static final String RES_ENABLE_USAGE =
+      "enable.usage";
+  public static final String RES_ENABLE_CONNECTION_SUCCESSFUL =
+      "enable.conn_successful";
+  public static final String RES_ENABLE_JOB_SUCCESSFUL =
+      "enable.job_successful";
+
   public static final String RES_HELP_USAGE =
       "help.usage";
   public static final String RES_HELP_DESCRIPTION =
@@ -365,6 +387,8 @@ public class Constants {
       "table.header.status";
   public static final String RES_TABLE_HEADER_DATE =
       "table.header.date";
+  public static final String RES_TABLE_HEADER_ENABLED =
+      "table.header.enabled";
 
   public static final String RES_FORMDISPLAYER_SUPPORTED_JOBTYPE =
       "formdisplayer.supported_job_types";

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/client/src/main/java/org/apache/sqoop/client/request/ConnectionRequest.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/request/ConnectionRequest.java b/client/src/main/java/org/apache/sqoop/client/request/ConnectionRequest.java
index a69e009..f523abb 100644
--- a/client/src/main/java/org/apache/sqoop/client/request/ConnectionRequest.java
+++ b/client/src/main/java/org/apache/sqoop/client/request/ConnectionRequest.java
@@ -31,6 +31,9 @@ public class ConnectionRequest extends Request {
 
   public static final String RESOURCE = "v1/connection/";
 
+  private static final String ENABLE = "/enable";
+  private static final String DISABLE = "/disable";
+
   public ConnectionBean read(String serverUrl, Long xid) {
     String response;
     if (xid == null) {
@@ -82,4 +85,12 @@ public class ConnectionRequest extends Request {
   public void delete(String serverUrl, Long id) {
      super.delete(serverUrl + RESOURCE + id);
   }
+
+  public void enable(String serverUrl, Long id, Boolean enabled) {
+    if (enabled) {
+      super.put(serverUrl + RESOURCE + id + ENABLE, null);
+    } else {
+      super.put(serverUrl + RESOURCE + id + DISABLE, null);
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/client/src/main/java/org/apache/sqoop/client/request/JobRequest.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/request/JobRequest.java b/client/src/main/java/org/apache/sqoop/client/request/JobRequest.java
index 55ba9db..6dee2c8 100644
--- a/client/src/main/java/org/apache/sqoop/client/request/JobRequest.java
+++ b/client/src/main/java/org/apache/sqoop/client/request/JobRequest.java
@@ -31,6 +31,9 @@ public class JobRequest extends Request {
 
   public static final String RESOURCE = "v1/job/";
 
+  private static final String ENABLE = "/enable";
+  private static final String DISABLE = "/disable";
+
   public JobBean read(String serverUrl, Long xid) {
     String response;
     if (xid == null) {
@@ -81,4 +84,12 @@ public class JobRequest extends Request {
   public void delete(String serverUrl, Long id) {
      super.delete(serverUrl + RESOURCE + id);
   }
+
+  public void enable(String serverUrl, Long id, Boolean enabled) {
+    if (enabled) {
+      super.put(serverUrl + RESOURCE + id + ENABLE, null);
+    } else {
+      super.put(serverUrl + RESOURCE + id + DISABLE, null);
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/client/src/main/java/org/apache/sqoop/client/request/SqoopRequests.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/request/SqoopRequests.java b/client/src/main/java/org/apache/sqoop/client/request/SqoopRequests.java
index f102c8f..ffaa84f 100644
--- a/client/src/main/java/org/apache/sqoop/client/request/SqoopRequests.java
+++ b/client/src/main/java/org/apache/sqoop/client/request/SqoopRequests.java
@@ -106,6 +106,10 @@ public class SqoopRequests {
     return getConnectionRequest().update(serverUrl, connection);
   }
 
+  public void enableConnection(Long xid, Boolean enabled) {
+    getConnectionRequest().enable(serverUrl, xid, enabled);
+  }
+
   public void deleteConnection(Long xid) {
     getConnectionRequest().delete(serverUrl, xid);
   }
@@ -122,6 +126,10 @@ public class SqoopRequests {
     return getJobRequest().update(serverUrl, job);
   }
 
+  public void enableJob(Long jid, Boolean enabled) {
+    getJobRequest().enable(serverUrl, jid, enabled);
+  }
+
   public void deleteJob(Long jid) {
     getJobRequest().delete(serverUrl, jid);
   }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/client/src/main/java/org/apache/sqoop/client/shell/DisableCommand.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/shell/DisableCommand.java b/client/src/main/java/org/apache/sqoop/client/shell/DisableCommand.java
new file mode 100644
index 0000000..5cbd6db
--- /dev/null
+++ b/client/src/main/java/org/apache/sqoop/client/shell/DisableCommand.java
@@ -0,0 +1,64 @@
+/**
+ * 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.sqoop.client.shell;
+
+import org.apache.sqoop.client.core.Constants;
+import org.codehaus.groovy.tools.shell.Shell;
+import java.util.List;
+
+import static org.apache.sqoop.client.shell.ShellEnvironment.*;
+
+/**
+ *
+ */
+public class DisableCommand extends SqoopCommand {
+
+  private DisableConnectionFunction connectionFunction;
+  private DisableJobFunction jobFunction;
+
+  public DisableCommand(Shell shell) {
+    super(shell, Constants.CMD_DISABLE, Constants.CMD_DISABLE_SC,
+      new String[] {Constants.FN_CONNECTION, Constants.FN_JOB},
+      Constants.PRE_DISABLE, Constants.SUF_INFO);
+  }
+
+  @Override
+  @SuppressWarnings("unchecked")
+  public Object executeCommand(List args) {
+    if (args.size() == 0) {
+      printlnResource(Constants.RES_DISABLE_USAGE, getUsage());
+      return null;
+    }
+
+    String func = (String)args.get(0);
+    if (func.equals(Constants.FN_CONNECTION)) {
+      if (connectionFunction == null) {
+        connectionFunction = new DisableConnectionFunction();
+      }
+      return connectionFunction.execute(args);
+    } else if (func.equals(Constants.FN_JOB)) {
+      if (jobFunction == null) {
+        jobFunction = new DisableJobFunction();
+      }
+      return jobFunction.execute(args);
+    } else {
+      printlnResource(Constants.RES_FUNCTION_UNKNOWN, func);
+      return null;
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/client/src/main/java/org/apache/sqoop/client/shell/DisableConnectionFunction.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/shell/DisableConnectionFunction.java b/client/src/main/java/org/apache/sqoop/client/shell/DisableConnectionFunction.java
new file mode 100644
index 0000000..e04292a
--- /dev/null
+++ b/client/src/main/java/org/apache/sqoop/client/shell/DisableConnectionFunction.java
@@ -0,0 +1,51 @@
+/**
+ * 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.sqoop.client.shell;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.OptionBuilder;
+import org.apache.sqoop.client.core.Constants;
+import org.apache.sqoop.model.MConnection;
+import org.apache.sqoop.validation.Status;
+
+import static org.apache.sqoop.client.shell.ShellEnvironment.*;
+
+/**
+ * Handles enabling of a connection object
+ */
+public class DisableConnectionFunction extends SqoopFunction {
+  @SuppressWarnings("static-access")
+  public DisableConnectionFunction() {
+    this.addOption(OptionBuilder
+      .withDescription(resourceString(Constants.RES_PROMPT_CONN_ID))
+      .withLongOpt(Constants.OPT_XID)
+      .hasArg()
+      .create('x'));
+  }
+
+  public Object executeFunction(CommandLine line) {
+    if (!line.hasOption(Constants.OPT_XID)) {
+      printlnResource(Constants.RES_ARGS_XID_MISSING);
+      return null;
+    }
+
+    client.enableConnection(getLong(line, Constants.OPT_XID), false);
+
+    return null;
+  }
+}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/client/src/main/java/org/apache/sqoop/client/shell/DisableJobFunction.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/shell/DisableJobFunction.java b/client/src/main/java/org/apache/sqoop/client/shell/DisableJobFunction.java
new file mode 100644
index 0000000..5962cd2
--- /dev/null
+++ b/client/src/main/java/org/apache/sqoop/client/shell/DisableJobFunction.java
@@ -0,0 +1,59 @@
+/**
+ * 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.sqoop.client.shell;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.OptionBuilder;
+import org.apache.sqoop.client.core.Constants;
+import org.apache.sqoop.client.request.JobRequest;
+import org.apache.sqoop.model.MJob;
+import org.apache.sqoop.validation.Status;
+
+import static org.apache.sqoop.client.shell.ShellEnvironment.*;
+
+/**
+ * Handles disabling of a job object.
+ */
+public class DisableJobFunction extends SqoopFunction {
+
+  private JobRequest jobRequest;
+
+  @SuppressWarnings("static-access")
+  public DisableJobFunction() {
+    this.addOption(OptionBuilder
+      .withDescription(resourceString(Constants.RES_PROMPT_JOB_ID))
+      .withLongOpt(Constants.OPT_JID)
+      .hasArg()
+      .create('j'));
+  }
+
+  public Object executeFunction(CommandLine line) {
+    if (!line.hasOption(Constants.OPT_JID)) {
+      printlnResource(Constants.RES_ARGS_JID_MISSING);
+      return null;
+    }
+
+    if (jobRequest == null) {
+      jobRequest = new JobRequest();
+    }
+
+    client.enableJob(getLong(line, Constants.OPT_JID), false);
+
+    return null;
+  }
+}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/client/src/main/java/org/apache/sqoop/client/shell/EnableCommand.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/shell/EnableCommand.java b/client/src/main/java/org/apache/sqoop/client/shell/EnableCommand.java
new file mode 100644
index 0000000..8a2c1c7
--- /dev/null
+++ b/client/src/main/java/org/apache/sqoop/client/shell/EnableCommand.java
@@ -0,0 +1,64 @@
+/**
+ * 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.sqoop.client.shell;
+
+import org.apache.sqoop.client.core.Constants;
+import org.codehaus.groovy.tools.shell.Shell;
+import java.util.List;
+
+import static org.apache.sqoop.client.shell.ShellEnvironment.*;
+
+/**
+ *
+ */
+public class EnableCommand extends SqoopCommand {
+
+  private EnableConnectionFunction connectionFunction;
+  private EnableJobFunction jobFunction;
+
+  public EnableCommand(Shell shell) {
+    super(shell, Constants.CMD_ENABLE, Constants.CMD_ENABLE_SC,
+      new String[] {Constants.FN_CONNECTION, Constants.FN_JOB},
+      Constants.PRE_ENABLE, Constants.SUF_INFO);
+  }
+
+  @Override
+  @SuppressWarnings("unchecked")
+  public Object executeCommand(List args) {
+    if (args.size() == 0) {
+      printlnResource(Constants.RES_ENABLE_USAGE, getUsage());
+      return null;
+    }
+
+    String func = (String)args.get(0);
+    if (func.equals(Constants.FN_CONNECTION)) {
+      if (connectionFunction == null) {
+        connectionFunction = new EnableConnectionFunction();
+      }
+      return connectionFunction.execute(args);
+    } else if (func.equals(Constants.FN_JOB)) {
+      if (jobFunction == null) {
+        jobFunction = new EnableJobFunction();
+      }
+      return jobFunction.execute(args);
+    } else {
+      printlnResource(Constants.RES_FUNCTION_UNKNOWN, func);
+      return null;
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/client/src/main/java/org/apache/sqoop/client/shell/EnableConnectionFunction.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/shell/EnableConnectionFunction.java b/client/src/main/java/org/apache/sqoop/client/shell/EnableConnectionFunction.java
new file mode 100644
index 0000000..ed6dc3c
--- /dev/null
+++ b/client/src/main/java/org/apache/sqoop/client/shell/EnableConnectionFunction.java
@@ -0,0 +1,51 @@
+/**
+ * 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.sqoop.client.shell;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.OptionBuilder;
+import org.apache.sqoop.client.core.Constants;
+import org.apache.sqoop.model.MConnection;
+import org.apache.sqoop.validation.Status;
+
+import static org.apache.sqoop.client.shell.ShellEnvironment.*;
+
+/**
+ * Handles enabling of a connection object
+ */
+public class EnableConnectionFunction extends SqoopFunction {
+  @SuppressWarnings("static-access")
+  public EnableConnectionFunction() {
+    this.addOption(OptionBuilder
+      .withDescription(resourceString(Constants.RES_PROMPT_CONN_ID))
+      .withLongOpt(Constants.OPT_XID)
+      .hasArg()
+      .create('x'));
+  }
+
+  public Object executeFunction(CommandLine line) {
+    if (!line.hasOption(Constants.OPT_XID)) {
+      printlnResource(Constants.RES_ARGS_XID_MISSING);
+      return null;
+    }
+
+    client.enableConnection(getLong(line, Constants.OPT_XID), true);
+
+    return null;
+  }
+}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/client/src/main/java/org/apache/sqoop/client/shell/EnableJobFunction.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/shell/EnableJobFunction.java b/client/src/main/java/org/apache/sqoop/client/shell/EnableJobFunction.java
new file mode 100644
index 0000000..9e4e320
--- /dev/null
+++ b/client/src/main/java/org/apache/sqoop/client/shell/EnableJobFunction.java
@@ -0,0 +1,59 @@
+/**
+ * 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.sqoop.client.shell;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.OptionBuilder;
+import org.apache.sqoop.client.core.Constants;
+import org.apache.sqoop.client.request.JobRequest;
+import org.apache.sqoop.model.MJob;
+import org.apache.sqoop.validation.Status;
+
+import static org.apache.sqoop.client.shell.ShellEnvironment.*;
+
+/**
+ * Handles disabling of a job object.
+ */
+public class EnableJobFunction extends SqoopFunction {
+
+  private JobRequest jobRequest;
+
+  @SuppressWarnings("static-access")
+  public EnableJobFunction() {
+    this.addOption(OptionBuilder
+      .withDescription(resourceString(Constants.RES_PROMPT_JOB_ID))
+      .withLongOpt(Constants.OPT_JID)
+      .hasArg()
+      .create('j'));
+  }
+
+  public Object executeFunction(CommandLine line) {
+    if (!line.hasOption(Constants.OPT_JID)) {
+      printlnResource(Constants.RES_ARGS_JID_MISSING);
+      return null;
+    }
+
+    if (jobRequest == null) {
+      jobRequest = new JobRequest();
+    }
+
+    client.enableJob(getLong(line, Constants.OPT_JID), true);
+
+    return null;
+  }
+}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/client/src/main/java/org/apache/sqoop/client/shell/ShowConnectionFunction.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/shell/ShowConnectionFunction.java b/client/src/main/java/org/apache/sqoop/client/shell/ShowConnectionFunction.java
index 32bca71..94f92b3 100644
--- a/client/src/main/java/org/apache/sqoop/client/shell/ShowConnectionFunction.java
+++ b/client/src/main/java/org/apache/sqoop/client/shell/ShowConnectionFunction.java
@@ -65,18 +65,21 @@ public class ShowConnectionFunction extends SqoopFunction {
     header.add(resourceString(Constants.RES_TABLE_HEADER_ID));
     header.add(resourceString(Constants.RES_TABLE_HEADER_NAME));
     header.add(resourceString(Constants.RES_TABLE_HEADER_CONNECTOR));
+    header.add(resourceString(Constants.RES_TABLE_HEADER_ENABLED));
 
     List<String> ids = new LinkedList<String>();
     List<String> names = new LinkedList<String>();
     List<String> connectors = new LinkedList<String>();
+    List<String> availabilities = new LinkedList<String>();
 
     for(MConnection connection : connections) {
       ids.add(String.valueOf(connection.getPersistenceId()));
       names.add(connection.getName());
       connectors.add(String.valueOf(connection.getConnectorId()));
+      availabilities.add(String.valueOf(connection.getEnabled()));
     }
 
-    TableDisplayer.display(header, ids, names, connectors);
+    TableDisplayer.display(header, ids, names, connectors, availabilities);
   }
 
   private void showConnections() {
@@ -103,6 +106,7 @@ public class ShowConnectionFunction extends SqoopFunction {
     printlnResource(Constants.RES_SHOW_PROMPT_CONN_INFO,
       connection.getPersistenceId(),
       connection.getName(),
+      connection.getEnabled(),
       formatter.format(connection.getCreationDate()),
       formatter.format(connection.getLastUpdateDate())
     );

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/client/src/main/java/org/apache/sqoop/client/shell/ShowJobFunction.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/shell/ShowJobFunction.java b/client/src/main/java/org/apache/sqoop/client/shell/ShowJobFunction.java
index 590e4e7..97a240b 100644
--- a/client/src/main/java/org/apache/sqoop/client/shell/ShowJobFunction.java
+++ b/client/src/main/java/org/apache/sqoop/client/shell/ShowJobFunction.java
@@ -66,20 +66,23 @@ public class ShowJobFunction extends SqoopFunction {
     header.add(resourceString(Constants.RES_TABLE_HEADER_NAME));
     header.add(resourceString(Constants.RES_TABLE_HEADER_TYPE));
     header.add(resourceString(Constants.RES_TABLE_HEADER_CONNECTOR));
+    header.add(resourceString(Constants.RES_TABLE_HEADER_ENABLED));
 
     List<String> ids = new LinkedList<String>();
     List<String> names = new LinkedList<String>();
     List<String> types = new LinkedList<String>();
     List<String> connectors = new LinkedList<String>();
+    List<String> availabilities = new LinkedList<String>();
 
     for(MJob job : jobs) {
       ids.add(String.valueOf(job.getPersistenceId()));
       names.add(job.getName());
       types.add(job.getType().toString());
       connectors.add(String.valueOf(job.getConnectorId()));
+      availabilities.add(String.valueOf(job.getEnabled()));
     }
 
-    TableDisplayer.display(header, ids, names, types, connectors);
+    TableDisplayer.display(header, ids, names, types, connectors, availabilities);
   }
 
   private void showJobs() {
@@ -105,6 +108,7 @@ public class ShowJobFunction extends SqoopFunction {
       Constants.RES_SHOW_PROMPT_JOB_INFO,
       job.getPersistenceId(),
       job.getName(),
+      job.getEnabled(),
       formatter.format(job.getCreationDate()),
       formatter.format(job.getLastUpdateDate())
     );

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/client/src/main/java/org/apache/sqoop/client/shell/SqoopShell.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/shell/SqoopShell.java b/client/src/main/java/org/apache/sqoop/client/shell/SqoopShell.java
index aa87f20..f4ea3be 100644
--- a/client/src/main/java/org/apache/sqoop/client/shell/SqoopShell.java
+++ b/client/src/main/java/org/apache/sqoop/client/shell/SqoopShell.java
@@ -97,6 +97,8 @@ public final class SqoopShell {
     shell.register(new StartCommand(shell));
     shell.register(new StopCommand(shell));
     shell.register(new StatusCommand(shell));
+    shell.register(new EnableCommand(shell));
+    shell.register(new DisableCommand(shell));
 
     // Configure shared shell io object
     setIo(shell.getIo());

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/client/src/main/resources/client-resource.properties
----------------------------------------------------------------------
diff --git a/client/src/main/resources/client-resource.properties b/client/src/main/resources/client-resource.properties
index 5537a8e..1a8f963 100644
--- a/client/src/main/resources/client-resource.properties
+++ b/client/src/main/resources/client-resource.properties
@@ -86,6 +86,18 @@ create.creating_job = Creating job for connection with id {0}
 delete.usage = Usage: delete {0}
 
 #
+# Enable command
+enable.usage = Usage: enable {0}
+enable.conn_successful = Connection {0} was successfully enabled
+enable.job_successful = Job {0} was successfully enabled
+
+#
+# Disable command
+disable.usage = Usage: disable {0}
+disable.conn_successful = Connection {0} was successfully disabled
+disable.job_successful = Job {0} was successfully disabled
+
+#
 # Help command
 help.usage = [<command>]
 help.description = Display this help message
@@ -124,7 +136,7 @@ show.prompt_display_all_conns = Display all connections
 show.prompt_display_conn_xid = Display the connection with xid
 show.conn_usage = Usage: show connection
 show.prompt_conns_to_show = @|bold {0} connection(s) to show: |@
-show.prompt_conn_info = Connection with id {0} and name {1} (Created {2}, Updated {3})
+show.prompt_conn_info = Connection with id {0} and name {1} (Enabled: {2}, Created {3}, Updated {4})
 show.prompt_conn_cid_info = Using Connector id {0}
 
 show.prompt_display_all_connectors = Display all connectors
@@ -141,7 +153,7 @@ show.prompt_display_all_jobs = Display all jobs
 show.prompt_display_job_jid = Display jobwith given jid
 show.job_usage = Usage: show job
 show.prompt_jobs_to_show = @|bold {0} job(s) to show: |@
-show.prompt_job_info = Job with id {0} and name {1} (Created {2}, Updated {3})
+show.prompt_job_info = Job with id {0} and name {1} (Enabled: {2}, Created {3}, Updated {4})
 show.prompt_job_xid_cid_info = Using Connection id {0} and Connector id {1}
 
 show.prompt_display_all_submissions = Display all submissions
@@ -187,6 +199,7 @@ table.header.jid = Job Id
 table.header.eid = External Id
 table.header.status = Status
 table.header.date = Last Update Date
+table.header.enabled = Enabled
 
 #Form displayer resources
 formdisplayer.supported_job_types = Supported job types

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/common/src/main/java/org/apache/sqoop/json/ConnectionBean.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/json/ConnectionBean.java b/common/src/main/java/org/apache/sqoop/json/ConnectionBean.java
index b4e986a..a014ddd 100644
--- a/common/src/main/java/org/apache/sqoop/json/ConnectionBean.java
+++ b/common/src/main/java/org/apache/sqoop/json/ConnectionBean.java
@@ -106,6 +106,7 @@ public class ConnectionBean implements JsonBean {
       object.put(NAME, connection.getName());
       object.put(CREATED, connection.getCreationDate().getTime());
       object.put(UPDATED, connection.getLastUpdateDate().getTime());
+      object.put(ENABLED, connection.getEnabled());
       object.put(CONNECTOR_ID, connection.getConnectorId());
       object.put(CONNECTOR_PART,
         extractForms(connection.getConnectorPart().getForms(), skipSensitive));
@@ -159,6 +160,7 @@ public class ConnectionBean implements JsonBean {
       connection.setName((String) object.get(NAME));
       connection.setCreationDate(new Date((Long) object.get(CREATED)));
       connection.setLastUpdateDate(new Date((Long) object.get(UPDATED)));
+      connection.setEnabled((Boolean) object.get(ENABLED));
 
       connections.add(connection);
     }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/common/src/main/java/org/apache/sqoop/json/JobBean.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/json/JobBean.java b/common/src/main/java/org/apache/sqoop/json/JobBean.java
index a830646..4685797 100644
--- a/common/src/main/java/org/apache/sqoop/json/JobBean.java
+++ b/common/src/main/java/org/apache/sqoop/json/JobBean.java
@@ -109,6 +109,7 @@ public class JobBean implements JsonBean {
       object.put(TYPE, job.getType().name());
       object.put(CREATED, job.getCreationDate().getTime());
       object.put(UPDATED, job.getLastUpdateDate().getTime());
+      object.put(ENABLED, job.getEnabled());
       object.put(CONNECTION_ID, job.getConnectionId());
       object.put(CONNECTOR_ID, job.getConnectorId());
       object.put(CONNECTOR_PART,
@@ -171,6 +172,7 @@ public class JobBean implements JsonBean {
       job.setName((String) object.get(NAME));
       job.setCreationDate(new Date((Long) object.get(CREATED)));
       job.setLastUpdateDate(new Date((Long) object.get(UPDATED)));
+      job.setEnabled((Boolean) object.get(ENABLED));
 
       jobs.add(job);
     }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java b/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java
index f01bc57..978789b 100644
--- a/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java
+++ b/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java
@@ -47,6 +47,7 @@ public final class FormSerialization {
   public static final String CLASS = "class";
   public static final String CREATED = "created";
   public static final String UPDATED = "updated";
+  public static final String ENABLED = "enabled";
   public static final String CON_FORMS = "con-forms";
   public static final String JOB_FORMS = "job-forms";
 

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/common/src/main/java/org/apache/sqoop/model/MAccountableEntity.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/model/MAccountableEntity.java b/common/src/main/java/org/apache/sqoop/model/MAccountableEntity.java
index 137e71c..5524983 100644
--- a/common/src/main/java/org/apache/sqoop/model/MAccountableEntity.java
+++ b/common/src/main/java/org/apache/sqoop/model/MAccountableEntity.java
@@ -25,6 +25,8 @@ import java.util.Date;
  */
 abstract public class MAccountableEntity extends MPersistableEntity {
 
+  private final boolean DEFAULT_ENABLED = true;
+
   /**
    * Date when the entity was created.
    */
@@ -35,9 +37,15 @@ abstract public class MAccountableEntity extends MPersistableEntity {
    */
   private Date lastUpdateDate;
 
+  /**
+   * Whether enabled
+   */
+  private boolean enabled;
+
   public MAccountableEntity() {
     this.creationDate = new Date();
     this.lastUpdateDate = this.creationDate;
+    this.enabled = DEFAULT_ENABLED;
   }
 
   public void setCreationDate(Date createDate) {
@@ -55,4 +63,12 @@ abstract public class MAccountableEntity extends MPersistableEntity {
   public Date getLastUpdateDate() {
     return lastUpdateDate;
   }
+
+  public void setEnabled(boolean enable) {
+    this.enabled = enable;
+  }
+
+  public boolean getEnabled() {
+    return this.enabled;
+  }
 }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/common/src/test/java/org/apache/sqoop/json/TestConnectionBean.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/sqoop/json/TestConnectionBean.java b/common/src/test/java/org/apache/sqoop/json/TestConnectionBean.java
index dd1d75b..2f2b974 100644
--- a/common/src/test/java/org/apache/sqoop/json/TestConnectionBean.java
+++ b/common/src/test/java/org/apache/sqoop/json/TestConnectionBean.java
@@ -43,6 +43,7 @@ public class TestConnectionBean {
     connection.setPersistenceId(666);
     connection.setCreationDate(created);
     connection.setLastUpdateDate(updated);
+    connection.setEnabled(false);
 
     // Fill some data at the beginning
     MStringInput input = (MStringInput) connection.getConnectorPart().getForms()
@@ -77,6 +78,7 @@ public class TestConnectionBean {
     assertEquals("Connection", target.getName());
     assertEquals(created, target.getCreationDate());
     assertEquals(updated, target.getLastUpdateDate());
+    assertEquals(false, target.getEnabled());
 
     // Test that value was correctly moved
     MStringInput targetInput = (MStringInput) target.getConnectorPart()
@@ -93,6 +95,7 @@ public class TestConnectionBean {
     connection.setPersistenceId(666);
     connection.setCreationDate(created);
     connection.setLastUpdateDate(updated);
+    connection.setEnabled(true);
 
     // Fill some data at the beginning
     MStringInput input = (MStringInput) connection.getConnectorPart().getForms()

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/common/src/test/java/org/apache/sqoop/json/TestJobBean.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/sqoop/json/TestJobBean.java b/common/src/test/java/org/apache/sqoop/json/TestJobBean.java
index 6af1d8b..e42b7df 100644
--- a/common/src/test/java/org/apache/sqoop/json/TestJobBean.java
+++ b/common/src/test/java/org/apache/sqoop/json/TestJobBean.java
@@ -42,6 +42,7 @@ public class TestJobBean {
     job.setPersistenceId(666);
     job.setCreationDate(created);
     job.setLastUpdateDate(updated);
+    job.setEnabled(false);
 
     // Fill some data at the beginning
     MStringInput input = (MStringInput) job.getConnectorPart().getForms()
@@ -67,6 +68,7 @@ public class TestJobBean {
     assertEquals("The big job", target.getName());
     assertEquals(created, target.getCreationDate());
     assertEquals(updated, target.getLastUpdateDate());
+    assertEquals(false, target.getEnabled());
 
     // Test that value was correctly moved
     MStringInput targetInput = (MStringInput) target.getConnectorPart()

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/common/src/test/java/org/apache/sqoop/model/TestMAccountableEntity.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/sqoop/model/TestMAccountableEntity.java b/common/src/test/java/org/apache/sqoop/model/TestMAccountableEntity.java
index 4ea42b1..bf103e4 100644
--- a/common/src/test/java/org/apache/sqoop/model/TestMAccountableEntity.java
+++ b/common/src/test/java/org/apache/sqoop/model/TestMAccountableEntity.java
@@ -49,7 +49,9 @@ public class TestMAccountableEntity {
     Date testLastUpdateDate = new Date();
     connection.setCreationDate(testCreationDate);
     connection.setLastUpdateDate(testLastUpdateDate);
+    connection.setEnabled(false);
     assertEquals(testCreationDate, connection.getCreationDate());
     assertEquals(testLastUpdateDate, connection.getLastUpdateDate());
+    assertEquals(false, connection.getEnabled());
   }
 }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/core/src/main/java/org/apache/sqoop/framework/FrameworkError.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/sqoop/framework/FrameworkError.java b/core/src/main/java/org/apache/sqoop/framework/FrameworkError.java
index 4277311..f7a6b67 100644
--- a/core/src/main/java/org/apache/sqoop/framework/FrameworkError.java
+++ b/core/src/main/java/org/apache/sqoop/framework/FrameworkError.java
@@ -42,6 +42,10 @@ public enum FrameworkError implements ErrorCode {
 
   FRAMEWORK_0008("Invalid combination of submission and execution engines"),
 
+  FRAMEWORK_0009("Job has been disabled. Cannot submit this job."),
+
+  FRAMEWORK_0010("Connection for this job has been disabled. Cannot submit this job."),
+
   ;
 
   private final String message;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/core/src/main/java/org/apache/sqoop/framework/JobManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/sqoop/framework/JobManager.java b/core/src/main/java/org/apache/sqoop/framework/JobManager.java
index 9f09982..d0a087d 100644
--- a/core/src/main/java/org/apache/sqoop/framework/JobManager.java
+++ b/core/src/main/java/org/apache/sqoop/framework/JobManager.java
@@ -270,7 +270,19 @@ public class JobManager implements Reconfigurable {
       throw new SqoopException(FrameworkError.FRAMEWORK_0004,
         "Unknown job id " + jobId);
     }
+
+    if (!job.getEnabled()) {
+      throw new SqoopException(FrameworkError.FRAMEWORK_0009,
+        "Job id: " + job.getPersistenceId());
+    }
+
     MConnection connection = repository.findConnection(job.getConnectionId());
+
+    if (!connection.getEnabled()) {
+      throw new SqoopException(FrameworkError.FRAMEWORK_0010,
+        "Connection id: " + connection.getPersistenceId());
+    }
+
     SqoopConnector connector =
       ConnectorManager.getInstance().getConnector(job.getConnectorId());
 

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java b/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java
index 095f3e9..7768b13 100644
--- a/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java
+++ b/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java
@@ -285,6 +285,25 @@ public class JdbcRepository extends Repository {
    * {@inheritDoc}
    */
   @Override
+  public void enableConnection(final long connectionId, final boolean enabled) {
+    doWithConnection(new DoWithConnection() {
+      @Override
+      public Object doIt(Connection conn) {
+        if(!handler.existsConnection(connectionId, conn)) {
+          throw new SqoopException(RepositoryError.JDBCREPO_0017,
+            "Invalid id: " + connectionId);
+        }
+
+        handler.enableConnection(connectionId, enabled, conn);
+        return null;
+      }
+    });
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
   public void deleteConnection(final long connectionId) {
     doWithConnection(new DoWithConnection() {
       @Override
@@ -383,6 +402,25 @@ public class JdbcRepository extends Repository {
    * {@inheritDoc}
    */
   @Override
+  public void enableJob(final long id, final boolean enabled) {
+    doWithConnection(new DoWithConnection() {
+      @Override
+      public Object doIt(Connection conn) {
+        if(!handler.existsJob(id, conn)) {
+          throw new SqoopException(RepositoryError.JDBCREPO_0020,
+            "Invalid id: " + id);
+        }
+
+        handler.enableJob(id, enabled, conn);
+        return null;
+      }
+    });
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
   public void deleteJob(final long id) {
     doWithConnection(new DoWithConnection() {
       @Override

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java b/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java
index d468b79..9299484 100644
--- a/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java
+++ b/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java
@@ -211,6 +211,15 @@ public abstract class JdbcRepositoryHandler {
   public abstract boolean inUseConnection(long connectionId, Connection conn);
 
   /**
+   * Enable or disable connection with given id from metadata repository
+   *
+   * @param connectionId Connection object that is going to be enabled or disabled
+   * @param enabled Enable or disable
+   * @param conn Connection to metadata repository
+   */
+  public abstract void enableConnection(long connectionId, boolean enabled, Connection conn);
+
+  /**
    * Delete connection with given id from metadata repository.
    *
    * @param connectionId Connection object that should be removed from repository
@@ -282,6 +291,14 @@ public abstract class JdbcRepositoryHandler {
    */
   public abstract boolean inUseJob(long jobId, Connection conn);
 
+  /**
+   * Enable or disable job with given id from the repository
+   *
+   * @param jobId Job id
+   * @param enabled Enable or disable
+   * @param conn Connection to metadata repository
+   */
+  public abstract void enableJob(long jobId, boolean enabled, Connection conn);
 
   /**
    * Delete the input values for the job with given id from the repository.

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/core/src/main/java/org/apache/sqoop/repository/Repository.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/sqoop/repository/Repository.java b/core/src/main/java/org/apache/sqoop/repository/Repository.java
index 92e11d2..7c7673f 100644
--- a/core/src/main/java/org/apache/sqoop/repository/Repository.java
+++ b/core/src/main/java/org/apache/sqoop/repository/Repository.java
@@ -143,6 +143,14 @@ public abstract class Repository {
     RepositoryTransaction tx);
 
   /**
+   * Enable or disable connection with given id from metadata repository
+   *
+   * @param id Connection object that is going to be enabled or disabled
+   * @param enabled enable or disable
+   */
+  public abstract void enableConnection(long id, boolean enabled);
+
+  /**
    * Delete connection with given id from metadata repository.
    *
    * @param id Connection object that should be removed from repository
@@ -193,6 +201,14 @@ public abstract class Repository {
   public abstract void updateJob(MJob job, RepositoryTransaction tx);
 
   /**
+   * Enable or disable job with given id from metadata repository
+   *
+   * @param id Job object that is going to be enabled or disabled
+   * @param enabled Enable or disable
+   */
+  public abstract void enableJob(long id, boolean enabled);
+
+  /**
    * Delete job with given id from metadata repository.
    *
    * @param id Job id that should be removed

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java
index aeb7533..455eb64 100644
--- a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java
+++ b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java
@@ -172,6 +172,12 @@ public enum DerbyRepoError implements ErrorCode {
   /** Can't detect version of the database structures **/
   DERBYREPO_0041("Can't detect version of repository storage"),
 
+  /** Can't enable/disable connection **/
+  DERBYREPO_0042("Can't enable/disable connection"),
+
+  /** Can't enable/disable job **/
+  DERBYREPO_0043("Can't enable/disable job"),
+
   ;
 
   private final String message;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java
index f717abf..771673d 100644
--- a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java
+++ b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java
@@ -332,6 +332,8 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
     }
     if(version <= 1) {
       runQuery(QUERY_CREATE_TABLE_SQ_SYSTEM, conn);
+      runQuery(QUERY_UPGRADE_TABLE_SQ_CONNECTION_ADD_COLUMN_ENABLED, conn);
+      runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_COLUMN_ENABLED, conn);
     }
 
     ResultSet rs = null;
@@ -545,6 +547,7 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
       stmt.setLong(2, connection.getConnectorId());
       stmt.setTimestamp(3, new Timestamp(connection.getCreationDate().getTime()));
       stmt.setTimestamp(4, new Timestamp(connection.getLastUpdateDate().getTime()));
+      stmt.setBoolean(5, connection.getEnabled());
 
       result = stmt.executeUpdate();
       if (result != 1) {
@@ -667,6 +670,23 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
     }
   }
 
+  @Override
+  public void enableConnection(long connectionId, boolean enabled, Connection conn) {
+    PreparedStatement enableConn = null;
+
+    try {
+      enableConn = conn.prepareStatement(STMT_ENABLE_CONNECTION);
+      enableConn.setBoolean(1, enabled);
+      enableConn.setLong(2, connectionId);
+      enableConn.executeUpdate();
+    } catch (SQLException ex) {
+      logException(ex, connectionId);
+      throw new SqoopException(DerbyRepoError.DERBYREPO_0042, ex);
+    } finally {
+      closeStatements(enableConn);
+    }
+  }
+
   /**
    * {@inheritDoc}
    */
@@ -849,6 +869,7 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
       stmt.setString(3, job.getType().name());
       stmt.setTimestamp(4, new Timestamp(job.getCreationDate().getTime()));
       stmt.setTimestamp(5, new Timestamp(job.getLastUpdateDate().getTime()));
+      stmt.setBoolean(6, job.getEnabled());
 
       result = stmt.executeUpdate();
       if (result != 1) {
@@ -964,6 +985,23 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
     return false;
   }
 
+  @Override
+  public void enableJob(long jobId, boolean enabled, Connection conn) {
+    PreparedStatement enableConn = null;
+
+    try {
+      enableConn = conn.prepareStatement(STMT_ENABLE_JOB);
+      enableConn.setBoolean(1, enabled);
+      enableConn.setLong(2, jobId);
+      enableConn.executeUpdate();
+    } catch (SQLException ex) {
+      logException(ex, jobId);
+      throw new SqoopException(DerbyRepoError.DERBYREPO_0043, ex);
+    } finally {
+      closeStatements(enableConn);
+    }
+  }
+
   /**
    * {@inheritDoc}
    */
@@ -1510,6 +1548,7 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
         long connectorId = rsConnection.getLong(3);
         Date creationDate = rsConnection.getTimestamp(4);
         Date lastUpdateDate = rsConnection.getTimestamp(5);
+        boolean enabled = rsConnection.getBoolean(6);
 
         formConnectorFetchStmt.setLong(1, connectorId);
 
@@ -1538,6 +1577,7 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
         connection.setName(name);
         connection.setCreationDate(creationDate);
         connection.setLastUpdateDate(lastUpdateDate);
+        connection.setEnabled(enabled);
 
         connections.add(connection);
       }
@@ -1574,6 +1614,7 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
         String stringType = rsJob.getString(5);
         Date creationDate = rsJob.getTimestamp(6);
         Date lastUpdateDate = rsJob.getTimestamp(7);
+        boolean enabled = rsJob.getBoolean(8);
 
         MJob.Type type = MJob.Type.valueOf(stringType);
 
@@ -1604,6 +1645,7 @@ public class DerbyRepositoryHandler extends JdbcRepositoryHandler {
         job.setName(name);
         job.setCreationDate(creationDate);
         job.setLastUpdateDate(lastUpdateDate);
+        job.setEnabled(enabled);
 
         jobs.add(job);
       }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java
index 68cb1c0..49bf607 100644
--- a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java
+++ b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java
@@ -123,6 +123,8 @@ public final class DerbySchemaConstants {
 
   public static final String COLUMN_SQN_UPDATE_DATE = "SQN_UPDATE_DATE";
 
+  public static final String COLUMN_SQN_ENABLED = "SQN_ENABLED";
+
   public static final String CONSTRAINT_SQN_SQC_NAME = CONSTRAINT_PREFIX + "SQN_SQC";
 
   public static final String CONSTRAINT_SQN_SQC = SCHEMA_PREFIX + CONSTRAINT_SQN_SQC_NAME;
@@ -146,6 +148,8 @@ public final class DerbySchemaConstants {
 
   public static final String COLUMN_SQB_UPDATE_DATE = "SQB_UPDATE_DATE";
 
+  public static final String COLUMN_SQB_ENABLED = "SQB_ENABLED";
+
   public static final String CONSTRAINT_SQB_SQN_NAME = CONSTRAINT_PREFIX + "SQB_SQN";
 
   public static final String CONSTRAINT_SQB_SQN = SCHEMA_PREFIX + CONSTRAINT_SQB_SQN_NAME;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java
index b2cd6cc..b08f7ab 100644
--- a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java
+++ b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java
@@ -90,6 +90,7 @@ import static org.apache.sqoop.repository.derby.DerbySchemaConstants.*;
  *    | SQN_CONNECTOR: BIGINT        | FK SQ_CONNECTOR(SQC_ID)
  *    | SQN_CREATION_DATE: TIMESTAMP |
  *    | SQN_UPDATE_DATE: TIMESTAMP   |
+ *    | SQN_ENABLED: BOOLEAN         |
  *    +------------------------------+
  * </pre>
  * </p>
@@ -105,6 +106,7 @@ import static org.apache.sqoop.repository.derby.DerbySchemaConstants.*;
  *    | SQB_CONNECTION: BIGINT       | FK SQ_CONNECTION(SQN_ID)
  *    | SQB_CREATION_DATE: TIMESTAMP |
  *    | SQB_UPDATE_DATE: TIMESTAMP   |
+ *    | SQB_ENABLED: BOOLEAN         |
  *    +------------------------------+
  * </pre>
  * </p>
@@ -256,6 +258,12 @@ public final class DerbySchemaQuery {
           + " REFERENCES " + TABLE_SQ_CONNECTOR + " (" + COLUMN_SQC_ID + ")"
       + ")";
 
+  // DDL: Add enabled column to table SQ_CONNECTION
+  public static final String QUERY_UPGRADE_TABLE_SQ_CONNECTION_ADD_COLUMN_ENABLED =
+      "ALTER TABLE " + TABLE_SQ_CONNECTION + " ADD "
+      + COLUMN_SQN_ENABLED + " BOOLEAN "
+      + "DEFAULT TRUE";
+
   // DDL: Create table SQ_JOB
   public static final String QUERY_CREATE_TABLE_SQ_JOB =
       "CREATE TABLE " + TABLE_SQ_JOB + " ("
@@ -270,6 +278,12 @@ public final class DerbySchemaQuery {
           + "REFERENCES " + TABLE_SQ_CONNECTION + " (" + COLUMN_SQN_ID + ")"
       + ")";
 
+  // DDL: Add enabled column to table SQ_JOB
+  public static final String QUERY_UPGRADE_TABLE_SQ_JOB_ADD_COLUMN_ENABLED =
+      "ALTER TABLE " + TABLE_SQ_JOB + " ADD "
+      + COLUMN_SQB_ENABLED + " BOOLEAN "
+      + "DEFAULT TRUE";
+
   // DDL: Create table SQ_CONNECTION_INPUT
   public static final String QUERY_CREATE_TABLE_SQ_CONNECTION_INPUT =
       "CREATE TABLE " + TABLE_SQ_CONNECTION_INPUT + " ("
@@ -545,8 +559,9 @@ public final class DerbySchemaQuery {
     + COLUMN_SQN_NAME + ", "
     + COLUMN_SQN_CONNECTOR + ", "
     + COLUMN_SQN_CREATION_DATE + ", "
-    + COLUMN_SQN_UPDATE_DATE
-    + ") VALUES (?, ?, ?, ?)";
+    + COLUMN_SQN_UPDATE_DATE + ", "
+    + COLUMN_SQN_ENABLED
+    + ") VALUES (?, ?, ?, ?, ?)";
 
   // DML: Insert new connection inputs
   public static final String STMT_INSERT_CONNECTION_INPUT =
@@ -563,6 +578,12 @@ public final class DerbySchemaQuery {
     + COLUMN_SQN_UPDATE_DATE + " = ? "
     + " WHERE " + COLUMN_SQN_ID + " = ?";
 
+  // DML: Enable or disable connection
+  public static final String STMT_ENABLE_CONNECTION =
+    "UPDATE " + TABLE_SQ_CONNECTION + " SET "
+    + COLUMN_SQN_ENABLED + " = ? "
+    + " WHERE " + COLUMN_SQN_ID + " = ?";
+
   // DML: Delete rows from connection input table
   public static final String STMT_DELETE_CONNECTION_INPUT =
     "DELETE FROM " + TABLE_SQ_CONNECTION_INPUT
@@ -580,7 +601,8 @@ public final class DerbySchemaQuery {
     + COLUMN_SQN_NAME + ", "
     + COLUMN_SQN_CONNECTOR + ", "
     + COLUMN_SQN_CREATION_DATE + ", "
-    + COLUMN_SQN_UPDATE_DATE
+    + COLUMN_SQN_UPDATE_DATE + ", "
+    + COLUMN_SQN_ENABLED
     + " FROM " + TABLE_SQ_CONNECTION
     + " WHERE " + COLUMN_SQN_ID + " = ?";
 
@@ -591,7 +613,8 @@ public final class DerbySchemaQuery {
     + COLUMN_SQN_NAME + ", "
     + COLUMN_SQN_CONNECTOR + ", "
     + COLUMN_SQN_CREATION_DATE + ", "
-    + COLUMN_SQN_UPDATE_DATE
+    + COLUMN_SQN_UPDATE_DATE + ", "
+    + COLUMN_SQN_ENABLED
     + " FROM " + TABLE_SQ_CONNECTION;
 
   // DML: Select all connections for a specific connector.
@@ -601,7 +624,8 @@ public final class DerbySchemaQuery {
     + COLUMN_SQN_NAME + ", "
     + COLUMN_SQN_CONNECTOR + ", "
     + COLUMN_SQN_CREATION_DATE + ", "
-    + COLUMN_SQN_UPDATE_DATE
+    + COLUMN_SQN_UPDATE_DATE + ", "
+    + COLUMN_SQN_ENABLED
     + " FROM " + TABLE_SQ_CONNECTION
     + " WHERE " + COLUMN_SQN_CONNECTOR + " = ?";
 
@@ -617,8 +641,9 @@ public final class DerbySchemaQuery {
     + COLUMN_SQB_CONNECTION + ", "
     + COLUMN_SQB_TYPE + ", "
     + COLUMN_SQB_CREATION_DATE + ", "
-    + COLUMN_SQB_UPDATE_DATE
-    + ") VALUES (?, ?, ?, ?, ?)";
+    + COLUMN_SQB_UPDATE_DATE + ", "
+    + COLUMN_SQB_ENABLED
+    + ") VALUES (?, ?, ?, ?, ?, ?)";
 
   // DML: Insert new job inputs
   public static final String STMT_INSERT_JOB_INPUT =
@@ -634,6 +659,12 @@ public final class DerbySchemaQuery {
     + COLUMN_SQB_UPDATE_DATE + " = ? "
     + " WHERE " + COLUMN_SQB_ID + " = ?";
 
+  // DML: Enable or disable job
+  public static final String STMT_ENABLE_JOB =
+    "UPDATE " + TABLE_SQ_JOB + " SET "
+    + COLUMN_SQB_ENABLED + " = ? "
+    + " WHERE " + COLUMN_SQB_ID + " = ?";
+
   // DML: Delete rows from job input table
   public static final String STMT_DELETE_JOB_INPUT =
     "DELETE FROM " + TABLE_SQ_JOB_INPUT
@@ -667,7 +698,8 @@ public final class DerbySchemaQuery {
     + COLUMN_SQB_CONNECTION + ", "
     + COLUMN_SQB_TYPE + ", "
     + COLUMN_SQB_CREATION_DATE + ", "
-    + COLUMN_SQB_UPDATE_DATE
+    + COLUMN_SQB_UPDATE_DATE + ", "
+    + COLUMN_SQB_ENABLED
     + " FROM " + TABLE_SQ_JOB
     + " LEFT JOIN " + TABLE_SQ_CONNECTION
     + " ON " + COLUMN_SQB_CONNECTION + " = " + COLUMN_SQN_ID
@@ -682,7 +714,8 @@ public final class DerbySchemaQuery {
     + COLUMN_SQB_CONNECTION + ", "
     + COLUMN_SQB_TYPE + ", "
     + COLUMN_SQB_CREATION_DATE + ", "
-    + COLUMN_SQB_UPDATE_DATE
+    + COLUMN_SQB_UPDATE_DATE + ", "
+    + COLUMN_SQB_ENABLED
     + " FROM " + TABLE_SQ_JOB
     + " LEFT JOIN " + TABLE_SQ_CONNECTION
       + " ON " + COLUMN_SQB_CONNECTION + " = " + COLUMN_SQN_ID;
@@ -696,7 +729,8 @@ public final class DerbySchemaQuery {
     + COLUMN_SQB_CONNECTION + ", "
     + COLUMN_SQB_TYPE + ", "
     + COLUMN_SQB_CREATION_DATE + ", "
-    + COLUMN_SQB_UPDATE_DATE
+    + COLUMN_SQB_UPDATE_DATE + ", "
+    + COLUMN_SQB_ENABLED
     + " FROM " + TABLE_SQ_JOB
     + " LEFT JOIN " + TABLE_SQ_CONNECTION
       + " ON " + COLUMN_SQB_CONNECTION + " = " + COLUMN_SQN_ID

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java
index 677b0be..b766b09 100644
--- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java
+++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java
@@ -99,6 +99,8 @@ abstract public class DerbyTestCase extends TestCase {
     runQuery(QUERY_CREATE_TABLE_SQ_COUNTER);
     runQuery(QUERY_CREATE_TABLE_SQ_COUNTER_SUBMISSION);
     runQuery(QUERY_CREATE_TABLE_SQ_SYSTEM);
+    runQuery(QUERY_UPGRADE_TABLE_SQ_CONNECTION_ADD_COLUMN_ENABLED);
+    runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_COLUMN_ENABLED);
     runQuery("INSERT INTO SQOOP.SQ_SYSTEM(SQM_KEY, SQM_VALUE) VALUES('version', '2')");
   }
 

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestConnectionHandling.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestConnectionHandling.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestConnectionHandling.java
index 8266b46..6959f2d 100644
--- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestConnectionHandling.java
+++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestConnectionHandling.java
@@ -20,6 +20,7 @@ package org.apache.sqoop.repository.derby;
 import org.apache.sqoop.common.SqoopException;
 import org.apache.sqoop.model.MConnection;
 import org.apache.sqoop.model.MForm;
+import org.apache.sqoop.model.MJob;
 import org.apache.sqoop.model.MStringInput;
 
 import java.util.List;
@@ -188,6 +189,24 @@ public class TestConnectionHandling extends DerbyTestCase {
     assertEquals("Injected", forms.get(1).getInputs().get(1).getValue());
   }
 
+  public void testEnableAndDisableConnection() throws Exception {
+    loadConnections();
+
+    // disable connection 1
+    handler.enableConnection(1, false, getDerbyConnection());
+
+    MConnection retrieved = handler.findConnection(1, getDerbyConnection());
+    assertNotNull(retrieved);
+    assertEquals(false, retrieved.getEnabled());
+
+    // enable connection 1
+    handler.enableConnection(1, true, getDerbyConnection());
+
+    retrieved = handler.findConnection(1, getDerbyConnection());
+    assertNotNull(retrieved);
+    assertEquals(true, retrieved.getEnabled());
+  }
+
   public void testDeleteConnection() throws Exception {
     loadConnections();
 

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestJobHandling.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestJobHandling.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestJobHandling.java
index 4c97e1e..a3d804e 100644
--- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestJobHandling.java
+++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestJobHandling.java
@@ -205,6 +205,24 @@ public class TestJobHandling extends DerbyTestCase {
     assertEquals("Injected", forms.get(1).getInputs().get(1).getValue());
   }
 
+  public void testEnableAndDisableJob() throws Exception {
+    loadJobs();
+
+    // disable job 1
+    handler.enableJob(1, false, getDerbyConnection());
+
+    MJob retrieved = handler.findJob(1, getDerbyConnection());
+    assertNotNull(retrieved);
+    assertEquals(false, retrieved.getEnabled());
+
+    // enable job 1
+    handler.enableJob(1, true, getDerbyConnection());
+
+    retrieved = handler.findJob(1, getDerbyConnection());
+    assertNotNull(retrieved);
+    assertEquals(true, retrieved.getEnabled());
+  }
+
   public void testDeleteJob() throws Exception {
     loadJobs();
 

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/server/src/main/java/org/apache/sqoop/handler/ConnectionRequestHandler.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/sqoop/handler/ConnectionRequestHandler.java b/server/src/main/java/org/apache/sqoop/handler/ConnectionRequestHandler.java
index 038f602..62be8f4 100644
--- a/server/src/main/java/org/apache/sqoop/handler/ConnectionRequestHandler.java
+++ b/server/src/main/java/org/apache/sqoop/handler/ConnectionRequestHandler.java
@@ -57,6 +57,12 @@ import java.util.Locale;
  * PUT /v1/connection/:xid
  * Update connection with id :xid.
  *
+ * PUT /v1/connection/:xid/enable
+ * Enable connection with id :xid
+ *
+ * PUT /v1/connection/:xid/disable
+ * Disable connection with id :xid
+ *
  * DELETE /v1/connection/:xid
  * Remove connection with id :xid
  *
@@ -71,6 +77,9 @@ public class ConnectionRequestHandler implements RequestHandler {
   private static final Logger LOG =
       Logger.getLogger(ConnectionRequestHandler.class);
 
+  private static final String ENABLE = "enable";
+  private static final String DISABLE = "disable";
+
   public ConnectionRequestHandler() {
     LOG.info("ConnectionRequestHandler initialized");
   }
@@ -81,9 +90,15 @@ public class ConnectionRequestHandler implements RequestHandler {
       case GET:
         return getConnections(ctx);
       case POST:
-        return createUpdateConnection(ctx, false);
+          return createUpdateConnection(ctx, false);
       case PUT:
-        return createUpdateConnection(ctx, true);
+        if (ctx.getLastURLElement().equals(ENABLE)) {
+          return enableConnection(ctx, true);
+        } else if (ctx.getLastURLElement().equals(DISABLE)) {
+          return enableConnection(ctx, false);
+        } else {
+          return createUpdateConnection(ctx, true);
+        }
       case DELETE:
         return deleteConnection(ctx);
     }
@@ -234,4 +249,15 @@ public class ConnectionRequestHandler implements RequestHandler {
 
     return bean;
   }
+
+  private JsonBean enableConnection(RequestContext ctx, boolean enabled) {
+    String[] elements = ctx.getUrlElements();
+    String sxid = elements[elements.length - 2];
+    long xid = Long.valueOf(sxid);
+
+    Repository repository = RepositoryManager.getInstance().getRepository();
+    repository.enableConnection(xid, enabled);
+
+    return JsonBean.EMPTY_BEAN;
+  }
 }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/69ecc93d/server/src/main/java/org/apache/sqoop/handler/JobRequestHandler.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/sqoop/handler/JobRequestHandler.java b/server/src/main/java/org/apache/sqoop/handler/JobRequestHandler.java
index ab3f9d0..0d15329 100644
--- a/server/src/main/java/org/apache/sqoop/handler/JobRequestHandler.java
+++ b/server/src/main/java/org/apache/sqoop/handler/JobRequestHandler.java
@@ -57,6 +57,12 @@ import java.util.Locale;
  * PUT /v1/job/:jid
  * Update job with id :jid.
  *
+ * PUT /v1/job/:jid/enable
+ * Enable job with id :jid
+ *
+ * PUT /v1/job/:jid/disable
+ * Disable job with id :jid
+ *
  * DELETE /v1/job/:jid
  * Remove job with id :jid
  *
@@ -71,6 +77,9 @@ public class JobRequestHandler implements RequestHandler {
   private static final Logger LOG =
       Logger.getLogger(JobRequestHandler.class);
 
+  private static final String ENABLE = "enable";
+  private static final String DISABLE = "disable";
+
   public JobRequestHandler() {
     LOG.info("JobRequestHandler initialized");
   }
@@ -81,9 +90,15 @@ public class JobRequestHandler implements RequestHandler {
       case GET:
         return getJobs(ctx);
       case POST:
-        return createUpdateJob(ctx, false);
+          return createUpdateJob(ctx, false);
       case PUT:
-        return createUpdateJob(ctx, true);
+        if (ctx.getLastURLElement().equals(ENABLE)) {
+          return enableJob(ctx, true);
+        } else if (ctx.getLastURLElement().equals(DISABLE)) {
+          return enableJob(ctx, false);
+        } else {
+          return createUpdateJob(ctx, true);
+        }
       case DELETE:
         return deleteJob(ctx);
     }
@@ -234,4 +249,15 @@ public class JobRequestHandler implements RequestHandler {
 
     return bean;
   }
+
+  private JsonBean enableJob(RequestContext ctx, boolean enabled) {
+    String[] elements = ctx.getUrlElements();
+    String sjid = elements[elements.length - 2];
+    long xid = Long.valueOf(sjid);
+
+    Repository repository = RepositoryManager.getInstance().getRepository();
+    repository.enableJob(xid, enabled);
+
+    return JsonBean.EMPTY_BEAN;
+  }
 }