001/*
002 * Copyright (c) 2003-2010 The Regents of the University of California.
003 * All rights reserved.
004 *
005 * '$Author: welker $'
006 * '$Date: 2010-05-06 05:21:26 +0000 (Thu, 06 May 2010) $' 
007 * '$Revision: 24234 $'
008 * 
009 * Permission is hereby granted, without written agreement and without
010 * license or royalty fees, to use, copy, modify, and distribute this
011 * software and its documentation for any purpose, provided that the above
012 * copyright notice and the following two paragraphs appear in all copies
013 * of this software.
014 *
015 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
016 * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
017 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
018 * THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
019 * SUCH DAMAGE.
020 *
021 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
022 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
023 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
024 * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
025 * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
026 * ENHANCEMENTS, OR MODIFICATIONS.
027 *
028 */
029
030package org.kepler.objectmanager.classloader;
031
032import java.io.IOException;
033import java.net.JarURLConnection;
034import java.net.URL;
035import java.net.URLClassLoader;
036import java.util.jar.Attributes;
037
038/**
039 * @author tao This class will load the given jar files(specified by URL) into
040 *         JVM. This class will suport to Object manager to dynamic load jar
041 *         files into memory
042 */
043public class JarClassLoader extends URLClassLoader {
044        private URL[] url;
045
046        /**
047         * Constructor (currently we only support url points to jar file rather than
048         * the directory
049         * 
050         * @param url
051         *            The url array which point jar files
052         */
053        public JarClassLoader(URL[] url) {
054                super(url);
055                this.url = url;
056        }
057
058        /**
059         * This method will load classes in the jar files into jvm
060         * 
061         */
062        public void loadJarFiles() throws IOException, ClassNotFoundException {
063                if (url != null) {
064                        int size = url.length;
065                        for (int i = 0; i < size; i++) {
066                                URL u = url[i];
067                                loadOneJarFile(u);
068                        }
069                }
070        }
071
072        private void loadOneJarFile(URL u) throws IOException,
073                        ClassNotFoundException {
074                URL jarURL = new URL("jar", "", u + "!/");
075                String mainClassName = null;
076                // get main class name in the jar
077                JarURLConnection connection = (JarURLConnection) jarURL
078                                .openConnection();
079                Attributes attribute = connection.getMainAttributes();
080                if (attribute != null) {
081                        mainClassName = attribute.getValue(Attributes.Name.MAIN_CLASS);
082                        loadClass(mainClassName);
083                }
084
085        }
086}