001
014
015 package com.liferay.portal.util;
016
017 import com.liferay.portal.kernel.util.AggregateClassLoader;
018 import com.liferay.portal.kernel.util.ClassLoaderPool;
019 import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
020
021
025 public class ClassLoaderUtil {
026
027 public static ClassLoader getAggregatePluginsClassLoader(
028 String[] servletContextNames, boolean addContextClassLoader) {
029
030 return _pacl.getAggregatePluginsClassLoader(
031 servletContextNames, addContextClassLoader);
032 }
033
034 public static ClassLoader getClassLoader(Class<?> clazz) {
035 return _pacl.getClassLoader(clazz);
036 }
037
038 public static ClassLoader getContextClassLoader() {
039 return _pacl.getContextClassLoader();
040 }
041
042 public static ClassLoader getPluginClassLoader(String servletContextName) {
043 return _pacl.getPluginClassLoader(servletContextName);
044 }
045
046 public static ClassLoader getPortalClassLoader() {
047 return _pacl.getPortalClassLoader();
048 }
049
050 public static void setContextClassLoader(ClassLoader classLoader) {
051 _pacl.setContextClassLoader(classLoader);
052 }
053
054 public static class NoPACL implements PACL {
055
056 @Override
057 public ClassLoader getAggregatePluginsClassLoader(
058 String[] servletContextNames, boolean addContextClassLoader) {
059
060 ClassLoader[] classLoaders = null;
061
062 int offset = 0;
063
064 if (addContextClassLoader) {
065 classLoaders = new ClassLoader[servletContextNames.length + 1];
066
067 Thread currentThread = Thread.currentThread();
068
069 classLoaders[0] = currentThread.getContextClassLoader();
070
071 offset = 1;
072 }
073
074 for (int i = 0; i < servletContextNames.length; i++) {
075 classLoaders[offset + i] = ClassLoaderPool.getClassLoader(
076 servletContextNames[i]);
077 }
078
079 return AggregateClassLoader.getAggregateClassLoader(classLoaders);
080 }
081
082 @Override
083 public ClassLoader getClassLoader(Class<?> clazz) {
084 return clazz.getClassLoader();
085 }
086
087 @Override
088 public ClassLoader getContextClassLoader() {
089 Thread currentThread = Thread.currentThread();
090
091 return currentThread.getContextClassLoader();
092 }
093
094 @Override
095 public ClassLoader getPluginClassLoader(String servletContextName) {
096 return ClassLoaderPool.getClassLoader(servletContextName);
097 }
098
099 @Override
100 public ClassLoader getPortalClassLoader() {
101 return PortalClassLoaderUtil.getClassLoader();
102 }
103
104 @Override
105 public void setContextClassLoader(ClassLoader classLoader) {
106 Thread thread = Thread.currentThread();
107
108 thread.setContextClassLoader(classLoader);
109 }
110
111 }
112
113 public static interface PACL {
114
115 public ClassLoader getAggregatePluginsClassLoader(
116 String[] servletContextNames, boolean addContextClassLoader);
117
118 public ClassLoader getClassLoader(Class<?> clazz);
119
120 public ClassLoader getContextClassLoader();
121
122 public ClassLoader getPluginClassLoader(String servletContextName);
123
124 public ClassLoader getPortalClassLoader();
125
126 public void setContextClassLoader(ClassLoader classLoader);
127
128 }
129
130 private static PACL _pacl = new NoPACL();
131
132 }