/* * RED5 Open Source Flash Server - http://code.google.com/p/red5/ * * Copyright 2006-2012 by respective authors (see below). All rights reserved. * * Licensed 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.red5.classloading; import java.io.InputStream; import java.net.URL; import org.quartz.spi.ClassLoadHelper; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; /** * A <code>ClassLoadHelper</code> that determines the correct class loader to * use for a scheduler. * * @see org.quartz.spi.ClassLoadHelper * * @author Paul Gregoire (mondain@gmail.com) */ public class QuartzClassLoadHelper implements ClassLoadHelper { private static Logger log = Red5LoggerFactory.getLogger(QuartzClassLoadHelper.class); private ClassLoader initClassLoader; /* ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = this.getClass().getClassLoader(); result= classLoader.getResourceAsStream( name ); } else { result= classLoader.getResourceAsStream( name ); if (result == null) { classLoader = this.getClass().getClassLoader(); result= classLoader.getResourceAsStream( name ); } } */ /** * Called to give the ClassLoadHelper a chance to initialize itself, * including the opportunity to "steal" the class loader off of the calling * thread, which is the thread that is initializing Quartz. */ public void initialize() { initClassLoader = Thread.currentThread().getContextClassLoader(); log.debug("Initialized with classloader: {}", initClassLoader); } /** * Return the class with the given name. */ public Class<?> loadClass(String name) throws ClassNotFoundException { return getClassLoader().loadClass(name); } /** * Finds a resource with a given name. This method returns null if no * resource with this name is found. * @param name name of the desired resource * @return a java.net.URL object */ public URL getResource(String name) { return getClassLoader().getResource(name); } /** * Finds a resource with a given name. This method returns null if no * resource with this name is found. * @param name name of the desired resource * @return a java.io.InputStream object */ public InputStream getResourceAsStream(String name) { return getClassLoader().getResourceAsStream(name); } /** * Enable sharing of the class-loader with 3rd party (e.g. digester). * * @return the class-loader user be the helper. */ public ClassLoader getClassLoader() { log.debug("Class classloader: {} Thread classloader: {}", this.getClass().getClassLoader(), Thread.currentThread().getContextClassLoader()); return Thread.currentThread().getContextClassLoader(); } }