File was renamed from src/main/java/com/gitblit/dagger/DaggerContext.java |
| | |
| | | /* |
| | | * Copyright 2013 gitblit.com. |
| | | * Copyright 2014 gitblit.com. |
| | | * |
| | | * Licensed under the Apache License, Version 2.0 (the "License"); |
| | | * you may not use this file except in compliance with the License. |
| | |
| | | * See the License for the specific language governing permissions and |
| | | * limitations under the License. |
| | | */ |
| | | package com.gitblit.dagger; |
| | | package com.gitblit.guice; |
| | | |
| | | import javax.servlet.ServletContext; |
| | | import javax.servlet.ServletContextEvent; |
| | |
| | | import org.slf4j.LoggerFactory; |
| | | |
| | | import com.gitblit.servlet.InjectionContextListener; |
| | | |
| | | import dagger.ObjectGraph; |
| | | import com.google.inject.AbstractModule; |
| | | import com.google.inject.Guice; |
| | | import com.google.inject.Injector; |
| | | |
| | | /** |
| | | * Dagger servlet context listener is a context listener that uses Dagger to |
| | | * Guice servlet context listener is a context listener that uses Guice to |
| | | * instantiate and inject servlets, filters, and anything else you might want. |
| | | * |
| | | * @author James Moger |
| | | * |
| | | */ |
| | | public abstract class DaggerContext extends InjectionContextListener { |
| | | public abstract class GuiceContext extends InjectionContextListener { |
| | | |
| | | public static final String INJECTOR_NAME = ObjectGraph.class.getName(); |
| | | public static final String INJECTOR_NAME = Injector.class.getName(); |
| | | |
| | | protected final Logger logger = LoggerFactory.getLogger(getClass()); |
| | | |
| | | protected abstract Object [] getModules(); |
| | | protected abstract AbstractModule [] getModules(); |
| | | |
| | | protected abstract void destroyContext(ServletContext context); |
| | | |
| | | protected ObjectGraph getInjector(ServletContext context) { |
| | | protected Injector getInjector(ServletContext context) { |
| | | Object o = context.getAttribute(INJECTOR_NAME); |
| | | if (o == null) { |
| | | logger.debug("instantiating Dagger modules"); |
| | | Object [] modules = getModules(); |
| | | logger.debug("getting Dagger injector"); |
| | | logger.debug("instantiating Guice modules"); |
| | | AbstractModule [] modules = getModules(); |
| | | logger.debug("getting Guice injector"); |
| | | try { |
| | | o = ObjectGraph.create(modules); |
| | | logger.debug("setting Dagger injector into {} attribute", INJECTOR_NAME); |
| | | o = Guice.createInjector(modules); |
| | | logger.debug("setting Guice injector into {} attribute", INJECTOR_NAME); |
| | | context.setAttribute(INJECTOR_NAME, o); |
| | | } catch (Throwable t) { |
| | | logger.error("an error occurred creating the Dagger injector", t); |
| | | logger.error("an error occurred creating the Guice injector", t); |
| | | } |
| | | } |
| | | return (ObjectGraph) o; |
| | | return (Injector) o; |
| | | } |
| | | |
| | | /** |
| | |
| | | @Override |
| | | protected <X> X instantiate(ServletContext context, Class<X> clazz) { |
| | | try { |
| | | ObjectGraph injector = getInjector(context); |
| | | return injector.get(clazz); |
| | | Injector injector = getInjector(context); |
| | | return injector.getInstance(clazz); |
| | | } catch (Throwable t) { |
| | | logger.error(null, t); |
| | | } |