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 2015/12/07 11:18:54 UTC

sqoop git commit: SQOOP-2690: Sqoop2: Use connector name in MLink.

Repository: sqoop
Updated Branches:
  refs/heads/sqoop2 1b228f308 -> 794adbcf3


SQOOP-2690: Sqoop2: Use connector name in MLink.

(Colin Ma 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/794adbcf
Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/794adbcf
Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/794adbcf

Branch: refs/heads/sqoop2
Commit: 794adbcf3d4c73bae2ee428041efedebf2e06ab5
Parents: 1b228f3
Author: Jarek Jarcec Cecho <ja...@apache.org>
Authored: Mon Dec 7 11:18:12 2015 +0100
Committer: Jarek Jarcec Cecho <ja...@apache.org>
Committed: Mon Dec 7 11:18:12 2015 +0100

----------------------------------------------------------------------
 .../org/apache/sqoop/client/SqoopClient.java    | 85 +++++++-------------
 .../request/ConnectorResourceRequest.java       |  8 +-
 .../client/request/SqoopResourceRequests.java   |  4 +-
 .../apache/sqoop/client/TestSqoopClient.java    | 51 +++++-------
 .../org/apache/sqoop/json/ConnectorBean.java    | 14 ++--
 .../org/apache/sqoop/json/ConnectorsBean.java   |  2 +-
 .../java/org/apache/sqoop/json/LinkBean.java    | 24 +++---
 .../main/java/org/apache/sqoop/model/MLink.java | 18 ++---
 .../apache/sqoop/json/TestConnectorBean.java    |  6 +-
 .../apache/sqoop/json/TestConnectorsBean.java   | 20 ++---
 .../apache/sqoop/json/util/BeanTestUtil.java    |  2 +-
 .../sqoop/model/TestMAccountableEntity.java     |  2 +-
 .../java/org/apache/sqoop/model/TestMLink.java  |  6 +-
 .../sqoop/connector/ConnectorManager.java       |  8 +-
 .../org/apache/sqoop/driver/JobManager.java     | 18 +++--
 .../org/apache/sqoop/driver/TestJobManager.java |  4 +-
 .../sqoop/repository/TestJdbcRepository.java    | 18 ++---
 .../common/CommonRepositoryHandler.java         | 12 ++-
 .../sqoop/repository/derby/TestInputTypes.java  |  2 +-
 .../repository/derby/TestLinkHandling.java      |  2 +-
 .../repository/mysql/MySqlTestCase.java         |  2 +-
 .../postgresql/PostgresqlTestCase.java          |  2 +-
 .../sqoop/handler/ConnectorRequestHandler.java  |  4 +-
 .../sqoop/handler/LinkRequestHandler.java       | 14 ++--
 .../apache/sqoop/shell/CloneJobFunction.java    |  8 +-
 .../apache/sqoop/shell/CloneLinkFunction.java   |  2 +-
 .../apache/sqoop/shell/CreateJobFunction.java   |  4 +-
 .../apache/sqoop/shell/CreateLinkFunction.java  |  7 +-
 .../sqoop/shell/ShowConnectorFunction.java      |  2 +-
 .../org/apache/sqoop/shell/ShowJobFunction.java |  9 ++-
 .../apache/sqoop/shell/ShowLinkFunction.java    | 40 +--------
 .../apache/sqoop/shell/UpdateJobFunction.java   |  9 ++-
 .../apache/sqoop/shell/UpdateLinkFunction.java  |  3 +-
 .../apache/sqoop/shell/TestCloneCommand.java    | 33 +++-----
 .../apache/sqoop/shell/TestCreateCommand.java   |  9 ++-
 .../org/apache/sqoop/shell/TestShowCommand.java |  3 +-
 .../apache/sqoop/shell/TestUpdateCommand.java   | 20 ++---
 .../sqoop/test/testcases/JettyTestCase.java     |  1 -
 .../integration/connector/hdfs/S3Test.java      |  6 +-
 .../sqoop/tools/tool/RepositoryLoadTool.java    |  4 +-
 40 files changed, 212 insertions(+), 276 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/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 3d3425d..9b9359b 100644
--- a/client/src/main/java/org/apache/sqoop/client/SqoopClient.java
+++ b/client/src/main/java/org/apache/sqoop/client/SqoopClient.java
@@ -61,11 +61,11 @@ public class SqoopClient {
   /**
    * All cached connectors.
    */
-  private Map<Long, MConnector> connectors;
+  private Map<String, MConnector> connectors;
   /**
    * All cached config params for every registered connector in the sqoop system.
    */
-  private Map<Long, ResourceBundle> connectorConfigBundles;
+  private Map<String, ResourceBundle> connectorConfigBundles;
 
   /**
    * Cached driver.
@@ -122,25 +122,22 @@ public class SqoopClient {
    * Clear internal cache.
    */
   public void clearCache() {
-    connectorConfigBundles = new HashMap<Long, ResourceBundle>();
+    connectorConfigBundles = new HashMap<String, ResourceBundle>();
     driverConfigBundle = null;
-    connectors = new HashMap<Long, MConnector>();
+    connectors = new HashMap<String, MConnector>();
     mDriver = null;
     isAllConnectors = false;
   }
 
   /**
    * Get connector with given id.
+   * TODO: This method should be removed when MJob link with Connector by name.
    *
    * @param cid Connector id.
    * @return
    */
   public MConnector getConnector(long cid) {
-    if(connectors.containsKey(cid)) {
-      return connectors.get(cid).clone(false);
-    }
-    retrieveConnector(cid);
-    return connectors.get(cid).clone(false);
+    return retrieveConnector(Long.toString(cid));
   }
 
   /**
@@ -183,13 +180,17 @@ public class SqoopClient {
 
   /**
    * Retrieve connector structure from server and cache it.
+   * TODO: The method support both connector name/id, this should support name only when MJob link with Connector by name.
    *
-   * @param cid Connector id
+   * @param connectorIdentify Connector name/id
    */
-  private void retrieveConnector(long cid) {
-    ConnectorBean request = resourceRequests.readConnector(cid);
-    connectors.put(cid, request.getConnectors().get(0));
-    connectorConfigBundles.put(cid, request.getResourceBundles().get(cid));
+  private MConnector retrieveConnector(String connectorIdentify) {
+    ConnectorBean request = resourceRequests.readConnector(connectorIdentify);
+    MConnector mConnector = request.getConnectors().get(0);
+    String connectorName = mConnector.getUniqueName();
+    connectors.put(connectorName, mConnector);
+    connectorConfigBundles.put(connectorName, request.getResourceBundles().get(connectorName));
+    return mConnector;
   }
 
   /**
@@ -205,7 +206,7 @@ public class SqoopClient {
     ConnectorBean bean = resourceRequests.readConnector(null);
     isAllConnectors = true;
     for(MConnector connector : bean.getConnectors()) {
-      connectors.put(connector.getPersistenceId(), connector);
+      connectors.put(connector.getUniqueName(), connector);
     }
     connectorConfigBundles = bean.getResourceBundles();
 
@@ -218,12 +219,12 @@ public class SqoopClient {
    * @param connectorId Connector id.
    * @return
    */
-  public ResourceBundle getConnectorConfigBundle(long connectorId) {
-    if(connectorConfigBundles.containsKey(connectorId)) {
-      return connectorConfigBundles.get(connectorId);
+  public ResourceBundle getConnectorConfigBundle(String connectorName) {
+    if(connectorConfigBundles.containsKey(connectorName)) {
+      return connectorConfigBundles.get(connectorName);
     }
-    retrieveConnector(connectorId);
-    return connectorConfigBundles.get(connectorId);
+    retrieveConnector(connectorName);
+    return connectorConfigBundles.get(connectorName);
   }
 
   /**
@@ -276,16 +277,6 @@ public class SqoopClient {
   }
 
   /**
-   * Create new link object for given connector id
-   *
-   * @param connectorId Connector id
-   * @return
-   */
-  public MLink createLink(long connectorId) {
-    return new MLink(connectorId, getConnector(connectorId).getLinkConfig());
-  }
-
-  /**
    * Create new link object for given connector name
    *
    * @param connectorName Connector name
@@ -296,7 +287,7 @@ public class SqoopClient {
     if (connector == null) {
       throw new SqoopException(ClientError.CLIENT_0003, connectorName);
     }
-    return createLink(connector.getPersistenceId());
+    return new MLink(connectorName, getConnector(connectorName).getLinkConfig());
   }
 
 
@@ -398,41 +389,21 @@ public class SqoopClient {
   public MJob createJob(String fromLinkName, String toLinkName) {
     MLink fromLink = getLink(fromLinkName);
     MLink toLink = getLink(toLinkName);
+    MConnector connectorForFromLink = getConnector(fromLink.getConnectorName());
+    MConnector connectorForToLink = getConnector(toLink.getConnectorName());
 
     return new MJob(
-      fromLink.getConnectorId(),
-      toLink.getConnectorId(),
+      connectorForFromLink.getPersistenceId(),
+      connectorForToLink.getPersistenceId(),
       fromLink.getPersistenceId(),
       toLink.getPersistenceId(),
-      getConnector(fromLink.getConnectorId()).getFromConfig(),
-      getConnector(toLink.getConnectorId()).getToConfig(),
+      connectorForFromLink.getFromConfig().clone(false),
+      connectorForToLink.getToConfig().clone(false),
       getDriverConfig()
     );
   }
 
   /**
-   * Create new job the for given links.
-   *
-   * @param fromLinkId From link id
-   * @param toLinkId To link id
-   * @return
-   */
-  public MJob createJob(long fromLinkId, long toLinkId) {
-    MLink fromLink = getLink(fromLinkId);
-    MLink toLink = getLink(toLinkId);
-
-    return new MJob(
-            fromLink.getConnectorId(),
-            toLink.getConnectorId(),
-            fromLink.getPersistenceId(),
-            toLink.getPersistenceId(),
-            getConnector(fromLink.getConnectorId()).getFromConfig(),
-            getConnector(toLink.getConnectorId()).getToConfig(),
-            getDriverConfig()
-    );
-  }
-
-  /**
    * Retrieve job for given id.
    *
    * @param jobId Job id

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/client/src/main/java/org/apache/sqoop/client/request/ConnectorResourceRequest.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/request/ConnectorResourceRequest.java b/client/src/main/java/org/apache/sqoop/client/request/ConnectorResourceRequest.java
index f23c6e4..953b23f 100644
--- a/client/src/main/java/org/apache/sqoop/client/request/ConnectorResourceRequest.java
+++ b/client/src/main/java/org/apache/sqoop/client/request/ConnectorResourceRequest.java
@@ -39,17 +39,17 @@ public class ConnectorResourceRequest extends ResourceRequest {
     super(token);
   }
 
-  public ConnectorBean read(String serverUrl, Long cid) {
+  public ConnectorBean read(String serverUrl, String connectorName) {
     String response;
-    if (cid == null) {
+    if (connectorName == null) {
       response = super.get(serverUrl + RESOURCE + "all");
     } else {
-      response = super.get(serverUrl + RESOURCE + cid);
+      response = super.get(serverUrl + RESOURCE + connectorName);
     }
     JSONObject jsonObject = JSONUtils.parse(response);
     // defaults to all
     ConnectorBean bean = new ConnectorsBean();
-    if (cid != null) {
+    if (connectorName != null) {
       bean = new ConnectorBean();
     }
     bean.restore(jsonObject);

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/client/src/main/java/org/apache/sqoop/client/request/SqoopResourceRequests.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/request/SqoopResourceRequests.java b/client/src/main/java/org/apache/sqoop/client/request/SqoopResourceRequests.java
index 0987703..810b913 100644
--- a/client/src/main/java/org/apache/sqoop/client/request/SqoopResourceRequests.java
+++ b/client/src/main/java/org/apache/sqoop/client/request/SqoopResourceRequests.java
@@ -114,8 +114,8 @@ public class SqoopResourceRequests {
     return getDriverResourceRequest().read(serverUrl);
   }
 
-  public ConnectorBean readConnector(Long cid) {
-    return getConnectorResourceRequest().read(serverUrl, cid);
+  public ConnectorBean readConnector(String connectorName) {
+    return getConnectorResourceRequest().read(serverUrl, connectorName);
   }
 
   public ValidationResultBean saveLink(MLink link) {

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/client/src/test/java/org/apache/sqoop/client/TestSqoopClient.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/sqoop/client/TestSqoopClient.java b/client/src/test/java/org/apache/sqoop/client/TestSqoopClient.java
index c962358..adf4eb5 100644
--- a/client/src/test/java/org/apache/sqoop/client/TestSqoopClient.java
+++ b/client/src/test/java/org/apache/sqoop/client/TestSqoopClient.java
@@ -66,26 +66,15 @@ public class TestSqoopClient {
    * not require additional HTTP request.
    */
   @Test
-  public void testGetConnector() {
-    when(resourceRequests.readConnector(1L)).thenReturn(connectorBean(connector(1)));
-    MConnector connector = client.getConnector(1);
-    assertEquals(1, connector.getPersistenceId());
-
-    client.getConnectorConfigBundle(1L);
-
-    verify(resourceRequests, times(1)).readConnector(1L);
-  }
-
-  @Test
   public void testGetConnectorByString() {
     when(resourceRequests.readConnector(null)).thenReturn(connectorBean(connector(1)));
     MConnector connector = client.getConnector("A1");
     assertEquals(1, connector.getPersistenceId());
     assertEquals("A1", connector.getUniqueName());
 
-    client.getConnectorConfigBundle(1L);
+    client.getConnectorConfigBundle("A1");
 
-    verify(resourceRequests, times(0)).readConnector(1L);
+    verify(resourceRequests, times(0)).readConnector("A1");
     verify(resourceRequests, times(1)).readConnector(null);
   }
 
@@ -95,13 +84,13 @@ public class TestSqoopClient {
    */
   @Test
   public void testGetConnectorBundle() {
-    when(resourceRequests.readConnector(1L)).thenReturn(connectorBean(connector(1)));
-    client.getConnectorConfigBundle(1L);
+    when(resourceRequests.readConnector("A1")).thenReturn(connectorBean(connector(1)));
+    client.getConnectorConfigBundle("A1");
 
-    MConnector connector = client.getConnector(1);
+    MConnector connector = client.getConnector("A1");
     assertEquals(1, connector.getPersistenceId());
 
-    verify(resourceRequests, times(1)).readConnector(1L);
+    verify(resourceRequests, times(1)).readConnector("A1");
   }
 
   /**
@@ -144,12 +133,12 @@ public class TestSqoopClient {
     Collection<MConnector> connectors = client.getConnectors();
     assertEquals(2, connectors.size());
 
-    client.getConnectorConfigBundle(1);
-    connector = client.getConnector(1);
+    client.getConnectorConfigBundle("A1");
+    connector = client.getConnector("A1");
     assertEquals(1, connector.getPersistenceId());
 
-    connector = client.getConnector(2);
-    client.getConnectorConfigBundle(2);
+    connector = client.getConnector("A2");
+    client.getConnectorConfigBundle("A2");
     assertEquals(2, connector.getPersistenceId());
 
     connectors = client.getConnectors();
@@ -179,21 +168,21 @@ public class TestSqoopClient {
   public void testGetConnectorOneByOne() {
     ConnectorBean bean = connectorBean(connector(1), connector(2));
     when(resourceRequests.readConnector(null)).thenReturn(bean);
-    when(resourceRequests.readConnector(1L)).thenReturn(bean);
-    when(resourceRequests.readConnector(2L)).thenReturn(bean);
+    when(resourceRequests.readConnector("A1")).thenReturn(bean);
+    when(resourceRequests.readConnector("A2")).thenReturn(bean);
 
-    client.getConnectorConfigBundle(1);
-    client.getConnector(1);
+    client.getConnectorConfigBundle("A1");
+    client.getConnector("A1");
 
-    client.getConnector(2);
-    client.getConnectorConfigBundle(2);
+    client.getConnector("A2");
+    client.getConnectorConfigBundle("A2");
 
     Collection<MConnector> connectors = client.getConnectors();
     assertEquals(2, connectors.size());
 
     verify(resourceRequests, times(1)).readConnector(null);
-    verify(resourceRequests, times(1)).readConnector(1L);
-    verify(resourceRequests, times(1)).readConnector(2L);
+    verify(resourceRequests, times(1)).readConnector("A1");
+    verify(resourceRequests, times(0)).readConnector("A2");
     verifyNoMoreInteractions(resourceRequests);
   }
 
@@ -208,11 +197,11 @@ public class TestSqoopClient {
 
   private ConnectorBean connectorBean(MConnector...connectors) {
     List<MConnector> connectorList = new ArrayList<MConnector>();
-    Map<Long, ResourceBundle> bundles = new HashMap<Long, ResourceBundle>();
+    Map<String, ResourceBundle> bundles = new HashMap<String, ResourceBundle>();
 
     for(MConnector connector : connectors) {
       connectorList.add(connector);
-      bundles.put(connector.getPersistenceId(), null);
+      bundles.put(connector.getUniqueName(), null);
     }
     return new ConnectorBean(connectorList, bundles);
   }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/common/src/main/java/org/apache/sqoop/json/ConnectorBean.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/json/ConnectorBean.java b/common/src/main/java/org/apache/sqoop/json/ConnectorBean.java
index 89ae20c..b50fa69 100644
--- a/common/src/main/java/org/apache/sqoop/json/ConnectorBean.java
+++ b/common/src/main/java/org/apache/sqoop/json/ConnectorBean.java
@@ -57,10 +57,10 @@ public class ConnectorBean extends ConfigurableBean {
   private static final String CONNECTOR = "connector";
 
   private List<MConnector> connectors;
-  private Map<Long, ResourceBundle> connectorConfigBundles;
+  private Map<String, ResourceBundle> connectorConfigBundles;
 
   // for "extract"
-  public ConnectorBean(List<MConnector> connectors, Map<Long, ResourceBundle> bundles) {
+  public ConnectorBean(List<MConnector> connectors, Map<String, ResourceBundle> bundles) {
     this.connectors = connectors;
     this.connectorConfigBundles = bundles;
   }
@@ -73,7 +73,7 @@ public class ConnectorBean extends ConfigurableBean {
     return connectors;
   }
 
-  public Map<Long, ResourceBundle> getResourceBundles() {
+  public Map<String, ResourceBundle> getResourceBundles() {
     return connectorConfigBundles;
   }
 
@@ -121,7 +121,7 @@ public class ConnectorBean extends ConfigurableBean {
     connectorJsonObject.put(ALL_CONFIGS, new JSONObject());
     if (connectorConfigBundles != null && !connectorConfigBundles.isEmpty()) {
       connectorJsonObject.put(ALL_CONFIGS,
-          extractConfigParamBundle(connectorConfigBundles.get(connector.getPersistenceId())));
+          extractConfigParamBundle(connectorConfigBundles.get(connector.getUniqueName())));
     }
     return connectorJsonObject;
   }
@@ -129,14 +129,14 @@ public class ConnectorBean extends ConfigurableBean {
   @Override
   public void restore(JSONObject jsonObject) {
     connectors = new ArrayList<MConnector>();
-    connectorConfigBundles = new HashMap<Long, ResourceBundle>();
+    connectorConfigBundles = new HashMap<String, ResourceBundle>();
     JSONObject obj = JSONUtils.getJSONObject(jsonObject, CONNECTOR);
     connectors.add(restoreConnector(obj));
   }
 
   protected void restoreConnectors(JSONArray array) {
     connectors = new ArrayList<MConnector>();
-    connectorConfigBundles = new HashMap<Long, ResourceBundle>();
+    connectorConfigBundles = new HashMap<String, ResourceBundle>();
     for (Object obj : array) {
       connectors.add(restoreConnector(obj));
     }
@@ -178,7 +178,7 @@ public class ConnectorBean extends ConfigurableBean {
     connector.setPersistenceId(connectorId);
     if (object.containsKey(ALL_CONFIGS)) {
       JSONObject jsonConfigBundle = JSONUtils.getJSONObject(object, ALL_CONFIGS);
-      connectorConfigBundles.put(connectorId, restoreConfigParamBundle(jsonConfigBundle));
+      connectorConfigBundles.put(uniqueName, restoreConfigParamBundle(jsonConfigBundle));
     }
     return connector;
   }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/common/src/main/java/org/apache/sqoop/json/ConnectorsBean.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/json/ConnectorsBean.java b/common/src/main/java/org/apache/sqoop/json/ConnectorsBean.java
index 9762ffa..c31e52b 100644
--- a/common/src/main/java/org/apache/sqoop/json/ConnectorsBean.java
+++ b/common/src/main/java/org/apache/sqoop/json/ConnectorsBean.java
@@ -39,7 +39,7 @@ public class ConnectorsBean extends ConnectorBean {
   private static final String CONNECTORS = "connectors";
 
   // for "extract"
-  public ConnectorsBean(List<MConnector> connectors, Map<Long, ResourceBundle> bundles) {
+  public ConnectorsBean(List<MConnector> connectors, Map<String, ResourceBundle> bundles) {
     super(connectors, bundles);
   }
 

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/common/src/main/java/org/apache/sqoop/json/LinkBean.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/json/LinkBean.java b/common/src/main/java/org/apache/sqoop/json/LinkBean.java
index c9a8ab3..8ce8b2b 100644
--- a/common/src/main/java/org/apache/sqoop/json/LinkBean.java
+++ b/common/src/main/java/org/apache/sqoop/json/LinkBean.java
@@ -47,7 +47,7 @@ import org.json.simple.JSONObject;
 @InterfaceStability.Unstable
 public class LinkBean implements JsonBean {
 
-  static final String CONNECTOR_ID = "connector-id";
+  static final String CONNECTOR_NAME = "connector-name";
   static final String LINK_CONFIG_VALUES = "link-config-values";
   static final String LINK = "link";
 
@@ -57,7 +57,7 @@ public class LinkBean implements JsonBean {
   private List<MLink> links;
 
   // Optional
-  private Map<Long, ResourceBundle> linkConfigBundles;
+  private Map<String, ResourceBundle> linkConfigBundles;
 
   // For "extract"
   public LinkBean(MLink link) {
@@ -73,23 +73,23 @@ public class LinkBean implements JsonBean {
 
   // For "restore"
   public LinkBean() {
-    linkConfigBundles = new HashMap<Long, ResourceBundle>();
+    linkConfigBundles = new HashMap<String, ResourceBundle>();
   }
 
-  public void addConnectorConfigBundle(Long id, ResourceBundle connectorConfigBundle) {
-    linkConfigBundles.put(id, connectorConfigBundle);
+  public void addConnectorConfigBundle(String connectorName, ResourceBundle connectorConfigBundle) {
+    linkConfigBundles.put(connectorName, connectorConfigBundle);
   }
 
-  public boolean hasConnectorConfigBundle(Long id) {
-    return linkConfigBundles.containsKey(id);
+  public boolean hasConnectorConfigBundle(String connectorName) {
+    return linkConfigBundles.containsKey(connectorName);
   }
 
   public List<MLink> getLinks() {
     return links;
   }
 
-  public ResourceBundle getConnectorConfigBundle(Long id) {
-    return linkConfigBundles.get(id);
+  public ResourceBundle getConnectorConfigBundle(String connectorName) {
+    return linkConfigBundles.get(connectorName);
   }
 
   @SuppressWarnings("unchecked")
@@ -119,7 +119,7 @@ public class LinkBean implements JsonBean {
     linkJsonObject.put(CREATION_DATE, link.getCreationDate().getTime());
     linkJsonObject.put(UPDATE_USER, link.getLastUpdateUser());
     linkJsonObject.put(UPDATE_DATE, link.getLastUpdateDate().getTime());
-    linkJsonObject.put(CONNECTOR_ID, link.getConnectorId());
+    linkJsonObject.put(CONNECTOR_NAME, link.getConnectorName());
     linkJsonObject.put(LINK_CONFIG_VALUES,
       extractConfigList(link.getConnectorLinkConfig(), skipSensitive));
     return linkJsonObject;
@@ -141,11 +141,11 @@ public class LinkBean implements JsonBean {
 
   private MLink restoreLink(Object obj) {
     JSONObject object = (JSONObject) obj;
-    long connectorId = JSONUtils.getLong(object, CONNECTOR_ID);
+    String connectorName = (String) object.get(CONNECTOR_NAME);
     JSONObject connectorLinkConfig = JSONUtils.getJSONObject(object, LINK_CONFIG_VALUES);
     List<MConfig> linkConfigs = restoreConfigs(JSONUtils.getJSONArray(connectorLinkConfig, ConfigInputConstants.CONFIGS));
     List<MValidator> linkValidators = restoreValidator(JSONUtils.getJSONArray(connectorLinkConfig, ConfigInputConstants.CONFIG_VALIDATORS));
-    MLink link = new MLink(connectorId, new MLinkConfig(linkConfigs, linkValidators));
+    MLink link = new MLink(connectorName, new MLinkConfig(linkConfigs, linkValidators));
     link.setPersistenceId(JSONUtils.getLong(object, ID));
     link.setName(JSONUtils.getString(object, NAME));
     link.setEnabled(JSONUtils.getBoolean(object, ENABLED));

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/common/src/main/java/org/apache/sqoop/model/MLink.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/model/MLink.java b/common/src/main/java/org/apache/sqoop/model/MLink.java
index 51a4008..4275242 100644
--- a/common/src/main/java/org/apache/sqoop/model/MLink.java
+++ b/common/src/main/java/org/apache/sqoop/model/MLink.java
@@ -26,7 +26,7 @@ import org.apache.sqoop.classification.InterfaceStability;
 @InterfaceAudience.Public
 @InterfaceStability.Unstable
 public class MLink extends MAccountableEntity implements MClonable {
-  private long connectorId;
+  private String connectorName;
   // NOTE: we hold this in the model for easy access to the link config object, it might as well be retrieved on the fly using the connectorId
   private final MLinkConfig connectorLinkConfig;
 
@@ -36,8 +36,8 @@ public class MLink extends MAccountableEntity implements MClonable {
    * @param connectorId Connector id
    * @param linkConfig Connector forms
    */
-  public MLink(long connectorId, MLinkConfig linkConfig) {
-    this.connectorId = connectorId;
+  public MLink(String connectorName, MLinkConfig linkConfig) {
+    this.connectorName = connectorName;
     this.connectorLinkConfig = linkConfig;
   }
 
@@ -61,7 +61,7 @@ public class MLink extends MAccountableEntity implements MClonable {
    */
   public MLink(MLink other, MLinkConfig linkConfig) {
     super(other);
-    this.connectorId = other.connectorId;
+    this.connectorName = other.connectorName;
     this.connectorLinkConfig = linkConfig;
     this.setPersistenceId(other.getPersistenceId());
   }
@@ -74,8 +74,8 @@ public class MLink extends MAccountableEntity implements MClonable {
     return sb.toString();
   }
 
-  public long getConnectorId() {
-    return connectorId;
+  public String getConnectorName() {
+    return connectorName;
   }
 
   public MLinkConfig getConnectorLinkConfig() {
@@ -90,7 +90,7 @@ public class MLink extends MAccountableEntity implements MClonable {
     if(cloneWithValue) {
       return new MLink(this);
     } else {
-      return new MLink(connectorId, connectorLinkConfig.clone(false));
+      return new MLink(connectorName, connectorLinkConfig.clone(false));
     }
   }
 
@@ -105,14 +105,14 @@ public class MLink extends MAccountableEntity implements MClonable {
     }
 
     MLink mLink = (MLink)object;
-    return (mLink.connectorId == this.connectorId)
+    return (mLink.connectorName.equals(this.connectorName))
         && (mLink.getPersistenceId() == this.getPersistenceId())
         && (mLink.connectorLinkConfig.equals(this.connectorLinkConfig));
     }
 
   @Override
   public int hashCode() {
-    int result = (int) (connectorId ^ (connectorId >>> 32));
+    int result = connectorName != null ? connectorName.hashCode() : 0;
     result = 31 * result + (connectorLinkConfig != null ? connectorLinkConfig.hashCode() : 0);
     return result;
   }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/common/src/test/java/org/apache/sqoop/json/TestConnectorBean.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/sqoop/json/TestConnectorBean.java b/common/src/test/java/org/apache/sqoop/json/TestConnectorBean.java
index a978d62..f487bba 100644
--- a/common/src/test/java/org/apache/sqoop/json/TestConnectorBean.java
+++ b/common/src/test/java/org/apache/sqoop/json/TestConnectorBean.java
@@ -45,8 +45,8 @@ public class TestConnectorBean {
     connectors.add(BeanTestUtil.getConnector(1L, "jdbc"));
 
     // Create testing bundles
-    Map<Long, ResourceBundle> configBundles = new HashMap<Long, ResourceBundle>();
-    configBundles.put(1L, ConfigTestUtil.getResourceBundle());
+    Map<String, ResourceBundle> configBundles = new HashMap<String, ResourceBundle>();
+    configBundles.put("jdbc", ConfigTestUtil.getResourceBundle());
 
     // Serialize it to JSON object
     ConnectorBean connectorBean = new ConnectorBean(connectors, configBundles);
@@ -62,7 +62,7 @@ public class TestConnectorBean {
     assertEquals(connectors.size(), 1);
     assertEquals(connectors.size(), parsedConnectorBean.getConnectors().size());
     assertEquals(connectors.get(0), parsedConnectorBean.getConnectors().get(0));
-    ResourceBundle retrievedBundle = parsedConnectorBean.getResourceBundles().get(1L);
+    ResourceBundle retrievedBundle = parsedConnectorBean.getResourceBundles().get("jdbc");
     assertNotNull(retrievedBundle);
     assertEquals("a", retrievedBundle.getString("a"));
     assertEquals("b", retrievedBundle.getString("b"));

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/common/src/test/java/org/apache/sqoop/json/TestConnectorsBean.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/sqoop/json/TestConnectorsBean.java b/common/src/test/java/org/apache/sqoop/json/TestConnectorsBean.java
index 15377c9..ed036fb 100644
--- a/common/src/test/java/org/apache/sqoop/json/TestConnectorsBean.java
+++ b/common/src/test/java/org/apache/sqoop/json/TestConnectorsBean.java
@@ -42,9 +42,9 @@ public class TestConnectorsBean {
     connectors.add(BeanTestUtil.getConnector(2L, "mysql"));
 
     // Create testing bundles
-    Map<Long, ResourceBundle> configBundles = new HashMap<Long, ResourceBundle>();
-    configBundles.put(1L, ConfigTestUtil.getResourceBundle());
-    configBundles.put(2L, ConfigTestUtil.getResourceBundle());
+    Map<String, ResourceBundle> configBundles = new HashMap<String, ResourceBundle>();
+    configBundles.put("jdbc", ConfigTestUtil.getResourceBundle());
+    configBundles.put("mysql", ConfigTestUtil.getResourceBundle());
 
     // Serialize it to JSON object
     ConnectorsBean connectorsBean = new ConnectorsBean(connectors, configBundles);
@@ -62,7 +62,7 @@ public class TestConnectorsBean {
     assertEquals(connectors.get(0), parsedConnectorsBean.getConnectors().get(0));
     assertEquals(connectors.get(1), parsedConnectorsBean.getConnectors().get(1));
 
-    ResourceBundle retrievedBundle = parsedConnectorsBean.getResourceBundles().get(1L);
+    ResourceBundle retrievedBundle = parsedConnectorsBean.getResourceBundles().get("jdbc");
     assertNotNull(retrievedBundle);
     assertEquals("a", retrievedBundle.getString("a"));
     assertEquals("b", retrievedBundle.getString("b"));
@@ -76,9 +76,9 @@ public class TestConnectorsBean {
     connectors.add(BeanTestUtil.getConnector(2L, "mysql", false, true));
 
     // Create testing bundles
-    Map<Long, ResourceBundle> bundles = new HashMap<Long, ResourceBundle>();
-    bundles.put(1L, ConfigTestUtil.getResourceBundle());
-    bundles.put(2L, ConfigTestUtil.getResourceBundle());
+    Map<String, ResourceBundle> bundles = new HashMap<String, ResourceBundle>();
+    bundles.put("jdbc", ConfigTestUtil.getResourceBundle());
+    bundles.put("mysql", ConfigTestUtil.getResourceBundle());
 
     // Serialize it to JSON object
     ConnectorsBean bean = new ConnectorsBean(connectors, bundles);
@@ -105,9 +105,9 @@ public class TestConnectorsBean {
     connectors.add(BeanTestUtil.getConnector(2L, "mysql", false, false));
 
     // Create testing bundles
-    Map<Long, ResourceBundle> bundles = new HashMap<Long, ResourceBundle>();
-    bundles.put(1L, ConfigTestUtil.getResourceBundle());
-    bundles.put(2L, ConfigTestUtil.getResourceBundle());
+    Map<String, ResourceBundle> bundles = new HashMap<String, ResourceBundle>();
+    bundles.put("jdbc", ConfigTestUtil.getResourceBundle());
+    bundles.put("mysql", ConfigTestUtil.getResourceBundle());
 
     // Serialize it to JSON object
     ConnectorsBean bean = new ConnectorsBean(connectors, bundles);

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/common/src/test/java/org/apache/sqoop/json/util/BeanTestUtil.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/sqoop/json/util/BeanTestUtil.java b/common/src/test/java/org/apache/sqoop/json/util/BeanTestUtil.java
index 51ab0e5..13774c8 100644
--- a/common/src/test/java/org/apache/sqoop/json/util/BeanTestUtil.java
+++ b/common/src/test/java/org/apache/sqoop/json/util/BeanTestUtil.java
@@ -52,7 +52,7 @@ public class BeanTestUtil {
   }
 
   public static MLink getLink(String connectorName) {
-    return new MLink(1, getConnector(1L, connectorName).getLinkConfig());
+    return new MLink(connectorName, getConnector(1L, connectorName).getLinkConfig());
   }
 
   public static MConnector getConnector(Long connectorId, String connectorName) {

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/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 5bf2465..ae54ff5 100644
--- a/common/src/test/java/org/apache/sqoop/model/TestMAccountableEntity.java
+++ b/common/src/test/java/org/apache/sqoop/model/TestMAccountableEntity.java
@@ -51,7 +51,7 @@ public class TestMAccountableEntity {
     MValidator validator = new MValidator("test", "");
     validators.add(validator);
 
-    MAccountableEntity link = new MLink(123l, new MLinkConfig(configs, validators));
+    MAccountableEntity link = new MLink("connector_test", new MLinkConfig(configs, validators));
     // Initially creation date and last update date is same
     assertEquals(link.getCreationDate(), link.getLastUpdateDate());
     Date testCreationDate = new Date();

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/common/src/test/java/org/apache/sqoop/model/TestMLink.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/sqoop/model/TestMLink.java b/common/src/test/java/org/apache/sqoop/model/TestMLink.java
index b5df18a..aace78a 100644
--- a/common/src/test/java/org/apache/sqoop/model/TestMLink.java
+++ b/common/src/test/java/org/apache/sqoop/model/TestMLink.java
@@ -35,14 +35,14 @@ public class TestMLink {
   public void testInitialization() {
     // Test default constructor
     MLink link = link();
-    assertEquals(123l, link.getConnectorId());
+    assertEquals("connector_test", link.getConnectorName());
     assertEquals("Vampire", link.getName());
     assertEquals("Buffy", link.getCreationUser());
     assertEquals(linkConfig(), link.getConnectorLinkConfig());
 
     // Test copy constructor
     MLink copy = new MLink(link);
-    assertEquals(123l, copy.getConnectorId());
+    assertEquals("connector_test", copy.getConnectorName());
     assertEquals("Vampire", copy.getName());
     assertEquals("Buffy", copy.getCreationUser());
     assertEquals(link.getCreationDate(), copy.getCreationDate());
@@ -75,7 +75,7 @@ public class TestMLink {
   }
 
   private MLink link() {
-    MLink link = new MLink(123l, linkConfig());
+    MLink link = new MLink("connector_test", linkConfig());
     link.setName("Vampire");
     link.setCreationUser("Buffy");
     return link;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/core/src/main/java/org/apache/sqoop/connector/ConnectorManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/sqoop/connector/ConnectorManager.java b/core/src/main/java/org/apache/sqoop/connector/ConnectorManager.java
index db626a1..f19f391 100644
--- a/core/src/main/java/org/apache/sqoop/connector/ConnectorManager.java
+++ b/core/src/main/java/org/apache/sqoop/connector/ConnectorManager.java
@@ -117,12 +117,12 @@ public class ConnectorManager implements Reconfigurable {
     return idToNameMap.keySet();
   }
 
-  public Map<Long, ResourceBundle> getResourceBundles(Locale locale) {
-    Map<Long, ResourceBundle> bundles = new HashMap<Long, ResourceBundle>();
+  public Map<String, ResourceBundle> getResourceBundles(Locale locale) {
+    Map<String, ResourceBundle> bundles = new HashMap<String, ResourceBundle>();
     for (ConnectorHandler handler : handlerMap.values()) {
-      long id = handler.getConnectorConfigurable().getPersistenceId();
+      String connectorName = handler.getConnectorConfigurable().getUniqueName();
       ResourceBundle bundle = handler.getSqoopConnector().getBundle(locale);
-      bundles.put(id, bundle);
+      bundles.put(connectorName, bundle);
     }
     return bundles;
   }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/core/src/main/java/org/apache/sqoop/driver/JobManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/sqoop/driver/JobManager.java b/core/src/main/java/org/apache/sqoop/driver/JobManager.java
index 90ee541..35c4451 100644
--- a/core/src/main/java/org/apache/sqoop/driver/JobManager.java
+++ b/core/src/main/java/org/apache/sqoop/driver/JobManager.java
@@ -339,22 +339,22 @@ public class JobManager implements Reconfigurable {
 
   private JobRequest createJobRequest(MSubmission submission, MJob job) {
     // get from/to connections for the job
-    MLink fromConnection = getLink(job.getFromLinkId());
-    MLink toConnection = getLink(job.getToLinkId());
+    MLink fromLink = getLink(job.getFromLinkId());
+    MLink toLink = getLink(job.getToLinkId());
 
     // get from/to connectors for the connection
-    SqoopConnector fromConnector = getSqoopConnector(fromConnection.getConnectorId());
+    SqoopConnector fromConnector = getSqoopConnector(fromLink.getConnectorName());
     validateSupportedDirection(fromConnector, Direction.FROM);
-    SqoopConnector toConnector = getSqoopConnector(toConnection.getConnectorId());
+    SqoopConnector toConnector = getSqoopConnector(toLink.getConnectorName());
     validateSupportedDirection(toConnector, Direction.TO);
 
     // link config for the FROM part of the job
     Object fromLinkConfig = ClassUtils.instantiate(fromConnector.getLinkConfigurationClass());
-    ConfigUtils.fromConfigs(fromConnection.getConnectorLinkConfig().getConfigs(), fromLinkConfig);
+    ConfigUtils.fromConfigs(fromLink.getConnectorLinkConfig().getConfigs(), fromLinkConfig);
 
     // link config for the TO part of the job
     Object toLinkConfig = ClassUtils.instantiate(toConnector.getLinkConfigurationClass());
-    ConfigUtils.fromConfigs(toConnection.getConnectorLinkConfig().getConfigs(), toLinkConfig);
+    ConfigUtils.fromConfigs(toLink.getConnectorLinkConfig().getConfigs(), toLinkConfig);
 
     // from config for the job
     Object fromJob = ClassUtils.instantiate(fromConnector.getJobConfigurationClass(Direction.FROM));
@@ -470,7 +470,11 @@ public class JobManager implements Reconfigurable {
     return summary;
   }
 
-  SqoopConnector getSqoopConnector(long connnectorId) {
+  SqoopConnector getSqoopConnector(String connnectorName) {
+    return ConnectorManager.getInstance().getSqoopConnector(connnectorName);
+  }
+
+  SqoopConnector getSqoopConnector(Long connnectorId) {
     return ConnectorManager.getInstance().getSqoopConnector(connnectorId);
   }
 

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/core/src/test/java/org/apache/sqoop/driver/TestJobManager.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/sqoop/driver/TestJobManager.java b/core/src/test/java/org/apache/sqoop/driver/TestJobManager.java
index f137eef..3b200e9 100644
--- a/core/src/test/java/org/apache/sqoop/driver/TestJobManager.java
+++ b/core/src/test/java/org/apache/sqoop/driver/TestJobManager.java
@@ -109,7 +109,7 @@ public class TestJobManager {
 
   @Test
   public void testGetLink() {
-    MLink testLink = new MLink(123l, null);
+    MLink testLink = new MLink("connector_test", null);
     testLink.setEnabled(true);
     MLink mConnectionSpy = org.mockito.Mockito.spy(testLink);
     when(repositoryManagerMock.getRepository()).thenReturn(jdbcRepoMock);
@@ -121,7 +121,7 @@ public class TestJobManager {
 
   @Test
   public void testDisabledLink() {
-    MLink testConnection = new MLink(123l, null);
+    MLink testConnection = new MLink("connector_test", null);
     testConnection.setPersistenceId(1234);
     testConnection.setEnabled(false);
     SqoopException exception = new SqoopException(DriverError.DRIVER_0010, "Connection: "

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/core/src/test/java/org/apache/sqoop/repository/TestJdbcRepository.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/sqoop/repository/TestJdbcRepository.java b/core/src/test/java/org/apache/sqoop/repository/TestJdbcRepository.java
index 00b0511..a665fd1 100644
--- a/core/src/test/java/org/apache/sqoop/repository/TestJdbcRepository.java
+++ b/core/src/test/java/org/apache/sqoop/repository/TestJdbcRepository.java
@@ -228,7 +228,7 @@ public class TestJdbcRepository {
 
     // prepare the links and jobs
     // the connector Id for both are the same
-    List<MLink> linkList = links(link(1, "LA", 1), link(2, "LB", 1));
+    List<MLink> linkList = links(link(1, "LA", oldConnector.getUniqueName()), link(2, "LB", oldConnector.getUniqueName()));
     List<MJob> jobList = jobs(job(1, "JA", 1, 1, 1, 1), job(2, "JB", 1, 1, 2, 2));
 
     // mock necessary methods for upgradeConnector() procedure
@@ -390,7 +390,7 @@ public class TestJdbcRepository {
     when(sqconnector.getConfigurableUpgrader(oldConnector.getVersion())).thenReturn(connectorUpgraderMock);
     when(connectorMgrMock.getSqoopConnector(anyString())).thenReturn(sqconnector);
 
-    List<MLink> linkList = links(link(1, "LA", 1), link(2, "LB", 1));
+    List<MLink> linkList = links(link(1, "LA", oldConnector.getUniqueName()), link(2, "LB", oldConnector.getUniqueName()));
     doReturn(linkList).when(repoHandlerMock).findLinksForConnectorUpgrade(anyString(), any(Connection.class));
 
     SqoopException exception = new SqoopException(RepositoryError.JDBCREPO_0000,
@@ -424,7 +424,7 @@ public class TestJdbcRepository {
     when(sqconnector.getConfigurableUpgrader(oldConnector.getVersion())).thenReturn(connectorUpgraderMock);
     when(connectorMgrMock.getSqoopConnector(anyString())).thenReturn(sqconnector);
 
-    List<MLink> linkList = links(link(1, "LA", 1), link(2, "LB", 1));
+    List<MLink> linkList = links(link(1, "LA", oldConnector.getUniqueName()), link(2, "LB", oldConnector.getUniqueName()));
     List<MJob> jobList = jobs(job(1, "JA", 1, 1, 1, 1), job(2, "JB", 1, 1, 2, 1));
     doReturn(linkList).when(repoHandlerMock).findLinksForConnectorUpgrade(anyString(), any(Connection.class));
     doReturn(jobList).when(repoHandlerMock).findJobsForConnectorUpgrade
@@ -462,7 +462,7 @@ public class TestJdbcRepository {
     when(sqconnector.getConfigurableUpgrader(oldConnector.getVersion())).thenReturn(connectorUpgraderMock);
     when(connectorMgrMock.getSqoopConnector(anyString())).thenReturn(sqconnector);
 
-    List<MLink> linkList = links(link(1, "LA", 1), link(2, "LB", 1));
+    List<MLink> linkList = links(link(1, "LA", oldConnector.getUniqueName()), link(2, "LB", oldConnector.getUniqueName()));
     List<MJob> jobList = jobs(job(1, "JA", 1, 1, 1, 1), job(2, "JB", 1, 1, 2, 1));
     doReturn(linkList).when(repoHandlerMock).findLinksForConnectorUpgrade(anyString(), any(Connection.class));
     doReturn(jobList).when(repoHandlerMock).findJobsForConnectorUpgrade(anyLong(), any(Connection.class));
@@ -500,7 +500,7 @@ public class TestJdbcRepository {
     when(sqconnector.getConfigurableUpgrader(oldConnector.getVersion())).thenReturn(connectorUpgraderMock);
     when(connectorMgrMock.getSqoopConnector(anyString())).thenReturn(sqconnector);
 
-    List<MLink> linkList = links(link(1, "LA", 1), link(2, "LB", 1));
+    List<MLink> linkList = links(link(1, "LA", oldConnector.getUniqueName()), link(2, "LB", oldConnector.getUniqueName()));
     List<MJob> jobList = jobs(job(1, "JA", 1, 1, 1, 1), job(2, "JB", 1, 1, 2, 1));
     doReturn(linkList).when(repoHandlerMock).findLinksForConnectorUpgrade(anyString(), any(Connection.class));
     doReturn(jobList).when(repoHandlerMock).findJobsForConnectorUpgrade(anyLong(), any(Connection.class));
@@ -542,7 +542,7 @@ public class TestJdbcRepository {
     when(sqconnector.getJobConfigurationClass(any(Direction.class))).thenReturn(ValidConfiguration.class);
     when(connectorMgrMock.getSqoopConnector(anyString())).thenReturn(sqconnector);
 
-    List<MLink> linkList = links(link(1, "LA", 1), link(2, "LB", 1));
+    List<MLink> linkList = links(link(1, "LA", oldConnector.getUniqueName()), link(2, "LB", oldConnector.getUniqueName()));
     List<MJob> jobList = jobs(job(1, "JA", 1, 1, 1, 1), job(2, "JB", 1, 1, 2, 1));
     doReturn(linkList).when(repoHandlerMock).findLinksForConnectorUpgrade(anyString(), any(Connection.class));
     doReturn(jobList).when(repoHandlerMock).findJobsForConnectorUpgrade(anyLong(), any(Connection.class));
@@ -588,7 +588,7 @@ public class TestJdbcRepository {
     when(sqconnector.getJobConfigurationClass(any(Direction.class))).thenReturn(ValidConfiguration.class);
     when(connectorMgrMock.getSqoopConnector(anyString())).thenReturn(sqconnector);
 
-    List<MLink> linkList = links(link(1, "LA", 1), link(2, "LB", 1));;
+    List<MLink> linkList = links(link(1, "LA", oldConnector.getUniqueName()), link(2, "LB", oldConnector.getUniqueName()));;
     List<MJob> jobList = jobs(job(1, "JA", 1, 1, 1, 1), job(2, "JB", 1, 1, 2, 1));
     doReturn(linkList).when(repoHandlerMock).findLinksForConnectorUpgrade(anyString(), any(Connection.class));
     doReturn(jobList).when(repoHandlerMock).findJobsForConnectorUpgrade(anyLong(), any(Connection.class));
@@ -775,8 +775,8 @@ public class TestJdbcRepository {
     return driver;
   }
 
-  private MLink link(long linkId, String linkName, long connectorId) {
-    MLink link = new MLink(connectorId, new MLinkConfig(new LinkedList<MConfig>(), new LinkedList<MValidator>()));
+  private MLink link(long linkId, String linkName, String connectorName) {
+    MLink link = new MLink(connectorName, new MLinkConfig(new LinkedList<MConfig>(), new LinkedList<MValidator>()));
     link.setPersistenceId(linkId);
     link.setName(linkName);
     return link;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/repository/repository-common/src/main/java/org/apache/sqoop/repository/common/CommonRepositoryHandler.java
----------------------------------------------------------------------
diff --git a/repository/repository-common/src/main/java/org/apache/sqoop/repository/common/CommonRepositoryHandler.java b/repository/repository-common/src/main/java/org/apache/sqoop/repository/common/CommonRepositoryHandler.java
index d1ee320..586ef12 100644
--- a/repository/repository-common/src/main/java/org/apache/sqoop/repository/common/CommonRepositoryHandler.java
+++ b/repository/repository-common/src/main/java/org/apache/sqoop/repository/common/CommonRepositoryHandler.java
@@ -371,11 +371,13 @@ public abstract class CommonRepositoryHandler extends JdbcRepositoryHandler {
   @Override
   public void createLink(MLink link, Connection conn) {
     int result;
+    MConnector mConnector;
     try (PreparedStatement stmt = conn.prepareStatement(crudQueries.getStmtInsertLink(),
           Statement.RETURN_GENERATED_KEYS)) {
 
       stmt.setString(1, link.getName());
-      stmt.setLong(2, link.getConnectorId());
+      mConnector = findConnector(link.getConnectorName(), conn);
+      stmt.setLong(2, mConnector.getPersistenceId());
       stmt.setBoolean(3, link.getEnabled());
       stmt.setString(4, link.getCreationUser());
       stmt.setTimestamp(5, new Timestamp(link.getCreationDate().getTime()));
@@ -1515,7 +1517,6 @@ public abstract class CommonRepositoryHandler extends JdbcRepositoryHandler {
     try (ResultSet rsConnection = stmt.executeQuery();
          PreparedStatement connectorConfigFetchStatement = conn.prepareStatement(crudQueries.getStmtSelectConfigForConfigurable());
          PreparedStatement connectorConfigInputStatement = conn.prepareStatement(crudQueries.getStmtFetchLinkInput());) {
-
       while(rsConnection.next()) {
         long id = rsConnection.getLong(1);
         String name = rsConnection.getString(2);
@@ -1525,6 +1526,7 @@ public abstract class CommonRepositoryHandler extends JdbcRepositoryHandler {
         Date creationDate = rsConnection.getTimestamp(6);
         String updateUser = rsConnection.getString(7);
         Date lastUpdateDate = rsConnection.getTimestamp(8);
+        String connectorName = rsConnection.getString(9);
 
         connectorConfigFetchStatement.setLong(1, connectorId);
         connectorConfigInputStatement.setLong(1, id);
@@ -1535,7 +1537,8 @@ public abstract class CommonRepositoryHandler extends JdbcRepositoryHandler {
 
         loadConnectorConfigs(connectorLinkConfig, fromConfig, toConfig, connectorConfigFetchStatement,
             connectorConfigInputStatement, 2, conn);
-        MLink link = new MLink(connectorId, new MLinkConfig(connectorLinkConfig, Collections.EMPTY_LIST));
+
+        MLink link = new MLink(connectorName, new MLinkConfig(connectorLinkConfig, Collections.EMPTY_LIST));
 
         link.setPersistenceId(id);
         link.setName(name);
@@ -1576,7 +1579,8 @@ public abstract class CommonRepositoryHandler extends JdbcRepositoryHandler {
         configStmt.setLong(1, connectorId);
         inputStmt.setLong(1, id);
         loadInputsForConfigs(connectorLinkConfig, configStmt, inputStmt);
-        MLink link = new MLink(connectorId, connectorLinkConfig);
+
+        MLink link = new MLink(connectorName, connectorLinkConfig);
 
         link.setPersistenceId(id);
         link.setName(name);

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInputTypes.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInputTypes.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInputTypes.java
index 193ee5f..5168bb8 100644
--- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInputTypes.java
+++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInputTypes.java
@@ -97,7 +97,7 @@ public class TestInputTypes extends DerbyTestCase {
     map.put("A", "B");
 
     // Connection object with all various values
-    MLink link = new MLink(connector.getPersistenceId(), connector.getLinkConfig());
+    MLink link = new MLink(connector.getUniqueName(), connector.getLinkConfig());
     MLinkConfig linkConfig = link.getConnectorLinkConfig();
     assertEquals(linkConfig.getStringInput("LINK1.I1").getEditable(), InputEditable.USER_ONLY);
     assertEquals(linkConfig.getStringInput("LINK1.I1").getOverrides(), "LINK1.I2");

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestLinkHandling.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestLinkHandling.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestLinkHandling.java
index 92d1fae..8172411 100644
--- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestLinkHandling.java
+++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestLinkHandling.java
@@ -304,6 +304,6 @@ public class TestLinkHandling extends DerbyTestCase {
   }
 
   public MLink getLink() {
-    return new MLink(1, handler.findConnector("A", getDerbyDatabaseConnection()).getLinkConfig());
+    return new MLink("A", handler.findConnector("A", getDerbyDatabaseConnection()).getLinkConfig());
   }
 }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/repository/repository-mysql/src/test/java/org/apache/sqoop/integration/repository/mysql/MySqlTestCase.java
----------------------------------------------------------------------
diff --git a/repository/repository-mysql/src/test/java/org/apache/sqoop/integration/repository/mysql/MySqlTestCase.java b/repository/repository-mysql/src/test/java/org/apache/sqoop/integration/repository/mysql/MySqlTestCase.java
index 232ef4c..53e4da5 100644
--- a/repository/repository-mysql/src/test/java/org/apache/sqoop/integration/repository/mysql/MySqlTestCase.java
+++ b/repository/repository-mysql/src/test/java/org/apache/sqoop/integration/repository/mysql/MySqlTestCase.java
@@ -94,7 +94,7 @@ abstract public class MySqlTestCase {
   }
 
   protected MLink getLink(String name, MConnector connector) {
-    MLink link = new MLink(connector.getPersistenceId(),
+    MLink link = new MLink(connector.getUniqueName(),
         connector.getLinkConfig());
     link.setName(name);
     fillLink(link);

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/repository/repository-postgresql/src/test/java/org/apache/sqoop/integration/repository/postgresql/PostgresqlTestCase.java
----------------------------------------------------------------------
diff --git a/repository/repository-postgresql/src/test/java/org/apache/sqoop/integration/repository/postgresql/PostgresqlTestCase.java b/repository/repository-postgresql/src/test/java/org/apache/sqoop/integration/repository/postgresql/PostgresqlTestCase.java
index b8b0f52..18e33fc 100644
--- a/repository/repository-postgresql/src/test/java/org/apache/sqoop/integration/repository/postgresql/PostgresqlTestCase.java
+++ b/repository/repository-postgresql/src/test/java/org/apache/sqoop/integration/repository/postgresql/PostgresqlTestCase.java
@@ -83,7 +83,7 @@ abstract public class PostgresqlTestCase {
   }
 
   protected MLink getLink(String name, MConnector connector) {
-    MLink link = new MLink(connector.getPersistenceId(), connector.getLinkConfig());
+    MLink link = new MLink(connector.getUniqueName(), connector.getLinkConfig());
     link.setName(name);
     fillLink(link);
     return link;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/server/src/main/java/org/apache/sqoop/handler/ConnectorRequestHandler.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/sqoop/handler/ConnectorRequestHandler.java b/server/src/main/java/org/apache/sqoop/handler/ConnectorRequestHandler.java
index 52abe72..efe9bef 100644
--- a/server/src/main/java/org/apache/sqoop/handler/ConnectorRequestHandler.java
+++ b/server/src/main/java/org/apache/sqoop/handler/ConnectorRequestHandler.java
@@ -48,7 +48,7 @@ public class ConnectorRequestHandler implements RequestHandler {
   @Override
   public JsonBean handleEvent(RequestContext ctx) {
     List<MConnector> connectors;
-    Map<Long, ResourceBundle> configParamBundles;
+    Map<String, ResourceBundle> configParamBundles;
     Locale locale = ctx.getAcceptLanguageHeader();
     String cIdentifier = ctx.getLastURLElement();
 
@@ -73,7 +73,7 @@ public class ConnectorRequestHandler implements RequestHandler {
       configParamBundles = new HashMap<>();
 
       MConnector connector = ConnectorManager.getInstance().getConnectorConfigurable(mConnector.getUniqueName());
-      configParamBundles.put(connector.getPersistenceId(),
+      configParamBundles.put(connector.getUniqueName(),
           ConnectorManager.getInstance().getResourceBundle(mConnector.getUniqueName(), locale));
 
       AuditLoggerManager.getInstance().logAuditEvent(ctx.getUserName(),

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/server/src/main/java/org/apache/sqoop/handler/LinkRequestHandler.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/sqoop/handler/LinkRequestHandler.java b/server/src/main/java/org/apache/sqoop/handler/LinkRequestHandler.java
index 9e75258..cc07fc8 100644
--- a/server/src/main/java/org/apache/sqoop/handler/LinkRequestHandler.java
+++ b/server/src/main/java/org/apache/sqoop/handler/LinkRequestHandler.java
@@ -130,7 +130,7 @@ public class LinkRequestHandler implements RequestHandler {
     }
 
     MLink postedLink = links.get(0);
-    MConnector mConnector = HandlerUtils.getConnectorFromConnectorId(postedLink.getConnectorId());
+    MConnector mConnector = HandlerUtils.getConnectorFromConnectorName(postedLink.getConnectorName());
 
     // Authorization check
     if (create) {
@@ -142,7 +142,7 @@ public class LinkRequestHandler implements RequestHandler {
     }
 
     MLinkConfig linkConfig = ConnectorManager.getInstance()
-        .getConnectorConfigurable(postedLink.getConnectorId()).getLinkConfig();
+        .getConnectorConfigurable(postedLink.getConnectorName()).getLinkConfig();
     if (!linkConfig.equals(postedLink.getConnectorLinkConfig())) {
       throw new SqoopException(ServerError.SERVER_0003, "Detected incorrect link config structure");
     }
@@ -156,7 +156,7 @@ public class LinkRequestHandler implements RequestHandler {
     }
     // Associated connector for this link
     SqoopConnector connector = ConnectorManager.getInstance().getSqoopConnector(
-        postedLink.getConnectorId());
+        postedLink.getConnectorName());
 
     // Validate user supplied config data
     ConfigValidationResult connectorLinkConfigValidation = ConfigUtils.validateConfigs(postedLink
@@ -240,10 +240,10 @@ public class LinkRequestHandler implements RequestHandler {
   private void addConnectorConfigBundle(Locale locale, LinkBean bean) {
     // Add associated resources into the bean
     for (MLink link : bean.getLinks()) {
-      long connectorId = link.getConnectorId();
-      if (!bean.hasConnectorConfigBundle(connectorId)) {
-        bean.addConnectorConfigBundle(connectorId, ConnectorManager.getInstance()
-            .getResourceBundle(connectorId, locale));
+      String connectorName = link.getConnectorName();
+      if (!bean.hasConnectorConfigBundle(connectorName)) {
+        bean.addConnectorConfigBundle(connectorName, ConnectorManager.getInstance()
+            .getResourceBundle(connectorName, locale));
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/shell/src/main/java/org/apache/sqoop/shell/CloneJobFunction.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/sqoop/shell/CloneJobFunction.java b/shell/src/main/java/org/apache/sqoop/shell/CloneJobFunction.java
index 15cfad7..5e8391c 100644
--- a/shell/src/main/java/org/apache/sqoop/shell/CloneJobFunction.java
+++ b/shell/src/main/java/org/apache/sqoop/shell/CloneJobFunction.java
@@ -20,6 +20,7 @@ package org.apache.sqoop.shell;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.sqoop.common.Direction;
+import org.apache.sqoop.model.MConnector;
 import org.apache.sqoop.model.MJob;
 import org.apache.sqoop.model.MPersistableEntity;
 import org.apache.sqoop.shell.core.Constants;
@@ -66,10 +67,13 @@ public class CloneJobFunction extends SqoopFunction {
     MJob job = client.getJob(jobArg);
     job.setPersistenceId(MPersistableEntity.PERSISTANCE_ID_DEFAULT);
 
+    // TODO: the job should be related with connector by connectorName
+    MConnector fromConnector = getClient().getConnector(job.getFromConnectorId());
+    MConnector toConnector = getClient().getConnector(job.getToConnectorId());
     ResourceBundle fromConnectorBundle = client.getConnectorConfigBundle(
-        job.getFromConnectorId());
+            fromConnector.getUniqueName());
     ResourceBundle toConnectorBundle = client.getConnectorConfigBundle(
-        job.getToConnectorId());
+            toConnector.getUniqueName());
     ResourceBundle driverConfigBundle = client.getDriverConfigBundle();
 
     Status status = Status.OK;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/shell/src/main/java/org/apache/sqoop/shell/CloneLinkFunction.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/sqoop/shell/CloneLinkFunction.java b/shell/src/main/java/org/apache/sqoop/shell/CloneLinkFunction.java
index a679be8..73928a5 100644
--- a/shell/src/main/java/org/apache/sqoop/shell/CloneLinkFunction.java
+++ b/shell/src/main/java/org/apache/sqoop/shell/CloneLinkFunction.java
@@ -70,7 +70,7 @@ public class CloneLinkFunction extends SqoopFunction {
 
     Status status = Status.OK;
 
-    ResourceBundle linkConfigBundle = client.getConnectorConfigBundle(link.getConnectorId());
+    ResourceBundle linkConfigBundle = client.getConnectorConfigBundle(link.getConnectorName());
 
     if (isInteractive) {
       printlnResource(Constants.RES_PROMPT_UPDATE_LINK_CONFIG);

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/shell/src/main/java/org/apache/sqoop/shell/CreateJobFunction.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/sqoop/shell/CreateJobFunction.java b/shell/src/main/java/org/apache/sqoop/shell/CreateJobFunction.java
index 79caa0d..b0adb3d 100644
--- a/shell/src/main/java/org/apache/sqoop/shell/CreateJobFunction.java
+++ b/shell/src/main/java/org/apache/sqoop/shell/CreateJobFunction.java
@@ -90,9 +90,9 @@ public class CreateJobFunction extends  SqoopFunction {
     }
 
     ResourceBundle fromConfigBundle = getClient().getConnectorConfigBundle(
-        job.getFromConnectorId());
+            fromConnector.getUniqueName());
     ResourceBundle toConfigBundle = getClient().getConnectorConfigBundle(
-        job.getToConnectorId());
+            toConnector.getUniqueName());
     ResourceBundle driverConfigBundle = getClient().getDriverConfigBundle();
 
     Status status = Status.OK;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/shell/src/main/java/org/apache/sqoop/shell/CreateLinkFunction.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/sqoop/shell/CreateLinkFunction.java b/shell/src/main/java/org/apache/sqoop/shell/CreateLinkFunction.java
index 289c3c3..e5af3f1 100644
--- a/shell/src/main/java/org/apache/sqoop/shell/CreateLinkFunction.java
+++ b/shell/src/main/java/org/apache/sqoop/shell/CreateLinkFunction.java
@@ -72,24 +72,23 @@ public class CreateLinkFunction extends SqoopFunction {
       cid = getLong(line, Constants.OPT_CID);
       getClient().getConnector(cid);
 
-      //Would have thrown an exception before this if input was neither a valid name nor an id
+      //Would have thrown an exception before this if input was an invalid connector name
       //This will do an extra getConnector() call again inside createLink()
       //but should not matter as connectors are cached
-      link = getClient().createLink(cid);
+      link = getClient().createLink(connectorName);
       printlnResource(Constants.RES_CREATE_CREATING_LINK, cid);
     }
     else {
       //Command line had connector name
       //This will do an extra getConnector() call again inside createLink() but
       //should not matter as connectors are cached
-      cid = connector.getPersistenceId();
       link = getClient().createLink(connectorName);
       printlnResource(Constants.RES_CREATE_CREATING_LINK, connectorName);
     }
 
     ConsoleReader reader = getConsoleReader();
 
-    ResourceBundle connectorConfigBundle = getClient().getConnectorConfigBundle(cid);
+    ResourceBundle connectorConfigBundle = getClient().getConnectorConfigBundle(connectorName);
 
     Status status = Status.OK;
     if (isInteractive) {

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/shell/src/main/java/org/apache/sqoop/shell/ShowConnectorFunction.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/sqoop/shell/ShowConnectorFunction.java b/shell/src/main/java/org/apache/sqoop/shell/ShowConnectorFunction.java
index 6efb51c..07cccf2 100644
--- a/shell/src/main/java/org/apache/sqoop/shell/ShowConnectorFunction.java
+++ b/shell/src/main/java/org/apache/sqoop/shell/ShowConnectorFunction.java
@@ -124,6 +124,6 @@ public class ShowConnectorFunction extends SqoopFunction {
       connector.getVersion(),
       connector.getSupportedDirections().toString()
     );
-    displayConnectorConfigDetails(connector, client.getConnectorConfigBundle(connector.getPersistenceId()));
+    displayConnectorConfigDetails(connector, client.getConnectorConfigBundle(connector.getUniqueName()));
   }
 }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/shell/src/main/java/org/apache/sqoop/shell/ShowJobFunction.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/sqoop/shell/ShowJobFunction.java b/shell/src/main/java/org/apache/sqoop/shell/ShowJobFunction.java
index 21873cc..faad505 100644
--- a/shell/src/main/java/org/apache/sqoop/shell/ShowJobFunction.java
+++ b/shell/src/main/java/org/apache/sqoop/shell/ShowJobFunction.java
@@ -159,15 +159,20 @@ public class ShowJobFunction extends SqoopFunction {
       job.getLastUpdateUser(),
       formatter.format(job.getLastUpdateDate())
     );
+
+    // TODO: should be removed when MJob link with Connector by name.
+    MConnector fromConnector = getClient().getConnector(job.getFromConnectorId());
+    MConnector toConnector = getClient().getConnector(job.getToConnectorId());
+
     displayConfig(job.getDriverConfig().getConfigs(),
             client.getDriverConfigBundle());
     printlnResource(Constants.RES_SHOW_PROMPT_JOB_FROM_LID_INFO,
         job.getFromLinkId());
     displayConfig(job.getFromJobConfig().getConfigs(),
-                 client.getConnectorConfigBundle(job.getFromConnectorId()));
+                 client.getConnectorConfigBundle(fromConnector.getUniqueName()));
     printlnResource(Constants.RES_SHOW_PROMPT_JOB_TO_LID_INFO,
             job.getToLinkId());
     displayConfig(job.getToJobConfig().getConfigs(),
-                 client.getConnectorConfigBundle(job.getToConnectorId()));
+                 client.getConnectorConfigBundle(toConnector.getUniqueName()));
   }
 }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/shell/src/main/java/org/apache/sqoop/shell/ShowLinkFunction.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/sqoop/shell/ShowLinkFunction.java b/shell/src/main/java/org/apache/sqoop/shell/ShowLinkFunction.java
index 04dd228..663a377 100644
--- a/shell/src/main/java/org/apache/sqoop/shell/ShowLinkFunction.java
+++ b/shell/src/main/java/org/apache/sqoop/shell/ShowLinkFunction.java
@@ -81,17 +81,16 @@ public class ShowLinkFunction extends SqoopFunction {
     List<String> ids = new LinkedList<String>();
     List<String> names = new LinkedList<String>();
     List<String> connectorIds = new LinkedList<String>();
+    List<String> connectorNames = new LinkedList<String>();
     List<String> availabilities = new LinkedList<String>();
 
     for (MLink link : links) {
       ids.add(String.valueOf(link.getPersistenceId()));
       names.add(link.getName());
-      connectorIds.add(String.valueOf(link.getConnectorId()));
+      connectorNames.add(link.getConnectorName());
       availabilities.add(String.valueOf(link.getEnabled()));
     }
 
-    List<String> connectorNames = getConnectorNames(connectorIds);
-
     TableDisplayer.display(header, ids, names, connectorIds, connectorNames, availabilities);
   }
 
@@ -126,41 +125,10 @@ public class ShowLinkFunction extends SqoopFunction {
       formatter.format(link.getLastUpdateDate())
     );
 
-    long connectorId = link.getConnectorId();
-    MConnector connector = client.getConnector(connectorId);
-    String connectorName = "";
-    if (connector != null) {
-      connectorName = connector.getUniqueName();
-    }
-    printlnResource(Constants.RES_SHOW_PROMPT_LINK_CID_INFO, connectorName, connectorId);
+    printlnResource(Constants.RES_SHOW_PROMPT_LINK_CID_INFO, link.getConnectorName());
 
     // Display link config
     displayConfig(link.getConnectorLinkConfig().getConfigs(),
-    client.getConnectorConfigBundle(connectorId));
-  }
-
-  private List<String> getConnectorNames(List<String> connectorIds) {
-    Map<String, String> connectorIdToName = new HashMap<String, String>();
-    for (String connectorId : connectorIds) {
-      if (!connectorIdToName.containsKey(connectorId)) {
-        try {
-          MConnector connector = client.getConnector(Long.parseLong(connectorId));
-          if (connector != null) {
-            connectorIdToName.put(connectorId, connector.getUniqueName());
-          }
-        } catch (SqoopException ex) {
-          connectorIdToName.put(connectorId, "Access Denied");
-        }
-      }
-    }
-    List<String> connectorNames = new ArrayList<String>();
-    for (String connectorId : connectorIds) {
-      if (connectorIdToName.get(connectorId) != null) {
-        connectorNames.add(connectorIdToName.get(connectorId));
-      } else {
-        connectorNames.add("");
-      }
-    }
-    return connectorNames;
+      client.getConnectorConfigBundle(link.getConnectorName()));
   }
 }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/shell/src/main/java/org/apache/sqoop/shell/UpdateJobFunction.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/sqoop/shell/UpdateJobFunction.java b/shell/src/main/java/org/apache/sqoop/shell/UpdateJobFunction.java
index 49cfd0b..95f044f 100644
--- a/shell/src/main/java/org/apache/sqoop/shell/UpdateJobFunction.java
+++ b/shell/src/main/java/org/apache/sqoop/shell/UpdateJobFunction.java
@@ -20,6 +20,7 @@ package org.apache.sqoop.shell;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.sqoop.common.Direction;
+import org.apache.sqoop.model.MConnector;
 import org.apache.sqoop.model.MJob;
 import org.apache.sqoop.shell.core.Constants;
 import org.apache.sqoop.shell.utils.ConfigDisplayer;
@@ -67,10 +68,14 @@ public class UpdateJobFunction extends SqoopFunction {
     // TODO(SQOOP-1634): using from/to and driver config id, this call can be avoided
     MJob job = client.getJob(jobArg);
 
+    // TODO: should be removed when MJob link with Connector by name.
+    MConnector fromConnector = getClient().getConnector(job.getFromConnectorId());
+    MConnector toConnector = getClient().getConnector(job.getToConnectorId());
+
     ResourceBundle fromConnectorBundle = client.getConnectorConfigBundle(
-        job.getFromConnectorId());
+            fromConnector.getUniqueName());
     ResourceBundle toConnectorBundle = client.getConnectorConfigBundle(
-        job.getToConnectorId());
+            toConnector.getUniqueName());
     ResourceBundle driverConfigBundle = client.getDriverConfigBundle();
 
     Status status = Status.OK;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/shell/src/main/java/org/apache/sqoop/shell/UpdateLinkFunction.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/sqoop/shell/UpdateLinkFunction.java b/shell/src/main/java/org/apache/sqoop/shell/UpdateLinkFunction.java
index 1bb7cd5..aef500c 100644
--- a/shell/src/main/java/org/apache/sqoop/shell/UpdateLinkFunction.java
+++ b/shell/src/main/java/org/apache/sqoop/shell/UpdateLinkFunction.java
@@ -65,8 +65,7 @@ public class UpdateLinkFunction extends SqoopFunction {
 
     // TODO(SQOOP-1634): using link config id, this call can be avoided
     MLink link = client.getLink(linkArg);
-
-    ResourceBundle connectorLinkConfigBundle = client.getConnectorConfigBundle(link.getConnectorId());
+    ResourceBundle connectorLinkConfigBundle = client.getConnectorConfigBundle(link.getConnectorName());
 
     Status status = Status.OK;
 

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/shell/src/test/java/org/apache/sqoop/shell/TestCloneCommand.java
----------------------------------------------------------------------
diff --git a/shell/src/test/java/org/apache/sqoop/shell/TestCloneCommand.java b/shell/src/test/java/org/apache/sqoop/shell/TestCloneCommand.java
index eed27d7..14daa87 100644
--- a/shell/src/test/java/org/apache/sqoop/shell/TestCloneCommand.java
+++ b/shell/src/test/java/org/apache/sqoop/shell/TestCloneCommand.java
@@ -41,24 +41,7 @@ import jline.console.ConsoleReader;
 import org.apache.commons.lang.StringUtils;
 import org.apache.sqoop.client.SqoopClient;
 import org.apache.sqoop.common.SqoopException;
-import org.apache.sqoop.model.InputEditable;
-import org.apache.sqoop.model.MBooleanInput;
-import org.apache.sqoop.model.MConfig;
-import org.apache.sqoop.model.MDateTimeInput;
-import org.apache.sqoop.model.MDriverConfig;
-import org.apache.sqoop.model.MEnumInput;
-import org.apache.sqoop.model.MFromConfig;
-import org.apache.sqoop.model.MInput;
-import org.apache.sqoop.model.MIntegerInput;
-import org.apache.sqoop.model.MJob;
-import org.apache.sqoop.model.MLink;
-import org.apache.sqoop.model.MLinkConfig;
-import org.apache.sqoop.model.MListInput;
-import org.apache.sqoop.model.MLongInput;
-import org.apache.sqoop.model.MMapInput;
-import org.apache.sqoop.model.MStringInput;
-import org.apache.sqoop.model.MToConfig;
-import org.apache.sqoop.model.MValidator;
+import org.apache.sqoop.model.*;
 import org.apache.sqoop.shell.core.Constants;
 import org.apache.sqoop.shell.core.ShellError;
 import org.apache.sqoop.utils.MapResourceBundle;
@@ -104,9 +87,9 @@ public class TestCloneCommand {
   @Test
   public void testCloneLink() {
     ShellEnvironment.setInteractive(false);
-    MLink link = new MLink(1L, new MLinkConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()));
+    MLink link = new MLink("connector_name_test", new MLinkConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()));
     when(client.getLink("link_test")).thenReturn(link);
-    when(client.getConnectorConfigBundle(1L)).thenReturn(new MapResourceBundle(new HashMap()));
+    when(client.getConnectorConfigBundle("connector_name_test")).thenReturn(new MapResourceBundle(new HashMap()));
     when(client.saveLink(link)).thenReturn(Status.OK);
 
     // clone link -lid link_test
@@ -136,10 +119,11 @@ public class TestCloneCommand {
   public void testCloneLinkInteractive() {
     ShellEnvironment.setInteractive(true);
     initEnv();
-    MLink link = new MLink(1, new MLinkConfig(getConfig("CONFIGFROMNAME"), new ArrayList<MValidator>()));
+    MLink link = new MLink("connector_name_test", new MLinkConfig(getConfig("CONFIGFROMNAME"), new ArrayList<MValidator>()));
     when(client.getLink("link_test")).thenReturn(link);
-    when(client.getConnectorConfigBundle(1L)).thenReturn(resourceBundle);
+    when(client.getConnectorConfigBundle("connector_name_test")).thenReturn(resourceBundle);
     when(client.saveLink(link)).thenReturn(Status.OK);
+    when(client.getConnector(any(Long.class))).thenReturn(new MConnector("", "", "", null, null, null));
 
     // clone link -lid link_test
     initData("linkname\r" +         // link name
@@ -176,9 +160,10 @@ public class TestCloneCommand {
         new MToConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()),
         new MDriverConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()));
     when(client.getJob("job_test")).thenReturn(job);
-    when(client.getConnectorConfigBundle(any(Long.class))).thenReturn(new MapResourceBundle(new HashMap()));
+    when(client.getConnectorConfigBundle(any(String.class))).thenReturn(new MapResourceBundle(new HashMap()));
     when(client.getDriverConfigBundle()).thenReturn(new MapResourceBundle(new HashMap()));
     when(client.saveJob(job)).thenReturn(Status.OK);
+    when(client.getConnector(any(Long.class))).thenReturn(new MConnector("", "", "", null, null, null));
 
     // clone job -jid job_test
     Status status = (Status) cloneCmd.execute(Arrays.asList(Constants.FN_JOB, "-jid", "job_test"));
@@ -211,7 +196,7 @@ public class TestCloneCommand {
         new MToConfig(getConfig("toJobConfig"), new ArrayList<MValidator>()),
         new MDriverConfig(getConfig("driverConfig"), new ArrayList<MValidator>()));
     when(client.getJob("job_test")).thenReturn(job);
-    when(client.getConnectorConfigBundle(any(Long.class))).thenReturn(resourceBundle);
+    when(client.getConnectorConfigBundle(any(String.class))).thenReturn(resourceBundle);
     when(client.getDriverConfigBundle()).thenReturn(resourceBundle);
     when(client.saveJob(job)).thenReturn(Status.OK);
 

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/shell/src/test/java/org/apache/sqoop/shell/TestCreateCommand.java
----------------------------------------------------------------------
diff --git a/shell/src/test/java/org/apache/sqoop/shell/TestCreateCommand.java b/shell/src/test/java/org/apache/sqoop/shell/TestCreateCommand.java
index 48f646b..89f4fe8 100644
--- a/shell/src/test/java/org/apache/sqoop/shell/TestCreateCommand.java
+++ b/shell/src/test/java/org/apache/sqoop/shell/TestCreateCommand.java
@@ -104,7 +104,8 @@ public class TestCreateCommand {
   public void testCreateLink() {
     ShellEnvironment.setInteractive(false);
     when(client.getConnector("connector_test")).thenReturn(new MConnector("", "", "", null, null, null));
-    when(client.createLink("connector_test")).thenReturn(new MLink(1, new MLinkConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>())));
+    when(client.createLink("connector_test")).thenReturn(
+            new MLink("connector_test", new MLinkConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>())));
     when(client.saveLink(any(MLink.class))).thenReturn(Status.OK);
 
     // create link -c connector_test
@@ -144,10 +145,10 @@ public class TestCreateCommand {
     ShellEnvironment.setInteractive(true);
     initEnv();
     when(client.getConnector("connector_test")).thenReturn(new MConnector("", "", "", null, null, null));
-    MLink link = new MLink(1, new MLinkConfig(getConfig("CONFIGFROMNAME"), new ArrayList<MValidator>()));
+    MLink link = new MLink("connector_test", new MLinkConfig(getConfig("CONFIGFROMNAME"), new ArrayList<MValidator>()));
     when(client.createLink("connector_test")).thenReturn(link);
     when(client.saveLink(any(MLink.class))).thenReturn(Status.OK);
-    when(client.getConnectorConfigBundle(any(Long.class))).thenReturn(resourceBundle);
+    when(client.getConnectorConfigBundle(any(String.class))).thenReturn(resourceBundle);
 
     // create link -c connector_test
     initData("linkname\r" +         // link name
@@ -228,7 +229,7 @@ public class TestCreateCommand {
     when(client.getConnector(1)).thenReturn(fromConnector);
     when(client.getConnector(2)).thenReturn(toConnector);
     when(client.saveJob(any(MJob.class))).thenReturn(Status.OK);
-    when(client.getConnectorConfigBundle(any(Long.class))).thenReturn(resourceBundle);
+    when(client.getConnectorConfigBundle(any(String.class))).thenReturn(resourceBundle);
     when(client.getDriverConfigBundle()).thenReturn(resourceBundle);
 
     // create job -f link_from -to link_to

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/shell/src/test/java/org/apache/sqoop/shell/TestShowCommand.java
----------------------------------------------------------------------
diff --git a/shell/src/test/java/org/apache/sqoop/shell/TestShowCommand.java b/shell/src/test/java/org/apache/sqoop/shell/TestShowCommand.java
index 4272386..870bee3 100644
--- a/shell/src/test/java/org/apache/sqoop/shell/TestShowCommand.java
+++ b/shell/src/test/java/org/apache/sqoop/shell/TestShowCommand.java
@@ -203,7 +203,7 @@ public class TestShowCommand {
   @Test
   public void testShowLink() {
     when(client.getLinks()).thenReturn(new ArrayList<MLink>());
-    when(client.getLink(any(String.class))).thenReturn(new MLink(1L, new MLinkConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>())));
+    when(client.getLink(any(String.class))).thenReturn(new MLink("connector_test", new MLinkConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>())));
 
     // show link summary
     out.reset();
@@ -234,6 +234,7 @@ public class TestShowCommand {
   @Test
   public void testShowJob() {
     when(client.getJobs()).thenReturn(new ArrayList<MJob>());
+    when(client.getConnector(any(Long.class))).thenReturn(new MConnector("", "", "", null, null, null));
     when(client.getJob("1")).thenReturn(new MJob(1L, 2L, 1L, 2L,
         new MFromConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()),
         new MToConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()),

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/shell/src/test/java/org/apache/sqoop/shell/TestUpdateCommand.java
----------------------------------------------------------------------
diff --git a/shell/src/test/java/org/apache/sqoop/shell/TestUpdateCommand.java b/shell/src/test/java/org/apache/sqoop/shell/TestUpdateCommand.java
index 9b3e87a..2a6670d 100644
--- a/shell/src/test/java/org/apache/sqoop/shell/TestUpdateCommand.java
+++ b/shell/src/test/java/org/apache/sqoop/shell/TestUpdateCommand.java
@@ -105,10 +105,10 @@ public class TestUpdateCommand {
   @Test
   public void testUpdateLink() throws InterruptedException {
     ShellEnvironment.setInteractive(false);
-    MLink link = new MLink(1L, new MLinkConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()));
+    MLink link = new MLink("connector_test", new MLinkConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()));
     when(client.getLink("link_test")).thenReturn(link);
-    when(client.getConnectorConfigBundle(1L)).thenReturn(new MapResourceBundle(new HashMap()));
-    when(client.updateLink(link)).thenReturn(Status.OK);
+    when(client.getConnectorConfigBundle("connector_test")).thenReturn(new MapResourceBundle(new HashMap()));
+    when(client.updateLink(any(MLink.class))).thenReturn(Status.OK);
 
     // update link -lid link_test
     Status status = (Status) updateCmd.execute(Arrays.asList(Constants.FN_LINK, "-lid", "link_test"));
@@ -134,14 +134,14 @@ public class TestUpdateCommand {
   }
 
   @Test
-  public void testUpdateLinkInteractive() {
+  public void testUpdateLinkInteractive() throws Exception {
     ShellEnvironment.setInteractive(true);
     initEnv();
     when(client.getConnector("connector_test")).thenReturn(new MConnector("", "", "", null, null, null));
-    MLink link = new MLink(1, new MLinkConfig(getConfig("CONFIGFROMNAME"), new ArrayList<MValidator>()));
+    MLink link = new MLink("connector_test", new MLinkConfig(getConfig("CONFIGFROMNAME"), new ArrayList<MValidator>()));
     when(client.getLink("link_test")).thenReturn(link);
-    when(client.updateLink(link)).thenReturn(Status.OK);
-    when(client.getConnectorConfigBundle(any(Long.class))).thenReturn(resourceBundle);
+    when(client.updateLink(any(MLink.class))).thenReturn(Status.OK);
+    when(client.getConnectorConfigBundle(any(String.class))).thenReturn(resourceBundle);
 
     // update link -lid link_test
     initData("linkname\r" +         // link name
@@ -178,7 +178,8 @@ public class TestUpdateCommand {
         new MToConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()),
         new MDriverConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()));
     when(client.getJob("job_test")).thenReturn(job);
-    when(client.getConnectorConfigBundle(any(Long.class))).thenReturn(new MapResourceBundle(new HashMap()));
+    when(client.getConnector(any(Long.class))).thenReturn(new MConnector("connect_test", "", "", null, null, null));
+    when(client.getConnectorConfigBundle(any(String.class))).thenReturn(new MapResourceBundle(new HashMap()));
     when(client.getDriverConfigBundle()).thenReturn(new MapResourceBundle(new HashMap()));
     when(client.updateJob(job)).thenReturn(Status.OK);
 
@@ -213,7 +214,8 @@ public class TestUpdateCommand {
         new MToConfig(getConfig("toJobConfig"), new ArrayList<MValidator>()),
         new MDriverConfig(getConfig("driverConfig"), new ArrayList<MValidator>()));
     when(client.getJob("job_test")).thenReturn(job);
-    when(client.getConnectorConfigBundle(any(Long.class))).thenReturn(resourceBundle);
+    when(client.getConnector(any(Long.class))).thenReturn(new MConnector("connect_test", "", "", null, null, null));
+    when(client.getConnectorConfigBundle(any(String.class))).thenReturn(resourceBundle);
     when(client.getDriverConfigBundle()).thenReturn(resourceBundle);
     when(client.updateJob(job)).thenReturn(Status.OK);
 

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/test/src/main/java/org/apache/sqoop/test/testcases/JettyTestCase.java
----------------------------------------------------------------------
diff --git a/test/src/main/java/org/apache/sqoop/test/testcases/JettyTestCase.java b/test/src/main/java/org/apache/sqoop/test/testcases/JettyTestCase.java
index bd4ba6a..e78adc0 100644
--- a/test/src/main/java/org/apache/sqoop/test/testcases/JettyTestCase.java
+++ b/test/src/main/java/org/apache/sqoop/test/testcases/JettyTestCase.java
@@ -22,7 +22,6 @@ import java.io.IOException;
 import java.lang.reflect.Method;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.mapred.JobConf;
 import org.apache.log4j.Logger;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/test/src/test/java/org/apache/sqoop/integration/connector/hdfs/S3Test.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/sqoop/integration/connector/hdfs/S3Test.java b/test/src/test/java/org/apache/sqoop/integration/connector/hdfs/S3Test.java
index 7fec310..f98870d 100644
--- a/test/src/test/java/org/apache/sqoop/integration/connector/hdfs/S3Test.java
+++ b/test/src/test/java/org/apache/sqoop/integration/connector/hdfs/S3Test.java
@@ -90,7 +90,7 @@ public class S3Test extends ConnectorTestCase {
     saveLink(hdfsLink);
 
     // DB -> S3
-    MJob db2aws = getClient().createJob(rdbmsLink.getPersistenceId(), hdfsLink.getPersistenceId());
+    MJob db2aws = getClient().createJob(rdbmsLink.getName(), hdfsLink.getName());
     fillRdbmsFromConfig(db2aws, "id");
     fillHdfsToConfig(db2aws, ToFormat.TEXT_FILE);
 
@@ -110,7 +110,7 @@ public class S3Test extends ConnectorTestCase {
     assertEquals(provider.rowCount(getTableName()), 0);
 
     // S3 -> DB
-    MJob aws2db = getClient().createJob(hdfsLink.getPersistenceId(), rdbmsLink.getPersistenceId());
+    MJob aws2db = getClient().createJob(hdfsLink.getName(), rdbmsLink.getName());
     fillHdfsFromConfig(aws2db);
     fillRdbmsToConfig(aws2db);
 
@@ -145,7 +145,7 @@ public class S3Test extends ConnectorTestCase {
     saveLink(hdfsLink);
 
     // S3 -> HDFS
-    MJob aws2hdfs = getClient().createJob(s3Link.getPersistenceId(), hdfsLink.getPersistenceId());
+    MJob aws2hdfs = getClient().createJob(s3Link.getName(), hdfsLink.getName());
     fillHdfsFromConfig(aws2hdfs);
     aws2hdfs.getFromJobConfig().getEnumInput("incremental.incrementalType").setValue(IncrementalType.NEW_FILES);
 

http://git-wip-us.apache.org/repos/asf/sqoop/blob/794adbcf/tools/src/main/java/org/apache/sqoop/tools/tool/RepositoryLoadTool.java
----------------------------------------------------------------------
diff --git a/tools/src/main/java/org/apache/sqoop/tools/tool/RepositoryLoadTool.java b/tools/src/main/java/org/apache/sqoop/tools/tool/RepositoryLoadTool.java
index 75d2182..2afb965 100644
--- a/tools/src/main/java/org/apache/sqoop/tools/tool/RepositoryLoadTool.java
+++ b/tools/src/main/java/org/apache/sqoop/tools/tool/RepositoryLoadTool.java
@@ -278,7 +278,7 @@ public class RepositoryLoadTool extends ConfiguredTool {
 
     Repository repository = RepositoryManager.getInstance().getRepository();
 
-    MConnector mConnector = ConnectorManager.getInstance().getConnectorConfigurable(link.getConnectorId());
+    MConnector mConnector = ConnectorManager.getInstance().getConnectorConfigurable(link.getConnectorName());
     ConnectorConfigurableUpgrader connectorConfigUpgrader = ConnectorManager.getInstance().getSqoopConnector(mConnector.getUniqueName()).getConfigurableUpgrader(null);
 
     List<MConfig> connectorConfigs = mConnector.getLinkConfig().clone(false).getConfigs();
@@ -291,7 +291,7 @@ public class RepositoryLoadTool extends ConfiguredTool {
 
     // Transform config structures to objects for validations
     SqoopConnector connector = ConnectorManager.getInstance().getSqoopConnector(
-        link.getConnectorId());
+        link.getConnectorName());
 
     Object connectorConfig = ClassUtils.instantiate(connector.getLinkConfigurationClass());