diff --git a/scm-annotations/pom.xml b/scm-annotations/pom.xml
index 7d64cf3544..43f281069c 100644
--- a/scm-annotations/pom.xml
+++ b/scm-annotations/pom.xml
@@ -14,5 +14,16 @@
scm-annotations
2.0.0-SNAPSHOT
scm-annotations
+
+
+
+
+ com.google.inject
+ guice
+ ${guice.version}
+ true
+
+
+
diff --git a/scm-annotations/src/main/java/sonia/scm/Default.java b/scm-annotations/src/main/java/sonia/scm/Default.java
new file mode 100644
index 0000000000..3364344735
--- /dev/null
+++ b/scm-annotations/src/main/java/sonia/scm/Default.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2010, Sebastian Sdorra All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer. 2. Redistributions in
+ * binary form must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution. 3. Neither the name of SCM-Manager;
+ * nor the names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * http://bitbucket.org/sdorra/scm-manager
+ *
+ */
+
+
+
+package sonia.scm;
+
+//~--- non-JDK imports --------------------------------------------------------
+
+import com.google.inject.BindingAnnotation;
+
+//~--- JDK imports ------------------------------------------------------------
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The default annotation can be used to inject the default implementation of
+ * service. The annotation is mainly used to inject the ServletContext.
+ *
+ * @author Sebastian Sdorra
+ * @since 2.0.0
+ */
+@Documented
+@BindingAnnotation
+@Target(ElementType.PARAMETER)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Default {}
diff --git a/scm-annotations/src/main/java/sonia/scm/plugin/Extension.java b/scm-annotations/src/main/java/sonia/scm/plugin/Extension.java
index c25b901975..ce3bd24406 100644
--- a/scm-annotations/src/main/java/sonia/scm/plugin/Extension.java
+++ b/scm-annotations/src/main/java/sonia/scm/plugin/Extension.java
@@ -33,10 +33,6 @@
package sonia.scm.plugin;
-//~--- non-JDK imports --------------------------------------------------------
-
-import sonia.scm.plugin.PluginAnnotation;
-
//~--- JDK imports ------------------------------------------------------------
import java.lang.annotation.Documented;
diff --git a/scm-webapp/src/main/java/sonia/scm/ScmContextListener.java b/scm-webapp/src/main/java/sonia/scm/ScmContextListener.java
index 66e0590d6d..829ddcb6e7 100644
--- a/scm-webapp/src/main/java/sonia/scm/ScmContextListener.java
+++ b/scm-webapp/src/main/java/sonia/scm/ScmContextListener.java
@@ -204,24 +204,23 @@ public class ScmContextListener extends GuiceServletContextListener
*
*
*
- * @param servletContext
+ * @param servletCtx
* @return
*/
- private Injector getDefaultInjector(ServletContext servletContext)
+ private Injector getDefaultInjector(ServletContext servletCtx)
{
DefaultPluginLoader pluginLoader = new DefaultPluginLoader(parent, plugins);
ClassOverrides overrides =
ClassOverrides.findOverrides(pluginLoader.getUberClassLoader());
- ScmServletModule main = new ScmServletModule(pluginLoader, overrides);
List moduleList = Lists.newArrayList();
moduleList.add(new ScmInitializerModule());
moduleList.add(new ScmEventBusModule());
moduleList.add(new EagerSingletonModule());
moduleList.add(ShiroWebModule.guiceFilterModule());
- moduleList.add(main);
- moduleList.add(new ScmSecurityModule(servletContext));
+ moduleList.add(new ScmServletModule(servletCtx, pluginLoader, overrides));
+ moduleList.add(new ScmSecurityModule(servletCtx));
moduleList.addAll(pluginLoader.getInjectionModules());
moduleList.addAll(overrides.getModules());
diff --git a/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java b/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java
index c0cb5a3a2e..780f1202e9 100644
--- a/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java
+++ b/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java
@@ -143,6 +143,8 @@ import com.sun.jersey.spi.container.servlet.ServletContainer;
import java.util.Map;
+import javax.servlet.ServletContext;
+
/**
*
* @author Sebastian Sdorra
@@ -212,11 +214,15 @@ public class ScmServletModule extends JerseyServletModule
* Constructs ...
*
*
+ *
+ * @param servletContext
* @param pluginLoader
* @param overrides
*/
- ScmServletModule(DefaultPluginLoader pluginLoader, ClassOverrides overrides)
+ ScmServletModule(ServletContext servletContext,
+ DefaultPluginLoader pluginLoader, ClassOverrides overrides)
{
+ this.servletContext = servletContext;
this.pluginLoader = pluginLoader;
this.overrides = overrides;
}
@@ -244,6 +250,10 @@ public class ScmServletModule extends JerseyServletModule
RepositoryProvider.class, Repository.class).to(
DefaultRepositoryProvider.class).in(RequestScoped.class);
+ // bind servlet context
+ bind(ServletContext.class).annotatedWith(Default.class).toInstance(
+ servletContext);
+
// bind event api
bind(ScmEventBus.class).toInstance(ScmEventBus.getInstance());
@@ -500,4 +510,7 @@ public class ScmServletModule extends JerseyServletModule
/** Field description */
private final DefaultPluginLoader pluginLoader;
+
+ /** Field description */
+ private final ServletContext servletContext;
}
diff --git a/scm-webapp/src/main/java/sonia/scm/resources/DefaultResourceManager.java b/scm-webapp/src/main/java/sonia/scm/resources/DefaultResourceManager.java
index 4e5c99c98d..0570addf07 100644
--- a/scm-webapp/src/main/java/sonia/scm/resources/DefaultResourceManager.java
+++ b/scm-webapp/src/main/java/sonia/scm/resources/DefaultResourceManager.java
@@ -53,6 +53,7 @@ import java.util.Map;
import java.util.Set;
import javax.servlet.ServletContext;
+import sonia.scm.Default;
/**
*
@@ -79,7 +80,7 @@ public class DefaultResourceManager extends AbstractResourceManager
* @param resourceHandlers
*/
@Inject
- public DefaultResourceManager(ServletContext servletContext,
+ public DefaultResourceManager(@Default ServletContext servletContext,
PluginLoader pluginLoader, Set resourceHandlers)
{
super(servletContext, pluginLoader, resourceHandlers);
diff --git a/scm-webapp/src/main/java/sonia/scm/resources/DevelopmentResourceManager.java b/scm-webapp/src/main/java/sonia/scm/resources/DevelopmentResourceManager.java
index 114295626d..c4382204d5 100644
--- a/scm-webapp/src/main/java/sonia/scm/resources/DevelopmentResourceManager.java
+++ b/scm-webapp/src/main/java/sonia/scm/resources/DevelopmentResourceManager.java
@@ -38,6 +38,7 @@ package sonia.scm.resources;
import com.google.inject.Inject;
import com.google.inject.Singleton;
+import sonia.scm.Default;
import sonia.scm.plugin.PluginLoader;
//~--- JDK imports ------------------------------------------------------------
@@ -72,7 +73,7 @@ public class DevelopmentResourceManager extends AbstractResourceManager
* @param resourceHandlers
*/
@Inject
- public DevelopmentResourceManager(ServletContext servletContext,
+ public DevelopmentResourceManager(@Default ServletContext servletContext,
PluginLoader pluginLoader, Set resourceHandlers)
{
super(servletContext, pluginLoader, resourceHandlers);
diff --git a/scm-webapp/src/main/java/sonia/scm/template/ErrorServlet.java b/scm-webapp/src/main/java/sonia/scm/template/ErrorServlet.java
index 7cfd6342ab..8604324769 100644
--- a/scm-webapp/src/main/java/sonia/scm/template/ErrorServlet.java
+++ b/scm-webapp/src/main/java/sonia/scm/template/ErrorServlet.java
@@ -86,7 +86,6 @@ public class ErrorServlet extends HttpServlet
*
*
* @param context
- * @param handler
* @param templateEngineFactory
*/
@Inject
diff --git a/scm-webapp/src/main/java/sonia/scm/template/MustacheTemplateEngine.java b/scm-webapp/src/main/java/sonia/scm/template/MustacheTemplateEngine.java
index 5aa36b124d..ccef19a4bb 100644
--- a/scm-webapp/src/main/java/sonia/scm/template/MustacheTemplateEngine.java
+++ b/scm-webapp/src/main/java/sonia/scm/template/MustacheTemplateEngine.java
@@ -46,6 +46,7 @@ import com.google.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import sonia.scm.Default;
import sonia.scm.plugin.PluginLoader;
//~--- JDK imports ------------------------------------------------------------
@@ -89,7 +90,7 @@ public class MustacheTemplateEngine implements TemplateEngine
* @param pluginLoader
*/
@Inject
- public MustacheTemplateEngine(ServletContext context,
+ public MustacheTemplateEngine(@Default ServletContext context,
PluginLoader pluginLoader)
{
factory = new ServletMustacheFactory(context, pluginLoader);