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
040 public static ClassLoader getClassLoader(String contextName) {
041 PortalRuntimePermission.checkGetBeanProperty(ClassLoaderPool.class);
042
043 ClassLoader classLoader = null;
044
045 if ((contextName != null) && !contextName.equals(StringPool.NULL)) {
046 classLoader = _classLoaders.get(contextName);
047 }
048
049 if (classLoader == null) {
050 Thread currentThread = Thread.currentThread();
051
052 classLoader = currentThread.getContextClassLoader();
053 }
054
055 return classLoader;
056 }
057
058
070 public static String getContextName(ClassLoader classLoader) {
071 if (classLoader == null) {
072 return StringPool.NULL;
073 }
074
075 String contextName = _contextNames.get(classLoader);
076
077 if (contextName == null) {
078 contextName = StringPool.NULL;
079 }
080
081 return contextName;
082 }
083
084 public static void register(String contextName, ClassLoader classLoader) {
085 PortalRuntimePermission.checkGetBeanProperty(ClassLoaderPool.class);
086
087 _classLoaders.put(contextName, classLoader);
088 _contextNames.put(classLoader, contextName);
089 }
090
091 public static void unregister(ClassLoader classLoader) {
092 PortalRuntimePermission.checkGetBeanProperty(ClassLoaderPool.class);
093
094 String contextName = _contextNames.remove(classLoader);
095
096 if (contextName != null) {
097 _classLoaders.remove(contextName);
098 }
099 }
100
101 public static void unregister(String contextName) {
102 PortalRuntimePermission.checkGetBeanProperty(ClassLoaderPool.class);
103
104 ClassLoader classLoader = _classLoaders.remove(contextName);
105
106 if (classLoader != null) {
107 _contextNames.remove(classLoader);
108 }
109 }
110
111 private static final Map<String, ClassLoader> _classLoaders =
112 new ConcurrentHashMap<>();
113 private static final Map<ClassLoader, String> _contextNames =
114 new ConcurrentHashMap<>();
115
116 }