diff --git a/pom.xml b/pom.xml
index fe5c9db156..640dff1927 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,11 +17,20 @@
+
java.net2
Repository hosting the jee6 artifacts
http://download.java.net/maven/2
+
+
+ guice-maven
+ guice maven
+ http://guiceyfruit.googlecode.com/svn/repo/releases
+
+
+
diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml
index 04a31d8a83..6fb715e8eb 100644
--- a/scm-webapp/pom.xml
+++ b/scm-webapp/pom.xml
@@ -19,9 +19,9 @@
- javax
- javaee-web-api
- 6.0
+ javax.servlet
+ servlet-api
+ 2.5
provided
@@ -40,44 +40,60 @@
com.sun.jersey
jersey-core
- 1.1.0-ea
- provided
+ ${jersey.version}
com.sun.jersey
jersey-json
- 1.1.0-ea
- provided
+ ${jersey.version}
com.sun.jersey
jersey-bundle
- 1.1.0-ea
- provided
+ ${jersey.version}
+
+
+
+ com.sun.jersey.contribs
+ jersey-guice
+ ${jersey.version}
+
+
+
+ com.google.inject
+ guice
+ 2.0
+
+
+
+ com.google.inject.extensions
+ guice-servlet
+ 2.0
+
- org.apache.maven.plugins
- maven-war-plugin
- 2.1-beta-1
-
- false
-
+ org.mortbay.jetty
+ maven-jetty-plugin
+ 6.1.25
scm-webapp
-
+
+ 1.4-ea06
+
+
diff --git a/scm-webapp/src/main/java/sonia/scm/ContextListener.java b/scm-webapp/src/main/java/sonia/scm/ContextListener.java
new file mode 100644
index 0000000000..f09708fa9a
--- /dev/null
+++ b/scm-webapp/src/main/java/sonia/scm/ContextListener.java
@@ -0,0 +1,80 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+
+
+package sonia.scm;
+
+//~--- non-JDK imports --------------------------------------------------------
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.servlet.GuiceServletContextListener;
+import com.google.inject.servlet.ServletModule;
+
+import sonia.scm.api.rest.UriExtensionsConfig;
+import sonia.scm.security.Authenticator;
+import sonia.scm.security.DemoAuthenticator;
+
+//~--- JDK imports ------------------------------------------------------------
+
+import com.sun.jersey.api.core.PackagesResourceConfig;
+import com.sun.jersey.api.core.ResourceConfig;
+import com.sun.jersey.guice.spi.container.servlet.GuiceContainer;
+import com.sun.jersey.spi.container.servlet.ServletContainer;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *
+ * @author Sebastian Sdorra
+ */
+public class ContextListener extends GuiceServletContextListener
+{
+
+ /** Field description */
+ public static final String REST_MAPPING = "/api/rest/*";
+
+ /** Field description */
+ public static final String REST_PACKAGE = "sonia.scm.api.rest";
+
+ //~--- get methods ----------------------------------------------------------
+
+ /**
+ * Method description
+ *
+ *
+ * @return
+ */
+ @Override
+ protected Injector getInjector()
+ {
+ return Guice.createInjector(new ServletModule()
+ {
+ @Override
+ protected void configureServlets()
+ {
+ bind(Authenticator.class).to(DemoAuthenticator.class);
+
+ Map params = new HashMap();
+
+ /*
+ * params.put("com.sun.jersey.spi.container.ContainerRequestFilters",
+ * "com.sun.jersey.api.container.filter.LoggingFilter");
+ * params.put("com.sun.jersey.spi.container.ContainerResponseFilters",
+ * "com.sun.jersey.api.container.filter.LoggingFilter");
+ * params.put("com.sun.jersey.config.feature.Trace", "true");
+ * params.put("com.sun.jersey.config.feature.TracePerRequest", "true");
+ */
+ params.put(ResourceConfig.FEATURE_REDIRECT, Boolean.TRUE.toString());
+ params.put(ServletContainer.RESOURCE_CONFIG_CLASS,
+ UriExtensionsConfig.class.getName());
+ params.put(PackagesResourceConfig.PROPERTY_PACKAGES, REST_PACKAGE);
+ serve(REST_MAPPING).with(GuiceContainer.class, params);
+ }
+ });
+ }
+}
diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java
index 8854b964a8..ee44fd6e49 100644
--- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java
+++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java
@@ -9,6 +9,8 @@ package sonia.scm.api.rest.resources;
//~--- non-JDK imports --------------------------------------------------------
+import com.google.inject.Inject;
+
import sonia.scm.SCMContext;
import sonia.scm.ScmState;
import sonia.scm.User;
@@ -17,9 +19,6 @@ import sonia.scm.security.Authenticator;
//~--- JDK imports ------------------------------------------------------------
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.FormParam;
@@ -36,7 +35,6 @@ import javax.ws.rs.core.Response;
*
* @author Sebastian Sdorra
*/
-@Singleton
@Path("authentication")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public class AuthenticationResource
diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupResource.java
index 350b373aa2..1c42b3a488 100644
--- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupResource.java
+++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupResource.java
@@ -16,8 +16,6 @@ import sonia.scm.group.Group;
import java.util.Collection;
import java.util.LinkedHashMap;
-import javax.inject.Singleton;
-
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@@ -26,7 +24,6 @@ import javax.ws.rs.core.MediaType;
*
* @author Sebastian Sdorra
*/
-@Singleton
@Path("groups")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public class GroupResource extends AbstractResource
diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java
index 8cb48ed483..0c98cb2c29 100644
--- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java
+++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java
@@ -18,7 +18,6 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
-import javax.inject.Singleton;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@@ -28,7 +27,6 @@ import javax.ws.rs.core.MediaType;
*
* @author Sebastian Sdorra
*/
-@Singleton
@Path("repositories")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public class RepositoryResource extends AbstractResource
diff --git a/scm-webapp/src/main/java/sonia/scm/security/SecurityFilter.java b/scm-webapp/src/main/java/sonia/scm/security/SecurityFilter.java
index 15a1341cfa..d338366ebc 100644
--- a/scm-webapp/src/main/java/sonia/scm/security/SecurityFilter.java
+++ b/scm-webapp/src/main/java/sonia/scm/security/SecurityFilter.java
@@ -9,6 +9,7 @@ package sonia.scm.security;
//~--- non-JDK imports --------------------------------------------------------
+import com.google.inject.Inject;
import sonia.scm.User;
//~--- JDK imports ------------------------------------------------------------
@@ -17,7 +18,6 @@ import java.io.IOException;
import java.security.Principal;
-import javax.inject.Inject;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
@@ -25,7 +25,6 @@ import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
-import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
@@ -34,7 +33,6 @@ import javax.servlet.http.HttpServletResponse;
*
* @author Sebastian Sdorra
*/
-@WebFilter(urlPatterns = "/api/rest/*")
public class SecurityFilter implements Filter
{
diff --git a/scm-webapp/src/main/webapp/WEB-INF/beans.xml b/scm-webapp/src/main/webapp/WEB-INF/beans.xml
deleted file mode 100644
index bb8ba6ac8f..0000000000
--- a/scm-webapp/src/main/webapp/WEB-INF/beans.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/scm-webapp/src/main/webapp/WEB-INF/web.xml b/scm-webapp/src/main/webapp/WEB-INF/web.xml
index 62b993fe68..73d63e5e79 100644
--- a/scm-webapp/src/main/webapp/WEB-INF/web.xml
+++ b/scm-webapp/src/main/webapp/WEB-INF/web.xml
@@ -1,35 +1,21 @@
-
+
-
- Jersey Web Application
- com.sun.jersey.spi.container.servlet.ServletContainer
-
- com.sun.jersey.config.feature.Redirect
- true
-
-
- com.sun.jersey.config.feature.ImplicitViewables
- true
-
-
- com.sun.jersey.config.property.packages
- sonia.scm.api.rest
-
-
- com.sun.jersey.config.property.resourceConfigClass
- sonia.scm.api.rest.UriExtensionsConfig
-
- 1
-
+
+ sonia.scm.ContextListener
+
-
- Jersey Web Application
- /api/rest/*
-
+
+ guiceFilter
+ com.google.inject.servlet.GuiceFilter
+
+
+
+ guiceFilter
+ /*
+
index.html