From 913521e1a93b2571d2c83b10c51609b54744eee9 Mon Sep 17 00:00:00 2001 From: Abraham Elmahrek Date: Tue, 20 Jan 2015 12:50:15 -0800 Subject: [PATCH] SQOOP-1821: Sqoop2: External connector loading (Veena Basavaraj via Abraham Elmahrek) --- .../org/apache/sqoop/utils/ClassUtils.java | 2 + .../apache/sqoop/utils/TestClassUtils.java | 2 +- .../sqoop/connector/ConnectorHandler.java | 5 +- .../sqoop/connector/ConnectorManager.java | 6 ++ .../connector/ConnectorManagerUtils.java | 87 ++++++++++++++++-- .../sqoop/core/ConfigurationConstants.java | 7 ++ .../connector/TestConnectorManagerUtils.java | 64 +++++++++++++ core/src/test/resources/test-connector.jar | Bin 0 -> 55938 bytes .../src/test/resources/test-non-connector.jar | Bin 0 -> 19827 bytes dist/src/main/server/conf/sqoop.properties | 8 +- .../test/minicluster/SqoopMiniCluster.java | 13 ++- 11 files changed, 179 insertions(+), 15 deletions(-) create mode 100644 core/src/test/java/org/apache/sqoop/connector/TestConnectorManagerUtils.java create mode 100644 core/src/test/resources/test-connector.jar create mode 100644 core/src/test/resources/test-non-connector.jar diff --git a/common/src/main/java/org/apache/sqoop/utils/ClassUtils.java b/common/src/main/java/org/apache/sqoop/utils/ClassUtils.java index 0be4d41b..d6a82547 100644 --- a/common/src/main/java/org/apache/sqoop/utils/ClassUtils.java +++ b/common/src/main/java/org/apache/sqoop/utils/ClassUtils.java @@ -57,6 +57,8 @@ public static Class loadClass(String className) { klass = ctxLoader.loadClass(className); } catch (ClassNotFoundException ex) { LOG.debug("Exception while load class: " + className, ex); + // wrapping it in runtime, to avoid chainging the signature of methods currently invoking this method + throw new RuntimeException(ex); } } } diff --git a/common/src/test/java/org/apache/sqoop/utils/TestClassUtils.java b/common/src/test/java/org/apache/sqoop/utils/TestClassUtils.java index 161a1fa0..58a27bab 100644 --- a/common/src/test/java/org/apache/sqoop/utils/TestClassUtils.java +++ b/common/src/test/java/org/apache/sqoop/utils/TestClassUtils.java @@ -29,7 +29,7 @@ */ public class TestClassUtils { - @Test + @Test(expectedExceptions = Exception.class) public void testLoadClass() { assertNull(ClassUtils.loadClass("A")); assertEquals(A.class, ClassUtils.loadClass(A.class.getName())); diff --git a/core/src/main/java/org/apache/sqoop/connector/ConnectorHandler.java b/core/src/main/java/org/apache/sqoop/connector/ConnectorHandler.java index 1919b4b4..bfdb7b34 100644 --- a/core/src/main/java/org/apache/sqoop/connector/ConnectorHandler.java +++ b/core/src/main/java/org/apache/sqoop/connector/ConnectorHandler.java @@ -31,6 +31,7 @@ import org.apache.sqoop.model.MFromConfig; import org.apache.sqoop.model.MLinkConfig; import org.apache.sqoop.model.MToConfig; +import org.apache.sqoop.utils.ClassUtils; public final class ConnectorHandler { @@ -71,8 +72,8 @@ public ConnectorHandler(URL configFileUrl) { Class connectorClass = null; try { - connectorClass = Class.forName(connectorClassName); - } catch (ClassNotFoundException ex) { + connectorClass = ClassUtils.loadClass(connectorClassName); + } catch (Exception ex) { throw new SqoopException(ConnectorError.CONN_0005, connectorClassName, ex); } 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 b9d4d60a..0907efb3 100644 --- a/core/src/main/java/org/apache/sqoop/connector/ConnectorManager.java +++ b/core/src/main/java/org/apache/sqoop/connector/ConnectorManager.java @@ -27,6 +27,7 @@ import java.util.ResourceBundle; import java.util.Set; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.sqoop.common.SqoopException; import org.apache.sqoop.connector.spi.SqoopConnector; @@ -158,6 +159,11 @@ public synchronized void initialize(boolean autoUpgrade) { LOG.trace("Begin connector manager initialization"); } + // add external connectors into the class path + // NOTE: class loading happens later in the ConnectorHandler + ConnectorManagerUtils.addExternalConnectorsJarsToClasspath(SqoopConfiguration.getInstance().getContext() + .getString(ConfigurationConstants.EXTERNAL_CONNECTOR_LOAD_PATH, StringUtils.EMPTY)); + List connectorConfigs = ConnectorManagerUtils.getConnectorConfigs(); LOG.info("Connector config urls: " + connectorConfigs); diff --git a/core/src/main/java/org/apache/sqoop/connector/ConnectorManagerUtils.java b/core/src/main/java/org/apache/sqoop/connector/ConnectorManagerUtils.java index c7193ee7..bd85e997 100644 --- a/core/src/main/java/org/apache/sqoop/connector/ConnectorManagerUtils.java +++ b/core/src/main/java/org/apache/sqoop/connector/ConnectorManagerUtils.java @@ -17,14 +17,22 @@ */ package org.apache.sqoop.connector; +import org.apache.commons.lang.StringUtils; import org.apache.sqoop.common.SqoopException; import org.apache.sqoop.core.ConfigurationConstants; +import java.io.File; import java.io.IOException; +import java.net.MalformedURLException; import java.net.URL; +import java.net.URLClassLoader; import java.util.ArrayList; import java.util.Enumeration; +import java.util.HashSet; import java.util.List; +import java.util.Set; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; /** * Utilities for ConnectorManager. @@ -33,7 +41,7 @@ public class ConnectorManagerUtils { /** * Get a list of URLs of connectors that are installed. - * Check + * * @return List of URLs. */ public static List getConnectorConfigs() { @@ -41,9 +49,8 @@ public static List getConnectorConfigs() { try { // Check ConnectorManager classloader. - Enumeration appPathConfigs = - ConnectorManager.class.getClassLoader().getResources( - ConfigurationConstants.FILENAME_CONNECTOR_PROPERTIES); + Enumeration appPathConfigs = ConnectorManager.class.getClassLoader().getResources( + ConfigurationConstants.FILENAME_CONNECTOR_PROPERTIES); while (appPathConfigs.hasMoreElements()) { connectorConfigs.add(appPathConfigs.nextElement()); } @@ -51,8 +58,7 @@ public static List getConnectorConfigs() { // Check thread context classloader. ClassLoader ctxLoader = Thread.currentThread().getContextClassLoader(); if (ctxLoader != null) { - Enumeration ctxPathConfigs = ctxLoader.getResources( - ConfigurationConstants.FILENAME_CONNECTOR_PROPERTIES); + Enumeration ctxPathConfigs = ctxLoader.getResources(ConfigurationConstants.FILENAME_CONNECTOR_PROPERTIES); while (ctxPathConfigs.hasMoreElements()) { URL configUrl = ctxPathConfigs.nextElement(); @@ -67,4 +73,73 @@ public static List getConnectorConfigs() { return connectorConfigs; } + + public static Set getConnectorJars(String path) { + if (StringUtils.isEmpty(path)) { + return null; + } + Set jarFiles = new HashSet(); + File folder = new File(path); + if (folder.exists()) { + for (File file : folder.listFiles()) { + if (file.isDirectory()) { + jarFiles.addAll(getConnectorJars(file.getPath())); + } + if (file.getName().endsWith(".jar") && isConnectorJar(file)) { + jarFiles.add(file); + } + } + } + return jarFiles; + } + + static boolean isConnectorJar(File file) { + try { + @SuppressWarnings("resource") + JarEntry entry = new JarFile(file).getJarEntry(ConfigurationConstants.FILENAME_CONNECTOR_PROPERTIES); + return entry != null; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static void addExternalConnectorsJarsToClasspath(String path) { + if (StringUtils.isEmpty(path)) { + return; + } + + ClassLoader currentThreadClassLoader = Thread.currentThread().getContextClassLoader(); + if (currentThreadClassLoader != null) { + + // Add the 'org.apache.sqoop.connector.external.loadpath' to the classpath + // Chain the current thread classloader + ExternalConnectorJarFileLoader connectorUrlClassLoader = new ExternalConnectorJarFileLoader(new URL[] {}, + currentThreadClassLoader); + // the property always holds a path to the folder containing the jars + Set connectorJars = getConnectorJars(path); + if (connectorJars != null && !connectorJars.isEmpty()) { + for (File jar : connectorJars) { + connectorUrlClassLoader.addJarFile(jar.getPath()); + } + // Replace the thread classloader- assuming there is permission to do so + Thread.currentThread().setContextClassLoader(connectorUrlClassLoader); + } + } + } + + public static class ExternalConnectorJarFileLoader extends URLClassLoader { + public ExternalConnectorJarFileLoader(URL[] urls, ClassLoader parent) { + super(urls, parent); + } + + public void addJarFile(String path) { + String urlPath = "jar:file://" + path + "!/"; + try { + addURL(new URL(urlPath)); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } + } + + } } diff --git a/core/src/main/java/org/apache/sqoop/core/ConfigurationConstants.java b/core/src/main/java/org/apache/sqoop/core/ConfigurationConstants.java index f3411088..49e5d6ff 100644 --- a/core/src/main/java/org/apache/sqoop/core/ConfigurationConstants.java +++ b/core/src/main/java/org/apache/sqoop/core/ConfigurationConstants.java @@ -76,6 +76,13 @@ public final class ConfigurationConstants { public static final String DRIVER_AUTO_UPGRADE = "org.apache.sqoop.driver.autoupgrade"; + /** + # Support loading external connector jars only + # The loader will look for sqoopconnector.properties file in the jar before loading + # "/path/to/external/connectors/": Add all the connector JARs in the specified folder + */ + public static final String EXTERNAL_CONNECTOR_LOAD_PATH = "org.apache.sqoop.connector.external.loadpath"; + /** * Enable Sqoop App to kill Tomcat in case that it will fail to load. */ diff --git a/core/src/test/java/org/apache/sqoop/connector/TestConnectorManagerUtils.java b/core/src/test/java/org/apache/sqoop/connector/TestConnectorManagerUtils.java new file mode 100644 index 00000000..18f8edb9 --- /dev/null +++ b/core/src/test/java/org/apache/sqoop/connector/TestConnectorManagerUtils.java @@ -0,0 +1,64 @@ +package org.apache.sqoop.connector; + +import static org.testng.AssertJUnit.assertFalse; +import static org.testng.AssertJUnit.assertTrue; +import static org.testng.AssertJUnit.assertNull; +import static org.testng.AssertJUnit.assertEquals; +import org.apache.sqoop.utils.ClassUtils; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; +import org.testng.AssertJUnit; + +import java.io.File; +import java.net.URL; +import java.util.List; +import java.util.Set; + +public class TestConnectorManagerUtils { + + private String workingDir; + + @BeforeMethod(alwaysRun = true) + public void setUp() { + workingDir = System.getProperty("user.dir"); + } + + @Test + public void testGetConnectorJarsNullPath() { + Set files = ConnectorManagerUtils.getConnectorJars(null); + assertNull(files); + } + + @Test + public void testGetConnectorJarsNonNullPath() { + String path = workingDir + "/src/test/resources"; + Set files = ConnectorManagerUtils.getConnectorJars(path); + assertEquals(1, files.size()); + } + + @Test + public void testIsConnectorJar() { + String path = workingDir + "/src/test/resources/test-connector.jar"; + File connectorJar = new File(path); + assertTrue(connectorJar.exists()); + assertTrue(ConnectorManagerUtils.isConnectorJar(connectorJar)); + } + + @Test + public void testIsNotConnectorJar() { + String path = workingDir + "/src/test/resources/test-non-connector.jar"; + File file = new File(path); + assertTrue(file.exists()); + assertFalse(ConnectorManagerUtils.isConnectorJar(file)); + } + + @Test + public void testAddExternalConnectorJarToClasspath() { + String path = workingDir + "/src/test/resources"; + ConnectorManagerUtils.addExternalConnectorsJarsToClasspath(path); + List urls = ConnectorManagerUtils.getConnectorConfigs(); + assertEquals(1, urls.size()); + ClassUtils.loadClass("org.apache.sqoop.connector.jdbc.GenericJdbcConnector"); + } + +} diff --git a/core/src/test/resources/test-connector.jar b/core/src/test/resources/test-connector.jar new file mode 100644 index 0000000000000000000000000000000000000000..fd3b11686b0776aa8e40cbb9a211c9f1fbc27868 GIT binary patch literal 55938 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 F9ss#v+YSH# literal 0 HcmV?d00001 diff --git a/core/src/test/resources/test-non-connector.jar b/core/src/test/resources/test-non-connector.jar new file mode 100644 index 0000000000000000000000000000000000000000..01f82ca733e3dd9974d5afcf4e368b01941a7710 GIT binary patch literal 19827 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 getSecurityConfiguration() { protected Map getConnectorManagerConfiguration() { Map properties = new HashMap(); - - properties.put("org.apache.sqoop.connector.autoupgrade", "true"); - + properties.put(ConfigurationConstants.CONNECTOR_AUTO_UPGRADE, "true"); return properties; } protected Map getDriverManagerConfiguration() { Map properties = new HashMap(); + properties.put(ConfigurationConstants.DRIVER_AUTO_UPGRADE, "true"); + return properties; + } - properties.put("org.apache.sqoop.driver.autoupgrade", "true"); - + protected Map getExternalConnectorLoadPathConfiguration() { + Map properties = new HashMap(); + properties.put(ConfigurationConstants.EXTERNAL_CONNECTOR_LOAD_PATH, ""); return properties; } }