/* * Copyright (C) 2013 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.container.spi; import org.exoplatform.commons.utils.PropertyManager; import org.exoplatform.container.DefaultInterceptorChainFactory; import java.util.Iterator; import java.util.ServiceLoader; /** * This class will provide the {@link InterceptorChainFactory} to use. It will try to get it thanks to the {@link ServiceLoader} * if none can be found it will provide a default one. * * It will try to load the {@link InterceptorChainFactory} using the * current thread's {@linkplain Thread#getContextClassLoader()} context class loader. By default it will use the * {@link DefaultInterceptorChainFactory} * * @author <a href="mailto:nfilotto@exoplatform.com">Nicolas Filotto</a> * @version $Id$ * */ public class InterceptorChainFactoryProvider { /** * The {@link InterceptorChainFactory} that will be used to create all the {@link Container} instances */ private static final InterceptorChainFactory FACTORY; static { InterceptorChainFactory factory = null; ServiceLoader<InterceptorChainFactory> loader = ServiceLoader.load(InterceptorChainFactory.class); Iterator<InterceptorChainFactory> it = loader.iterator(); if (it.hasNext()) { factory = it.next(); } else { factory = new DefaultInterceptorChainFactory(); } if (PropertyManager.isDevelopping()) { System.out.println("The container factory used is " + factory.getClass().getName()); //NOSONAR } FACTORY = factory; } /** * Prevents instantiation */ private InterceptorChainFactoryProvider() { } /** * Gives the {@link InterceptorChainFactory} that must be used to create all the {@link Interceptor} chains */ public static InterceptorChainFactory getInterceptorChainFactory() { return FACTORY; } }