| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.oodt.cas.catalog.util; |
| |
| //JDK imports |
| import java.io.File; |
| import java.io.FileFilter; |
| import java.net.URL; |
| import java.net.URLClassLoader; |
| import java.util.List; |
| import java.util.Vector; |
| import java.util.logging.Level; |
| import java.util.logging.Logger; |
| |
| //OODT imports |
| import org.apache.oodt.cas.metadata.util.PathUtils; |
| |
| /** |
| * |
| * @author bfoster |
| * @version $Revision$ |
| * |
| * <p>Java ClassLoader for loading plugin classes in Catalogs and QueryExpressions</p>. |
| */ |
| public class PluginClassLoader extends URLClassLoader { |
| |
| private static final Logger LOG = Logger.getLogger(PluginClassLoader.class.getName()); |
| |
| public PluginClassLoader() { |
| super(getPluginURLs()); |
| } |
| |
| public PluginClassLoader(ClassLoader parent) { |
| super(new URL[0], parent); |
| } |
| |
| protected void addURL(PluginURL pluginURL) { |
| super.addURL(pluginURL.getURL()); |
| } |
| |
| protected void addURLs(List<URL> urls) { |
| for (URL url : urls) |
| this.addURL(url); |
| } |
| |
| public static URL[] getPluginURLs() { |
| List<URL> urls = new Vector<URL>(); |
| try { |
| String pluginDirs = System.getProperty("org.apache.oodt.cas.catalog.plugin.dirs"); |
| if (pluginDirs != null) { |
| for (String pluginDir : PathUtils.doDynamicReplacement(pluginDirs).split(",")) { |
| File[] jarFiles = new File(pluginDir).listFiles(new FileFilter() { |
| public boolean accept(File pathname) { |
| return pathname.getName().endsWith(".jar"); |
| } |
| }); |
| for (File jarFile : jarFiles) { |
| try { |
| urls.add(jarFile.toURL()); |
| }catch (Exception e) { |
| LOG.log(Level.SEVERE, "Failed to load jar file '" + jarFile + "' : " + e.getMessage(), e); |
| } |
| |
| } |
| } |
| } |
| }catch (Exception e) {} |
| return urls.toArray(new URL[urls.size()]); |
| } |
| |
| public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { |
| try { |
| Class<?> clazz = this.findLoadedClass(name); |
| if (clazz == null) |
| clazz = this.findClass(name); |
| return clazz; |
| }catch (Exception e) {} |
| return super.loadClass(name, resolve); |
| } |
| |
| } |