/******************************************************************************* * Copyright (c) 2016 hangum. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v2.1 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * * Contributors: * hangum - initial API and implementation ******************************************************************************/ package com.hangum.tadpole.engine.initialize; import java.io.File; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoader; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; /** * Jar Class loader * * @author hangum * */ public class JDBCDriverLoader { private static final Logger logger = Logger.getLogger(JDBCDriverLoader.class); /** * add jar loader of file * * @param strFile * @throws Exception */ public static void addJarFile(String strFile) throws Exception { File file = new File(strFile); if(file.isFile()) { addJARLoader(new Object[]{file.toURI().toURL()}); } } /** * add JAR Loader of dir * * @param strDir * @throws Exception */ public static void addJARDir(String strDir) throws Exception { // if(logger.isDebugEnabled()) logger.debug("--> JAR path : " + strDir); File fileDir = new File(strDir); if(fileDir.isDirectory()) { File[] files = fileDir.listFiles(); if(files != null) { for (File file : files) { if(file.isDirectory()) { addJARDir(file.getAbsolutePath()); } else { if(StringUtils.endsWithIgnoreCase(file.getName(), ".jar")) { addJARLoader(new Object[]{file.toURI().toURL()}); } } } } } else { if(StringUtils.endsWithIgnoreCase(fileDir.getName(), ".jar")) { addJARLoader(new Object[]{fileDir.toURI().toURL()}); } } } /** * Add jar loader * * @param jarArray * @throws Exception */ private static void addJARLoader(Object[] jarArray) throws Exception { URLClassLoader systemClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader(); try { Method method = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class}); method.setAccessible(true); method.invoke(systemClassLoader, jarArray); } catch (Throwable t) { logger.error("jar loader", t); } } }