001    package org.shiftone.jrat.core;
002    
003    
004    import org.shiftone.jrat.core.command.CommandletRegistry;
005    import org.shiftone.jrat.core.command.CommandletRegistryFactory;
006    import org.shiftone.jrat.core.jmx.JmxRegistry;
007    import org.shiftone.jrat.core.jmx.JmxRegistryFactory;
008    import org.shiftone.jrat.core.jmx.benchmark.Benchmark;
009    import org.shiftone.jrat.core.jmx.info.JRatInfo;
010    import org.shiftone.jrat.core.output.FileOutputFactory;
011    import org.shiftone.jrat.core.output.FileOutputRegistry;
012    import org.shiftone.jrat.core.shutdown.ShutdownRegistry;
013    import org.shiftone.jrat.inject.bytecode.Transformer;
014    import org.shiftone.jrat.util.log.Logger;
015    import org.shiftone.jrat.util.log.LoggingManager;
016    
017    
018    /**
019     * @author jeff@shiftone.org (Jeff Drost)
020     */
021    public class ServiceFactory {
022    
023        private static final Logger LOG = Logger.getLogger(ServiceFactory.class);
024        private static ServiceFactory singleton;
025    
026        public ServiceFactory() {
027            LOG.info("new");
028        }
029    
030    
031        public static synchronized ServiceFactory getInstance() {
032    
033            if (singleton == null) {
034                singleton = new ServiceFactory();
035            }
036    
037            return singleton;
038        }
039    
040        private CommandletRegistry commandletRegistry;
041    
042        public synchronized CommandletRegistry getCommandletRegistry() {
043    
044            if (commandletRegistry == null) {
045    
046                commandletRegistry = CommandletRegistryFactory.createCommandletRegistry();
047    
048            }
049    
050            return commandletRegistry;
051        }
052    
053        // --------------------------------------------------------------------
054        private JmxRegistry jmxRegistry;
055    
056        public synchronized JmxRegistry getJmxRegistry() {
057    
058            if (jmxRegistry == null) {
059                jmxRegistry = JmxRegistryFactory.createJmxRegistry();
060    
061                jmxRegistry.registerMBean(new JRatInfo(), null);
062                jmxRegistry.registerMBean(new LoggingManager(), null);
063                jmxRegistry.registerMBean(new Benchmark(), null);
064            }
065    
066            return jmxRegistry;
067        }
068    
069    
070        // --------------------------------------------------------------------
071        private FileOutputRegistry fileOutputRegistry;
072    
073        public synchronized FileOutputRegistry getFileOutputRegistry() {
074    
075            if (fileOutputRegistry == null) {
076                fileOutputRegistry = new FileOutputRegistry();
077    
078                getJmxRegistry().registerMBean(fileOutputRegistry, null);
079                getShutdownRegistry().registerShutdownListener(fileOutputRegistry);
080            }
081    
082            return fileOutputRegistry;
083        }
084    
085    
086        // --------------------------------------------------------------------
087        private FileOutputFactory fileOutputFactory;
088    
089        public synchronized FileOutputFactory getFileOutputFactory() {
090    
091            if (fileOutputFactory == null) {
092                fileOutputFactory = new FileOutputFactory(getFileOutputRegistry());
093            }
094    
095            return fileOutputFactory;
096        }
097    
098    
099        // --------------------------------------------------------------------
100        private ShutdownRegistry shutdownRegistry;
101    
102        public synchronized ShutdownRegistry getShutdownRegistry() {
103    
104            if (shutdownRegistry == null) {
105                shutdownRegistry = new ShutdownRegistry();
106    
107                getJmxRegistry().registerMBean(shutdownRegistry, null);
108            }
109    
110            return shutdownRegistry;
111        }
112    
113    
114        // --------------------------------------------------------------------
115        private Transformer transformer;
116    
117        public synchronized Transformer getTransformer() {
118    
119            if (transformer == null) {
120                transformer = new Transformer();
121    
122                getJmxRegistry().registerMBean(transformer, null);
123                getShutdownRegistry().registerShutdownListener(transformer);
124            }
125    
126            return transformer;
127        }
128    }