/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.portal.kernel.util;
/**
* @author Raymond Augé
* @author Shuyang Zhou
*/
public class ClassLoaderUtil {
public static ClassLoader getAggregatePluginsClassLoader(
String[] servletContextNames, boolean addContextClassLoader) {
return _pacl.getAggregatePluginsClassLoader(
servletContextNames, addContextClassLoader);
}
public static ClassLoader getClassLoader(Class<?> clazz) {
return _pacl.getClassLoader(clazz);
}
public static ClassLoader getContextClassLoader() {
return _pacl.getContextClassLoader();
}
public static ClassLoader getPluginClassLoader(String servletContextName) {
return _pacl.getPluginClassLoader(servletContextName);
}
public static ClassLoader getPortalClassLoader() {
return _pacl.getPortalClassLoader();
}
public static void setContextClassLoader(ClassLoader classLoader) {
_pacl.setContextClassLoader(classLoader);
}
public static class NoPACL implements PACL {
@Override
public ClassLoader getAggregatePluginsClassLoader(
String[] servletContextNames, boolean addContextClassLoader) {
ClassLoader[] classLoaders = null;
int offset = 0;
if (addContextClassLoader) {
classLoaders = new ClassLoader[servletContextNames.length + 1];
Thread currentThread = Thread.currentThread();
classLoaders[0] = currentThread.getContextClassLoader();
offset = 1;
}
else {
classLoaders = new ClassLoader[servletContextNames.length];
}
for (int i = 0; i < servletContextNames.length; i++) {
classLoaders[offset + i] = ClassLoaderPool.getClassLoader(
servletContextNames[i]);
}
return AggregateClassLoader.getAggregateClassLoader(classLoaders);
}
@Override
public ClassLoader getClassLoader(Class<?> clazz) {
return clazz.getClassLoader();
}
@Override
public ClassLoader getContextClassLoader() {
Thread currentThread = Thread.currentThread();
return currentThread.getContextClassLoader();
}
@Override
public ClassLoader getPluginClassLoader(String servletContextName) {
return ClassLoaderPool.getClassLoader(servletContextName);
}
@Override
public ClassLoader getPortalClassLoader() {
return PortalClassLoaderUtil.getClassLoader();
}
@Override
public void setContextClassLoader(ClassLoader classLoader) {
Thread thread = Thread.currentThread();
thread.setContextClassLoader(classLoader);
}
}
public interface PACL {
public ClassLoader getAggregatePluginsClassLoader(
String[] servletContextNames, boolean addContextClassLoader);
public ClassLoader getClassLoader(Class<?> clazz);
public ClassLoader getContextClassLoader();
public ClassLoader getPluginClassLoader(String servletContextName);
public ClassLoader getPortalClassLoader();
public void setContextClassLoader(ClassLoader classLoader);
}
private static final PACL _pacl = new NoPACL();
}