001
014
015 package com.liferay.portal.kernel.util;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019
020 import java.util.Map;
021 import java.util.concurrent.ConcurrentHashMap;
022
023
026 public class InstancePool {
027
028 public static boolean contains(String className) {
029 return _instance._contains(className);
030 }
031
032 public static Object get(String className) {
033 return _instance._get(className);
034 }
035
036 public static Object get(String className, boolean logErrors) {
037 return _instance._get(className, logErrors);
038 }
039
040 public static void put(String className, Object obj) {
041 _instance._put(className, obj);
042 }
043
044 public static void reset() {
045 _instance._reset();
046 }
047
048 private InstancePool() {
049 _instances = new ConcurrentHashMap<String, Object>();
050 }
051
052 private boolean _contains(String className) {
053 className = className.trim();
054
055 return _instances.containsKey(className);
056 }
057
058 private Object _get(String className) {
059 return _get(className, true);
060 }
061
062 private Object _get(String className, boolean logErrors) {
063 className = className.trim();
064
065 Object instance = _instances.get(className);
066
067 if (instance == null) {
068 ClassLoader portalClassLoader =
069 PortalClassLoaderUtil.getClassLoader();
070
071 try {
072 Class<?> clazz = portalClassLoader.loadClass(className);
073
074 instance = clazz.newInstance();
075
076 _instances.put(className, instance);
077 }
078 catch (Exception e1) {
079 if (logErrors && _log.isWarnEnabled()) {
080 _log.warn(
081 "Unable to load " + className +
082 " with the portal class loader",
083 e1);
084 }
085
086 Thread currentThread = Thread.currentThread();
087
088 ClassLoader contextClassLoader =
089 currentThread.getContextClassLoader();
090
091 try {
092 Class<?> clazz = contextClassLoader.loadClass(className);
093
094 instance = clazz.newInstance();
095
096 _instances.put(className, instance);
097 }
098 catch (Exception e2) {
099 if (logErrors) {
100 _log.error(
101 "Unable to load " + className +
102 " with the portal class loader or the " +
103 "current context class loader",
104 e2);
105 }
106 }
107 }
108 }
109
110 return instance;
111 }
112
113 private void _put(String className, Object obj) {
114 className = className.trim();
115
116 _instances.put(className, obj);
117 }
118
119 private void _reset() {
120 _instances.clear();
121 }
122
123 private static Log _log = LogFactoryUtil.getLog(InstancePool.class);
124
125 private static InstancePool _instance = new InstancePool();
126
127 private final Map<String, Object> _instances;
128
129 }