MapperManager.java

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                 //Allocate a new Cache of PreftechBuffer
00156                 m.setPrefetchCache(new PrefetchCacheImpl());
00157                 //Add a logger
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                 // start the mapper
00168                 m.start();
00169                 //register mapper
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 }

Generated on Tue Feb 15 15:05:39 2005 for JOnAS by  doxygen 1.3.9.1