001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package org.jboss.mx.loading;
023:
024: import java.net.URL;
025:
026: /** An extension of UnifiedClassLoader that manages a thread based loading
027: * strategy to work around the locking problems associated with the VM
028: * initiated locking due to the synchronized loadClassInternal method of
029: * ClassLoader which cannot be overriden.
030:
031: * @author <a href="scott.stark@jboss.org">Scott Stark</a>
032: * @version $Revision: 57200 $
033: */
034: public class UnifiedClassLoader3 extends UnifiedClassLoader implements
035: UnifiedClassLoader3MBean {
036: // Static --------------------------------------------------------
037:
038: // Attributes ----------------------------------------------------
039:
040: // Constructors --------------------------------------------------
041: /**
042: * Construct a <tt>UnifiedClassLoader</tt> without registering it to the
043: * classloader repository.
044: *
045: * @param url the single URL to load classes from.
046: */
047: public UnifiedClassLoader3(URL url) {
048: this (url, null);
049: }
050:
051: /**
052: * Construct a <tt>UnifiedClassLoader</tt> without registering it to the
053: * classloader repository.
054: *
055: * @param url the single URL to load classes from.
056: * @param origURL the possibly null original URL from which url may
057: * be a local copy or nested jar.
058: */
059: public UnifiedClassLoader3(URL url, URL origURL) {
060: super (url, origURL);
061: }
062:
063: /** Construct a UnifiedClassLoader and associate it with the given
064: * repository.
065: * @param url The single URL to load classes from.
066: * @param origURL the possibly null original URL from which url may
067: * be a local copy or nested jar.
068: * @param repository the repository this classloader delegates to
069: */
070: public UnifiedClassLoader3(URL url, URL origURL,
071: LoaderRepository repository) {
072: this (url, origURL);
073:
074: // set the repository reference
075: this .setRepository(repository);
076: }
077:
078: /** Construct a UnifiedClassLoader and associate it with the given
079: * repository.
080: * @param url The single URL to load classes from.
081: * @param origURL the possibly null original URL from which url may
082: * be a local copy or nested jar.
083: * @param parent the parent class loader to use
084: * @param repository the repository this classloader delegates to
085: */
086: public UnifiedClassLoader3(URL url, URL origURL,
087: ClassLoader parent, LoaderRepository repository) {
088: super (url, origURL, parent);
089:
090: // set the repository reference
091: this .setRepository(repository);
092: }
093:
094: // Public --------------------------------------------------------
095:
096: /**
097: * Retruns a string representaion of this UCL.
098: */
099: public String toString() {
100: StringBuffer tmp = new StringBuffer(super .toString());
101: tmp.setCharAt(tmp.length() - 1, ',');
102: tmp.append("addedOrder=");
103: tmp.append(getAddedOrder());
104: tmp.append('}');
105: return tmp.toString();
106: }
107: }
|