00001
00029 package org.objectweb.jonas_ejb.container.jorm;
00030
00031 import java.util.HashMap;
00032 import java.util.Map;
00033 import java.util.Properties;
00034
00035 import org.objectweb.jonas_ejb.container.JContainer;
00036 import org.objectweb.jonas_ejb.container.TraceEjb;
00037
00038 import org.objectweb.jorm.lib.JormConfiguratorImpl;
00039 import org.objectweb.jorm.api.JormConfigurator;
00040 import org.objectweb.jorm.api.PException;
00041 import org.objectweb.jorm.api.PMapper;
00042 import org.objectweb.jorm.lib.Mapper;
00043 import org.objectweb.jorm.util.api.Loggable;
00044
00045 import org.objectweb.medor.eval.prefetch.lib.PrefetchCacheImpl;
00046
00047 import org.objectweb.util.monolog.api.BasicLevel;
00048 import org.objectweb.util.monolog.api.Logger;
00049
00058 public class MapperManager {
00059
00063 private static MapperManager singleton = null;
00064
00068 public static MapperManager getInstance() {
00069 if (singleton == null) {
00070 singleton = new MapperManager();
00071 }
00072 return singleton;
00073 }
00074
00078 private Logger logger = null;
00079
00086 private HashMap mappers = new HashMap();
00087
00091 private JormConfigurator jormConfigurator;
00092
00093 protected MapperManager() {
00094 logger = TraceEjb.logger;
00095 jormConfigurator = new JormConfiguratorImpl();
00096 Properties prop = new Properties();
00097 prop.put("jorm.generator", "org.objectweb.jorm.generator.lib.JormGenerator");
00098 prop.put("jorm.mimanager", "org.objectweb.jorm.metainfo.lib.JormManager");
00099 prop.put("jorm.parser", "org.objectweb.jorm.xml2mi.lib.BasicDomParser");
00100 prop.put("jorm.verifier", "org.objectweb.jorm.verifier.lib.JormVerifier");
00101 prop.put("jorm.writer", "org.objectweb.jorm.mi2xml.lib.BasicDomWriter");
00102 prop.put("jorm.mapper.list", "rdb");
00103 prop.put("jorm.mapper.mifactory.rdb", "org.objectweb.jorm.mapper.rdb.metainfo.RdbMappingFactory");
00104 prop.put("jorm.mapper.mopfactory.rdb", "org.objectweb.jorm.mapper.rdb.generator.RdbMOPFactory");
00105 prop.put("jorm.mapper.gcmapping.rdb", "org.objectweb.jorm.mapper.rdb.genclass.RdbGenClassMapping");
00106 prop.put("jorm.mapper.schmgr.rdb", "org.objectweb.jorm.mapper.rdb.lib.RdbPMappingStructuresManager");
00107 jormConfigurator.configure(prop);
00108 jormConfigurator.setLoggerFactory(TraceEjb.loggerFactory);
00109 logger.log(BasicLevel.DEBUG, "JormConfigurator created");
00110 }
00111
00119 public PMapper getMapper(JContainer c, Object cf) {
00120 Map m = (Map) mappers.get(c);
00121 return (m == null ? null : (Mapper) m.get(cf));
00122 }
00123
00137 public PMapper addMapper(PMapper m, JContainer c, Object cf) throws PException {
00138 Map map;
00139 PMapper pm = null;
00140 synchronized (mappers) {
00141 map = (Map) mappers.get(c);
00142 if (map == null) {
00143 map = new HashMap();
00144 mappers.put(c, map);
00145 }
00146 }
00147 pm = (PMapper) map.get(cf);
00148 if (pm != null) {
00149 return pm;
00150 }
00151 synchronized(map) {
00152 pm = (PMapper) map.get(cf);
00153 if (pm == null) {
00154 pm = m;
00155
00156 m.setPrefetchCache(new PrefetchCacheImpl());
00157
00158 if (TraceEjb.loggerFactory == null) {
00159 m.setLogger(logger);
00160 } else {
00161 m.setLogger(TraceEjb.loggerFactory.getLogger(TraceEjb.prefix
00162 + ".mapper." + m.getMapperName()));
00163 if (m instanceof Loggable) {
00164 ((Loggable) m).setLoggerFactory(TraceEjb.loggerFactory);
00165 }
00166 }
00167
00168 m.start();
00169
00170 map.put(cf, m);
00171 if (logger.isLoggable(BasicLevel.DEBUG)) {
00172 logger.log(BasicLevel.DEBUG, "Mapper (" + m.getMapperName()
00173 + ", " + cf + ") initialized");
00174 }
00175 }
00176 }
00177 return pm;
00178 }
00179
00180 public Logger getLogger() {
00181 return logger;
00182 }
00183
00184 public JormConfigurator getJormConfigurator() {
00185 return jormConfigurator;
00186 }
00187 }