| 1 21 22 package org.opensubsystems.core.persist.db; 23 24 import java.util.Map ; 25 import java.util.HashMap ; 26 import java.util.logging.Logger ; 27 28 import org.opensubsystems.core.error.OSSException; 29 import org.opensubsystems.core.util.ClassFactory; 30 import org.opensubsystems.core.util.GlobalConstants; 31 import org.opensubsystems.core.util.Log; 32 33 44 public class DatabaseDependentClassManager 45 { 46 48 51 private static final String IMPL_LOCK = "IMPL_LOCK"; 52 53 55 58 protected ClassFactory m_classFactory; 59 60 64 private Map m_mpClassCache; 65 66 68 71 private static Logger s_logger = Log.getInstance(DatabaseDependentClassManager.class); 72 73 76 private static DatabaseDependentClassManager s_defaultInstance; 77 78 80 83 public DatabaseDependentClassManager( 84 ) 85 { 86 m_classFactory = new DatabaseDependentClassFactory(); 87 m_mpClassCache = new HashMap (); 88 } 89 90 100 public static Object getInstance( 101 Class dependentClass 102 ) throws OSSException 103 { 104 return getManagerInstance().getDependentInstance(dependentClass); 105 } 106 107 115 public static DatabaseDependentClassManager getManagerInstance( 116 ) throws OSSException 117 { 118 if (s_defaultInstance == null) 119 { 120 synchronized (IMPL_LOCK) 123 { 124 setManagerInstance((DatabaseDependentClassManager) 125 ClassFactory.getInstance().createInstance( 126 DatabaseDependentClassManager.class, 127 DatabaseDependentClassManager.class)); 128 } 129 } 130 131 return s_defaultInstance; 132 } 133 134 141 public static void setManagerInstance( 142 DatabaseDependentClassManager defaultInstance 143 ) 144 { 145 if (GlobalConstants.ERROR_CHECKING) 146 { 147 assert defaultInstance != null : "Default instance cannot be null"; 148 } 149 150 synchronized (IMPL_LOCK) 151 { 152 s_defaultInstance = defaultInstance; 153 s_logger.info("Default database dependent class manager is " 154 + s_defaultInstance.getClass().getName()); 155 } 156 } 157 158 171 public Object getDependentInstance( 172 Class dependentClass 173 ) throws OSSException 174 { 175 Object classInstance; 176 177 classInstance = m_mpClassCache.get(dependentClass.getName()); 178 if (classInstance == null) 179 { 180 synchronized (m_mpClassCache) 181 { 182 classInstance = m_classFactory.createInstance(dependentClass); 183 m_mpClassCache.put(dependentClass.getName(), classInstance); 184 } 185 } 186 187 return classInstance; 188 } 189 } 190 | Popular Tags |