Github user nlivens commented on a diff in the pull request: https://github.com/apache/cloudstack/pull/801#discussion_r43104885 --- Diff: plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/NuageVspPluginClientLoader.java --- @@ -19,28 +19,101 @@ package net.nuage.vsp.acs; +import net.nuage.vsp.acs.client.NuageVspApiClient; +import net.nuage.vsp.acs.client.NuageVspElementClient; +import net.nuage.vsp.acs.client.NuageVspGuruClient; +import net.nuage.vsp.acs.client.NuageVspManagerClient; +import net.nuage.vsp.acs.client.NuageVspSyncClient; +import org.apache.log4j.Logger; + +import javax.naming.ConfigurationException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; public class NuageVspPluginClientLoader { - private static NuageVspPluginClientLoader nuageVspPluginClientClassloader; - private ClassLoader loader = null; + private ClassLoader _loader = null; + private static final Logger s_logger = Logger.getLogger(NuageVspPluginClientLoader.class); + + private NuageVspApiClient _nuageVspApiClient; + private NuageVspElementClient _nuageVspElementClient; + private NuageVspGuruClient _nuageVspGuruClient; + private NuageVspManagerClient _nuageVspManagerClient; + private NuageVspSyncClient _nuageVspSyncClient; + + private static final String NUAGE_PLUGIN_CLIENT_JAR_FILE = "/usr/share/nuagevsp/lib/nuage-vsp-acs-client.jar"; + private static final String NUAGE_VSP_API_CLIENT_IMPL = "net.nuage.vsp.acs.client.impl.NuageVspApiClientImpl"; + private static final String NUAGE_VSP_SYNC_CLIENT_IMPL = "net.nuage.vsp.acs.client.impl.NuageVspSyncClientImpl"; + private static final String NUAGE_VSP_ELEMENT_CLIENT_IMPL = "net.nuage.vsp.acs.client.impl.NuageVspElementClientImpl"; + private static final String NUAGE_VSP_GURU_CLIENT_IMPL = "net.nuage.vsp.acs.client.impl.NuageVspGuruClientImpl"; + private static final String NUAGE_VSP_MANAGER_CLIENT_IMPL = "net.nuage.vsp.acs.client.impl.NuageVspManagerClientImpl"; private NuageVspPluginClientLoader(String nuagePluginClientJarLocation) { try { - loader = URLClassLoader.newInstance(new URL[] {new URL("jar:file:" + nuagePluginClientJarLocation + "!/")}, + _loader = URLClassLoader.newInstance(new URL[] {new URL("jar:file:" + nuagePluginClientJarLocation + "!/")}, getClass().getClassLoader()); } catch (MalformedURLException e) { - e.printStackTrace(); + throw new IllegalArgumentException(e); } } - public static ClassLoader getClassLoader(String nuagePluginClientJarLocation) { - if (nuageVspPluginClientClassloader == null) { - nuageVspPluginClientClassloader = new NuageVspPluginClientLoader(nuagePluginClientJarLocation); + public static NuageVspPluginClientLoader getClientLoader(String relativePath, String[] cmsUserInfo, int numRetries, int retryInterval, + String nuageVspCmsId) throws ConfigurationException { + NuageVspPluginClientLoader nuageVspPluginClientClassloader = new NuageVspPluginClientLoader(NUAGE_PLUGIN_CLIENT_JAR_FILE); + nuageVspPluginClientClassloader.loadClasses(relativePath, cmsUserInfo, numRetries, retryInterval, nuageVspCmsId); + return nuageVspPluginClientClassloader; + } + + private void loadClasses(String relativePath, String[] cmsUserInfo, int numRetries, int retryInterval, String nuageVspCmsId) throws ConfigurationException { + try { + Class<?> nuageVspApiClientClass = Class.forName(NUAGE_VSP_API_CLIENT_IMPL, true, _loader); + Class<?> nuageVspSyncClientClass = Class.forName(NUAGE_VSP_SYNC_CLIENT_IMPL, true, _loader); + Class<?> nuageVspGuruClientClass = Class.forName(NUAGE_VSP_GURU_CLIENT_IMPL, true, _loader); + Class<?> nuageVspElementClientClass = Class.forName(NUAGE_VSP_ELEMENT_CLIENT_IMPL, true, _loader); + Class<?> nuageVspManagerClientClass = Class.forName(NUAGE_VSP_MANAGER_CLIENT_IMPL, true, _loader); + + //Instantiate the instances + _nuageVspApiClient = (NuageVspApiClient)nuageVspApiClientClass.newInstance(); + _nuageVspApiClient.setNuageVspHost(relativePath, cmsUserInfo, numRetries, retryInterval, nuageVspCmsId); + _nuageVspSyncClient = (NuageVspSyncClient)nuageVspSyncClientClass.newInstance(); + _nuageVspSyncClient.setNuageVspApiClient(_nuageVspApiClient); + _nuageVspGuruClient = (NuageVspGuruClient)nuageVspGuruClientClass.newInstance(); + _nuageVspGuruClient.setNuageVspApiClient(_nuageVspApiClient); + _nuageVspElementClient = (NuageVspElementClient)nuageVspElementClientClass.newInstance(); + _nuageVspElementClient.setNuageVspApiClient(_nuageVspApiClient); + _nuageVspManagerClient = (NuageVspManagerClient)nuageVspManagerClientClass.newInstance(); + _nuageVspManagerClient.setNuageVspApiClient(_nuageVspApiClient); + } catch (ClassNotFoundException cnfe) { + s_logger.error("Error while loading classes of Nuage VSP client", cnfe); + throw new ConfigurationException("Error while loading classes of Nuage VSP client"); + } catch (InstantiationException ie) { + s_logger.error("Error while initializing classes of Nuage VSP client", ie); + throw new ConfigurationException("Error while initializing classes of Nuage VSP client"); + } catch (IllegalAccessException iae) { + s_logger.error("Error while accessing classes of Nuage VSP client", iae); + throw new ConfigurationException("Error while accessing classes of Nuage VSP client"); --- End diff -- <code>ConfigurationException</code> doesn't have a constructor which accepts another exception.
--- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. ---