001    /*****************************************************************************
002     * Copyright (C) PicoContainer Organization. All rights reserved.            *
003     * ------------------------------------------------------------------------- *
004     * The software in this package is published under the terms of the BSD      *
005     * style license a copy of which has been included with this distribution in *
006     * the LICENSE.txt file.                                                     *
007     *                                                                           *
008     * Original code by                                                          *
009     *****************************************************************************/
010    package org.picocontainer.gems;
011    
012    import org.picocontainer.gems.adapters.ThreadLocalizing;
013    import org.picocontainer.gems.behaviors.AsmImplementationHiding;
014    import org.picocontainer.gems.behaviors.HotSwapping;
015    import org.picocontainer.gems.behaviors.Pooling;
016    import org.picocontainer.gems.jmx.JMXExposing;
017    import org.picocontainer.gems.monitors.CommonsLoggingComponentMonitor;
018    import org.picocontainer.gems.monitors.Log4JComponentMonitor;
019    import org.picocontainer.gems.monitors.Slf4jComponentMonitor;
020    import org.picocontainer.ComponentMonitor;
021    import org.picocontainer.BehaviorFactory;
022    
023    
024    /**
025     * Provides a series of factory methods to allow an "index" of the capabilities that you may find in 
026     * PicoContainer-Gems.
027     * @author Paul Hammant
028     */
029    public class PicoGemsBuilder {
030    
031            /**
032             * Creates an {@link org.picocontainer.gems.behaviors.AsmImplementationHiding AsmImplementationHiding} behavior factory.
033             * @return a new AsmImplementationHiding() instance.
034             * @deprecated renamed to ASM_IMPL_HIDING() to better differentiate between JDK Proxy implementation hiding
035             * and ASM-based implementation hiding.
036             */
037            @Deprecated
038        public static BehaviorFactory IMPL_HIDING() {
039            return new AsmImplementationHiding();
040        }
041        
042        /**
043             * Creates an {@link org.picocontainer.gems.behaviors.AsmImplementationHiding AsmImplementationHiding} behavior factory.
044             * @return a new AsmImplementationHiding() instance.
045             * @since PicoContainer-Gems 2.4
046         */
047        public static BehaviorFactory ASM_IMPL_HIDING() {
048            return new AsmImplementationHiding();           
049        }
050        
051        /**
052         * Creates a {@link org.picocontainer.gems.behaviors.HotSwapping HotSwapping} behavior factory.
053         * @return
054         */
055        public static BehaviorFactory HOT_SWAPPING() {
056            return new HotSwapping();
057        }
058        
059        /**
060         * Only uses the system default mbean server.  See {@link org.picocontainer.gems.jmx.JMXExposing JMXExposing} for other 
061         * constructors that give you more flexibility in exposing your objects.
062         * @return JMX Exposing behavior factory.
063         */
064        public static BehaviorFactory JMX() {
065            return new JMXExposing();
066        }
067    
068        /**
069         * Creates a thread localizing adapter factory.
070         * @return
071         */
072        public static BehaviorFactory THREAD_LOCAL() {
073            return new ThreadLocalizing();
074        }
075        
076        /**
077         * Creates an instance pooling adapter factory.
078         * @return 
079         */
080        public static BehaviorFactory POOLING() {
081            return new Pooling();
082        }
083        
084        /**
085         * Creates a log4j component monitor instance.  You will need Log4j in your classpath for this method to work. 
086         * @return Log4j-based component monitor.
087         */
088        public static ComponentMonitor LOG4J() {
089            return new Log4JComponentMonitor();
090        }
091        
092        /**
093         * Creates a slf4j component monitor instance.  You will need SLF4j in your classpath for this method to work
094         * properly.
095         * @return SLF4j-based component monitor.
096         */
097        public static ComponentMonitor SLF4J() {
098            return new Slf4jComponentMonitor();
099        }
100        
101        /**
102         * Creates a Commons-Logging based component monitor instance.  You will need Apache Commons-Logging in your classpath
103         * for this method to work properly.
104         * @return Commons-Logging based component monitor.
105         */
106        public static ComponentMonitor COMMONS_LOGGING() {
107            return new CommonsLoggingComponentMonitor();
108        }
109        
110        
111        
112    
113    }