001
014
015 package com.liferay.portal.kernel.util;
016
017 import com.liferay.portal.kernel.security.pacl.permission.PortalRuntimePermission;
018
019 import java.util.Map;
020 import java.util.concurrent.ConcurrentHashMap;
021
022
027 public class ClassLoaderPool {
028
029
044 public static ClassLoader getClassLoader(String contextName) {
045 PortalRuntimePermission.checkGetBeanProperty(ClassLoaderPool.class);
046
047 ClassLoader classLoader = _classLoaders.get(contextName);
048
049 if (classLoader == null) {
050 classLoader = PortalClassLoaderUtil.getClassLoader();
051 }
052
053 if (classLoader == null) {
054 Thread currentThread = Thread.currentThread();
055
056 classLoader = currentThread.getContextClassLoader();
057 }
058
059 return classLoader;
060 }
061
062
074 public static String getContextName(ClassLoader classLoader) {
075 if (classLoader == null) {
076 return StringPool.BLANK;
077 }
078
079 String contextName = _contextNames.get(classLoader);
080
081 if (contextName == null) {
082 contextName = StringPool.BLANK;
083 }
084
085 return contextName;
086 }
087
088 public static void register(String contextName, ClassLoader classLoader) {
089 PortalRuntimePermission.checkGetBeanProperty(ClassLoaderPool.class);
090
091 _classLoaders.put(contextName, classLoader);
092 _contextNames.put(classLoader, contextName);
093 }
094
095 public static void unregister(ClassLoader classLoader) {
096 PortalRuntimePermission.checkGetBeanProperty(ClassLoaderPool.class);
097
098 String contextName = _contextNames.remove(classLoader);
099
100 if (contextName != null) {
101 _classLoaders.remove(contextName);
102 }
103 }
104
105 public static void unregister(String contextName) {
106 PortalRuntimePermission.checkGetBeanProperty(ClassLoaderPool.class);
107
108 ClassLoader classLoader = _classLoaders.remove(contextName);
109
110 if (classLoader != null) {
111 _contextNames.remove(classLoader);
112 }
113 }
114
115 private static Map<String, ClassLoader> _classLoaders =
116 new ConcurrentHashMap<String, ClassLoader>();
117 private static Map<ClassLoader, String> _contextNames =
118 new ConcurrentHashMap<ClassLoader, String>();
119
120 }