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 else {
074 classLoaders = new ClassLoader[servletContextNames.length];
075 }
076
077 for (int i = 0; i < servletContextNames.length; i++) {
078 classLoaders[offset + i] = ClassLoaderPool.getClassLoader(
079 servletContextNames[i]);
080 }
081
082 return AggregateClassLoader.getAggregateClassLoader(classLoaders);
083 }
084
085 @Override
086 public ClassLoader getClassLoader(Class<?> clazz) {
087 return clazz.getClassLoader();
088 }
089
090 @Override
091 public ClassLoader getContextClassLoader() {
092 Thread currentThread = Thread.currentThread();
093
094 return currentThread.getContextClassLoader();
095 }
096
097 @Override
098 public ClassLoader getPluginClassLoader(String servletContextName) {
099 return ClassLoaderPool.getClassLoader(servletContextName);
100 }
101
102 @Override
103 public ClassLoader getPortalClassLoader() {
104 return PortalClassLoaderUtil.getClassLoader();
105 }
106
107 @Override
108 public void setContextClassLoader(ClassLoader classLoader) {
109 Thread thread = Thread.currentThread();
110
111 thread.setContextClassLoader(classLoader);
112 }
113
114 }
115
116 public static interface PACL {
117
118 public ClassLoader getAggregatePluginsClassLoader(
119 String[] servletContextNames, boolean addContextClassLoader);
120
121 public ClassLoader getClassLoader(Class<?> clazz);
122
123 public ClassLoader getContextClassLoader();
124
125 public ClassLoader getPluginClassLoader(String servletContextName);
126
127 public ClassLoader getPortalClassLoader();
128
129 public void setContextClassLoader(ClassLoader classLoader);
130
131 }
132
133 private static PACL _pacl = new NoPACL();
134
135 }